WordPress как на ладони
wordpress jino

Создание новых терминов при обновлении записей

Доброго дня. Столкнулся со странной проблемой. При обновлении кастомного типа записи у меня не сохраняется нужная категория.

Выбираю нужную мне категорию, а после обновления оказывается что у меня появляется новая категория с 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)

Molotow месяц назад

Вы эту свою радость в чистом плагине еще в чистый вордпресс закиньте.
Если там все здорово, то есть подозрение на проблемы с init.

Molotow месяц назад

И еще на всякий случай permalinks пересохраните.

Sau месяц назад

Спасибо за совет, но суть проблемы оказалась банальна. Если категории указать

'hierarchical'       => false,

ТО с каким бы бубном я не плясал он воспринимает категории как теги и соответственно с ними работает как с тегами(не нашел совпадение в поле name значит создаём новое). То есть чтобы нормально он отрабатывал без параметра hierarchical нужно либо свою обработку писать чего не хочется либо костыль который будет превращать переданные id в названия. Хотя тут можно в принципе несколькими способами извратиться.

1
Sau3 месяц назад

Нет ответов на этот вопрос.

На вопросы могут отвечать только зарегистрированные пользователи. Регистрация. Вход.