Создание новых терминов при обновлении записей
Доброго дня. Столкнулся со странной проблемой. При обновлении кастомного типа записи у меня не сохраняется нужная категория.
Выбираю нужную мне категорию, а после обновления оказывается что у меня появляется новая категория с name='id выбранной категории'. Никаких хуков и вмешательства не нашёл. В чём может быть проблема?
Вот код регистрации
register_post_type( 'method', [ 'labels' => [ 'name' => __( 'Методики', THEME_LANG ), 'singular_name' => __( 'Методика', THEME_LANG ), 'add_new' => __( 'Добавить методику', THEME_LANG ), 'add_new_item' => __( 'Добавление методики', THEME_LANG ), 'edit_item' => __( 'Редактирование методики', THEME_LANG ), 'new_item' => __( 'Новая методика', THEME_LANG ), 'view_item' => __( 'Просмотр методики', THEME_LANG ), 'search_items' => __( 'Искать методику', THEME_LANG ), 'not_found' => __( 'Методика не найдена', THEME_LANG ), 'not_found_in_trash' => __( 'Не найдено', THEME_LANG ), 'menu_name' => __( 'Методики', THEME_LANG ), ], 'public' => true, 'map_meta_cap' => true, 'menu_position' => 5, 'hierarchical' => false, 'rewrite' => false, 'taxonomies' => ['cat_method'], 'query_var' => false, 'delete_with_user' => true, 'menu_icon' => 'dashicons-admin-page', 'supports' => [ 'title', 'editor', 'excerpt' ], ] ); register_taxonomy( 'cat_method', array( 'method' ), [ 'labels' => [ 'name' => __( 'Категории методик', THEME_LANG ), 'singular_name' => __( 'Категория', THEME_LANG ), 'search_items' => __( 'Поиск категории', THEME_LANG ), 'all_items' => __( 'Все категории', THEME_LANG ), 'view_item ' => __( 'Просмотр категории', THEME_LANG ), 'parent_item' => __( 'Родительская категория', THEME_LANG ), 'parent_item_colon' => __( 'Родительская категория:', THEME_LANG ), 'edit_item' => __( 'Редактирование категории', THEME_LANG ), 'update_item' => __( 'Обновление категории', THEME_LANG ), 'add_new_item' => __( 'Создание категории', THEME_LANG ), 'new_item_name' => __( 'Новая категория', THEME_LANG ), 'menu_name' => __( 'Категории', THEME_LANG ), ], 'public' => false, 'meta_box_cb' => 'post_categories_meta_box', 'hierarchical' => false, 'show_in_nav_menus' => false, 'show_tagcloud' => false, 'show_in_rest' => false, 'publicly_queryable' => false, 'show_ui' => true, 'show_admin_column' => true, ] );
Но при этом в обычных записях всё нормально.
Ещё один момент. По технологической необходимости пришлось хук init спустить до приоритета 1 иначе перестает работать некоторая часть функционала завязанная на этом типе записей. Но при попытке вернуть приоритет 10 проблема не решается
Пробовал переписать функцию для метабокса с категориями, не помогло происходит таже фигня (использовал wp_terms_checklist()). Если нет идей почему может возникать такой косяк, то может подскажите как правильно создавать связи между постами и терминами при сохранении?
Я даже заморочился, и в чистом плагине написал эту штуку. Таже фигня. Может я где в объявлении косякнул (хотя после 8 часов плясок с бубном я объявление вообще достал из дефолтного объявления типа post)
И еще на всякий случай permalinks пересохраните.
Спасибо за совет, но суть проблемы оказалась банальна. Если категории указать
'hierarchical' => false,
ТО с каким бы бубном я не плясал он воспринимает категории как теги и соответственно с ними работает как с тегами(не нашел совпадение в поле name значит создаём новое). То есть чтобы нормально он отрабатывал без параметра hierarchical нужно либо свою обработку писать чего не хочется либо костыль который будет превращать переданные id в названия. Хотя тут можно в принципе несколькими способами извратиться.
Вы эту свою радость в чистом плагине еще в чистый вордпресс закиньте.
Если там все здорово, то есть подозрение на проблемы с init.