Добавление меток к пользовательскому типу записи
Я использую фреймворк Cherry на сайте WordPress. В нем есть пользовательский тип записи для добавления 'Членов команды' и создания страниц персонала и т.д.
Мне нужно расширить эту функциональность, чтобы я мог добавлять метки к каждому 'члену команды', чтобы по сути помечать их как работающих в отделах a / b / c и т.д.
Пользовательский тип записи регистрируется в файле theme-init.php с помощью этого кода:
/* Наша команда */
function my_post_type_team() {
register_post_type( 'team',
array(
'label' => theme_locals("our_team"),
'singular_label' => theme_locals("our_team"),
'_builtin' => false,
// 'exclude_from_search' => true, // Исключить из результатов поиска
'capability_type' => 'page',
'public' => true,
'show_ui' => true,
'show_in_nav_menus' => false,
'menu_position' => 5,
'menu_icon' => ( version_compare( $GLOBALS['wp_version'], '3.8', '>=' ) ) ? 'dashicons-businessman' : '',
'rewrite' => array(
'slug' => 'team-view',
'with_front' => FALSE,
),
'supports' => array(
'title',
'editor',
'thumbnail',
)
)
);
}
add_action('init', 'my_post_type_team');
Я хочу добавить к этому метки, чтобы при добавлении нового члена команды я мог также назначить его в отдел с помощью соответствующей метки. В настоящее время поле редактора меток не отображается на странице добавления/редактирования.
Поэтому я адаптировал приведенный выше код, включив в него register_taxonomy следующим образом:
/* Наша команда */
function my_post_type_team() {
register_post_type( 'team',
array(
'label' => theme_locals("our_team"),
'singular_label' => theme_locals("our_team"),
'_builtin' => false,
// 'exclude_from_search' => true, // Исключить из результатов поиска
'capability_type' => 'page',
'public' => true,
'show_ui' => true,
'show_in_nav_menus' => false,
'menu_position' => 5,
'menu_icon' => ( version_compare( $GLOBALS['wp_version'], '3.8', '>=' ) ) ? 'dashicons-businessman' : '',
'rewrite' => array(
'slug' => 'team-view',
'with_front' => FALSE,
),
'supports' => array(
'title',
'editor',
'thumbnail',
)
)
);
register_taxonomy(
'team_tag',
'team',
array(
'hierarchical' => false,
'label' => theme_locals("tags"),
'singular_name' => theme_locals("tag"),
'rewrite' => true,
'query_var' => true
)
);
}
add_action('init', 'my_post_type_team');
Однако поле для меток по-прежнему не появляется на странице редактирования в админке.
Любая помощь с этим будет очень признательна.

Похоже, проблема частично заключалась в том, что в дочерней теме присутствовал файл theme-init.php, который перезаписывал части theme-init.php в родительской теме / фреймворке Cherry.
Я решил проблему, добавив следующий код в theme-init.php дочерней темы:
register_taxonomy('team_tag', 'team', array(
'hierarchical' => false,
'label' => theme_locals("tags"),
'singular_name' => theme_locals("tag"),
'rewrite' => true,
'query_var' => true
)
);

register_post_type( 'team',
array(
'label' => theme_locals("наша_команда"),
'singular_label' => theme_locals("наша_команда"),
'_builtin' => false,
// 'exclude_from_search' => true, // Исключить из результатов поиска
'capability_type' => 'page',
'public' => true,
'show_ui' => true,
'show_in_nav_menus' => false,
'menu_position' => 5,
'menu_icon' => ( version_compare( $GLOBALS['wp_version'], '3.8', '>=' ) ) ? 'dashicons-businessman' : '',
'rewrite' => array(
'slug' => 'team-view',
'with_front' => FALSE,
),
'supports' => array(
'title',
'editor',
'thumbnail',
),
'taxonomies' => array('team_tag')
)
);
Вы можете видеть, что я добавил параметр taxonomies
в функцию register_post_type
.
Хотя этот код должен работать, вы можете попробовать создать связь позже, с помощью этого:
add_action('init', 'add_tax_post_rel');
function add_tax_post_rel() {
register_taxonomy_for_object_type('team_tag', 'team', 11);
}

Спасибо за ответ, но это ничего не даёт. Если я изменю 'team_tag' на 'tag' и добавлю 'tags' в массив поддержки, то поле тегов появится в подменю и на странице редактора. Однако при этом используются общие теги сайта.

@PhillHealey не может быть, встроенные теги относятся к таксономии post_tag
, а не tag

Попробуйте этот вариант
register_taxonomy(
'team_tag',
'team',
array(
'hierarchical' => false, // Иерархическая структура (false - теги)
'label' => __( 'Метки', CURRENT_THEME ), // Название таксономии во мн.числе
'singular_name' => __( 'Метка', CURRENT_THEME ), // Название в ед.числе
'rewrite' => true, // Разрешить перезапись URL
'query_var' => true // Разрешить использование в запросах
)
);

Пожалуйста, добавляйте правильные ответы, то есть, если вы добавляете код, объясните, что делает ваш код и как он работает. Спасибо.

Этот вариант содержит почти идентичный код без непрозрачного определения функции, к которой у пользователей нет доступа. Во многих отношениях этот код должен быть использован в принятом ответе, так как он применим ко всему WordPress, а не только к фреймворку Cherry, если нет комментария к коду или определения функции. Это даже вызвало вопрос с вашей стороны.

Вы можете попробовать этот код:
add_action( 'init', 'create_client_tax' );
function create_client_tax() {
register_taxonomy(
'client_tag', // ваша таксономия для меток
'client', // ваш тип записи
array(
'hierarchical' => false,
'label' => __( 'Метки', CURRENT_THEME ),
'singular_name' => __( 'Метка', CURRENT_THEME ),
'rewrite' => true,
'query_var' => true
)
);
}
Возможно, это вам поможет.

Если вам нужно выводить теги для пользовательского типа записей (custom post type) - вот хороший пример https://jamper.online/vyvod-tegov-tags-dlya-kastomnyh-postov-custom-post-type
function get_terms_by_custom_post_type( $post_type, $taxonomy ){
$args = array( 'post_type' => $post_type);
$loop = new WP_Query( $args );
$postids = array();
// создаем массив ID записей
while ( $loop->have_posts() ) : $loop->the_post();
array_push($postids, get_the_ID());
endwhile;
// получаем значения таксономии на основе массива ID
$taxonomies = wp_get_object_terms( $postids, $taxonomy );
wp_reset_postdata();
return $taxonomies;
}
