Используйте стандартные категории WordPress с CPT

Я только что преобразовал все свои сообщения в блоге к CPT, потому что мне были нужны они, чтобы быть иерархическим. Проблема, мне присвоили категории всем сообщениям. Как я могу использовать стандартные категории WordPress в своем CPT?

Я попытался добавить 'taxonomies' => array('category'), к register_post_type функция, но это не работало. И я попробовал register_taxonomy_for_object_type( 'category', 'illustrations' ) и это не работало также.

Какие-либо предложения?

ОБНОВЛЕНИЕ: Спасибо все для ответов, но, как упомянуто выше — я попробовал обоих 'taxonomies' => array('category') и 'taxonomies' => array('category'), и ни один не работал.

Вот целая функция register_post_type — с 'taxonomies' параметром:

/* Register the 'Illustrations' post type */

register_post_type(
    'illustrations',
    array(
        'label' => 'illustrations',
        'description' => '',
        'public' => true,
        'menu_icon' => get_bloginfo( 'template_directory' ) . '/images/help-icon.png',
        'show_ui' => true,
        'show_in_menu' => true,
        'capability_type' => 'post',
        'taxonomies' => array( 'category' ),
        'has_archive' => true,
        'hierarchical' => true,
        'rewrite' => array( 'slug' => '' ),
        'query_var' => true,
        'supports' => array( 'title', 'editor', 'custom-fields', 'thumbnail', 'page-attributes', 'revisions', 'comments','author' ),
        'labels' => array (
            'name' => 'Illustrations',
            'singular_name' => 'Illustration',
            'menu_name' => 'Illustrations',
            'add_new' => 'Add Illustration',
            'add_new_item' => 'Add new Illustration',
            'edit' => 'Edit',
            'edit_item' => 'Edit illustration',
            'new_item' => 'New illustration',
            'view' => 'View illustration',
            'view_item' => 'View illustration',
            'search_items' => 'Search illustrations',
            'not_found' => 'No Illustrations Found',
            'not_found_in_trash' => 'No Illustrations Found in Trash',
            'parent' => 'Parent Illustration',
            ), ) );

register_taxonomy_for_object_type( 'category', 'illustrations' );
0
19.09.2013, 20:44
4 ответа

Ответ заключается в register_taxonomy_for_object_type. Очень простое использование.

Вы могли также попытаться передать 'taxonomies' аргумент в Вашем register_post_type.

2
19.02.2020, 23:37
  • 1
    Спасибо за ответ — но это, кажется, не работает на меня. –  saltcod 19.09.2013, 20:45
  • 2
    Вы делаете регистрацию на init рычаг, корректный? спасибо –  Eric Holmes 19.09.2013, 21:05
  • 3
    ACK! Это было удалено, и я никогда не замечал. Большое спасибо за справку — после того как у меня была та часть там, все разработало A-ok. –  saltcod 20.09.2013, 19:49

По умолчанию запросы для страниц категории только запросят post отправьте тип, таким образом, в дополнение к регистрации типа сообщения с категорией в taxonomies аргументе, необходимо изменить те запросы через pre_get_posts заставить CPT появляться на страницах категории:

function wpa_illustrations_on_category_pages( $query ) {
    if ( $query->is_category() && $query->is_main_query() ) {
        $query->set( 'post_type', array( 'post', 'illustrations' ) );
    }
}
add_action( 'pre_get_posts', 'wpa_illustrations_on_category_pages' );
4
19.02.2020, 23:37

Возможно, попробуйте это:

    /** Add Custom Taxonomy **/
    function illustrations_category_taxonomy() {
        $labels = array(
            'name'              => __( 'Categories' ),
            'singular_name'     => __( 'Category' ),
            'search_items'      => __( 'Search Categories' ),
            'all_items'         => __( 'All Categories' ),
            'parent_item'       => __( 'Parent Category' ),
            'parent_item_colon' => __( 'Parent Category:' ),
            'edit_item'         => __( 'Edit Category' ), 
            'update_item'       => __( 'Update Category' ),
            'add_new_item'      => __( 'Add New Category' ),
            'new_item_name'     => __( 'New Category' ),
            'menu_name'         => __( 'Categories' ),
        );
        $args = array(
            'labels'            => $labels,
            'hierarchical'      => true
        );
        register_taxonomy( 'illustrations-category', 'illustrations', $args );
    }
    add_action( 'init', 'illustrations_category_taxonomy');
1
19.02.2020, 23:37

Необходимо использовать taxonomies argument как это:

    'taxonomies' => array('category')

В Вашем register_post_type код.

Дополнительная информация: http://codex.wordpress.org/Function_Reference/register_post_type#Arguments


Обновление:

/* Register the 'Illustrations' post type */

    add_action( 'init', 'wpse114838_reg_pt_illustrations');
    function wpse114838_reg_pt_illustrations() { 
        register_post_type(
            'illustrations',
            array(
                'labels' => array (
                'name' => 'Illustrations',
                'singular_name' => 'Illustration',
                'menu_name' => 'Illustrations',
                'add_new' => 'Add Illustration',
                'add_new_item' => 'Add new Illustration',
                'edit' => 'Edit',
                'edit_item' => 'Edit illustration',
                'new_item' => 'New illustration',
                'view' => 'View illustration',
                'view_item' => 'View illustration',
                'search_items' => 'Search illustrations',
                'not_found' => 'No Illustrations Found',
                'not_found_in_trash' => 'No Illustrations Found in Trash',
                'parent' => 'Parent Illustration',
                ),
                'label' => 'illustrations',
                'description' => '',
                'public' => true,
                'menu_icon' => get_bloginfo( 'template_directory' ) . '/images/help-icon.png',
                'show_ui' => true,
                'show_in_menu' => true,
                'capability_type' => 'post',
                //you need just one of the methods, uncomment the one you want
                //'taxonomies' => array( 'category' ),
                'has_archive' => true,
                'hierarchical' => true,
                'rewrite' => array( 'slug' => '' ),
                'query_var' => true,
                'supports' => array( 'title', 'editor', 'custom-fields', 'thumbnail', 'page-attributes', 'revisions', 'comments','author' ),
            )
        );
        //you need just one of the methods, uncomment the one you want    
        //register_taxonomy_for_object_type( 'category', 'illustrations' );
    }

Это основано на коде в Вашем вопросе. Я протестировал его с обоими - register_taxonomy_for_object_type( 'category', 'illustrations' ); или 'taxonomies' => array( 'category' ) - методы, и это работает. Просто используйте одного из них, нет никакого смысла в выполнении обоих, некомментарий тот, который Вы хотите в коде выше. Вы, вероятно, не сцеплялись в init действие, как @EricHolmes и предложенный @Howdy_McGee.

0
19.02.2020, 23:37
  • 1
    Спасибо за ответ — но это, кажется, не работает на меня. Какие-либо идеи, почему? –  saltcod 19.09.2013, 20:45
  • 2
    Только для следования этому пересмотренный ответ, конечно, работает. Большое спасибо сэр –  Nicolai 07.11.2013, 15:08

Теги

Похожие вопросы