Как назначить термин таксономии посту?
Во дела! Ответить не могу, но могу редактировать (задал вопрос будучи гостем). В общем, вопрос закрыт, мне подсказали, что надо использовать institutions a не institution.
У меня в базе импортирована куча записей с разными кастомными post_type. Одновременно тема создает таксономию institution таким образом
function my_taxonomies_institutions() { $labels = array( 'name' => _x( 'Категории', 'taxonomy general name' ), 'singular_name' => _x( 'Категория', 'taxonomy singular name' ), 'search_items' => __( 'Найти' ), 'all_items' => __( 'Все' ), 'parent_item' => __( 'Родительская' ), 'parent_item_colon' => __( 'Родительская:' ), 'edit_item' => __( 'Редактировать' ), 'update_item' => __( 'Обновить' ), 'add_new_item' => __( 'Добавить новую' ), 'new_item_name' => __( 'Новая' ), 'menu_name' => __( 'Категории' ), ); $args = array( 'labels' => $labels, 'hierarchical' => true, 'show_admin_column' => true, 'rewrite' => array( 'hierarchical' => true, 'slug' => 'institutions' ), ); register_taxonomy( 'institutions', 'institution', $args ); } add_action( 'init', 'my_taxonomies_institutions', 0 );
В админке есть пункт меню Учреждения и внутри - Категории. Например, категория Секции (sekcii).
Теперь, чтобы заработала тема, расчитанная на эти таксономии, мне надо пройтись по базе и если в посте post_type=sekcii установить ему (как я это понимаю) термин sekcii таксономии institution. Вроде это делается функцией wp_set_post_terms
Сначала определяю id термина:
print term_exists('sekcii'); // 7
дальше пробую эти варианты
$ret = wp_set_post_terms($pid, 7, 'institution'); $ret = wp_set_post_terms($pid, 'sekcii', 'institution'); $ret = wp_set_post_terms($pid, 7, 'Категория'); $ret = wp_set_post_terms($pid, 'Секции', 'Категория');
каждый раз получаю
WP_Error Object ( [errors] => Array ( [invalid_taxonomy] => Array ( [0] => Неверная таксономия. ) ) [error_data] => Array ( ) )
Что я делаю не так?
Где вы прописываете код? Это надо делать минимум на хуке init, после регистрации таксономий, иначе если вызвать код раньше - естественно он не увидит таксономию и сразу вернет ошибку, не ища термин в базе.