Как при создании нового меню добавить в него пункты
Задача: нужно добавить в меню при его создании в админке все рубрики сайта, учитывая их иерархию, а также учитывая, что меню назначена область меню "Подвал сайта" (footer).
add_action( 'wp_create_nav_menu', function ( $term_id ) { // Если вручную что-то было добавлено в меню - прерываем процесс if ( ! empty( $_REQUEST['menu-item'] ) ) { return; } // Если не выбрана локация footer - прерываем процесс if ( ! isset( $_REQUEST['menu-locations']['footer'] ) ) { return; } // Получаем рубрики (или что угодно) $items = get_categories( [ 'hide_empty' => false ] ); // Если нет терминов - прерываем процесс if ( ! $items ) { return; } foreach ( $items as $key => $term ) { $result = wp_update_nav_menu_item( $term_id, 0, [ 'menu-item-type' => 'taxonomy', 'menu-item-object' => $term->taxonomy, 'menu-item-object-id' => $term->term_id, ] ); if ( is_wp_error( $result ) ) { error_log( print_r( $result->get_error_message(), true ) ); } else { $items[ $key ]->db_id = $result; } } // Находит значение родительского ID пункта меню термина по родителю термина $get_parent = static function ( WP_Term $term ) use ( $items ) { foreach ( $items as $_term ) { if ( $term->parent === $_term->term_id ) { return $_term->db_id; } } return 0; }; // Присваиваем родителя в рамках меню foreach ( $items as $key => $term ) { $parent = $get_parent( $term ); wp_update_post( wp_slash( [ 'ID' => $term->db_id, 'post_parent' => $parent, 'meta_input' => [ '_menu_item_menu_item_parent' => $parent, ], ] ) ); } } );