Добавление меток к пользовательскому типу записи

9 сент. 2014 г., 14:45:42
Просмотры: 16.4K
Голосов: 1

Я использую фреймворк 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');

Однако поле для меток по-прежнему не появляется на странице редактирования в админке.

Любая помощь с этим будет очень признательна.

2
Комментарии

Какова функция этих theme_locals

Pieter Goosen Pieter Goosen
9 сент. 2014 г. 15:40:50

@PieterGoosen Честно говоря, я не знаю. Должно быть, они являются частью фреймворка (cherry framework).

Phill Healey Phill Healey
9 сент. 2014 г. 16:35:02
Все ответы на вопрос 6
0

Похоже, проблема частично заключалась в том, что в дочерней теме присутствовал файл 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
    )
);
9 сент. 2014 г. 16:33:44
4
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);
}
9 сент. 2014 г. 14:59:26
Комментарии

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

Phill Healey Phill Healey
9 сент. 2014 г. 15:26:05

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

Pieter Goosen Pieter Goosen
9 сент. 2014 г. 15:42:16

@PhillHealey, я добавил альтернативный способ создания связи.

Tomás Cot Tomás Cot
9 сент. 2014 г. 15:57:54

@PieterGoosen Хорошо, значит он использует те же теги, что и другой пользовательский тип записи.

Phill Healey Phill Healey
9 сент. 2014 г. 16:18:24
2

Попробуйте этот вариант

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

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

Pieter Goosen Pieter Goosen
1 дек. 2015 г. 10:49:47

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

MrMesees MrMesees
13 июн. 2017 г. 15:03:07
0

Вы можете попробовать этот код:

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 
            )  
        );
}

Возможно, это вам поможет.

6 мар. 2018 г. 20:22:17
0

Я также не видел поле тегов на экране редактирования пользовательского типа записи (CPT) в админке. Оно появилось после добавления параметра 'show_in_rest' => true, в аргументы функции register_taxonomy().

29 июл. 2021 г. 14:35:31
0

Если вам нужно выводить теги для пользовательского типа записей (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;
}
15 сент. 2023 г. 12:55:41