Как добавлять категории в пользовательские типы постов в WordPress
Категории по умолчанию используются только для постов. Однако в некоторых сценариях у вас может возникнуть желание использовать их с пользовательским типом постов. В этой статье мы расскажем вам как это можно сделать.
Способ с плагином
Для начинающих пользователей мы рекомендуем использовать Custom Post Type UI плагин, чтобы создать пользовательский тип постов. Используя этот плагин, у вас есть возможность ассоциировать пользовательский тип постов с любой встроенной или пользовательской таксономией, включая категории. После установки плагина зайдите в CPT UI » Add/Edit Post Types для того, чтобы создать новый пользовательский тип постов или отредактировать существующий.

Прокрутите вниз до Advanced Options и там вы увидите параметр Built in Taxnomies. Отметьте ячейку напротив категорий и сохраните свой тип постов.

Ручное добавление категорий для пользовательского типа постов
Если вы создали пользовательский тип постов, добавив код в файл functions.php, вам нужно добавить категории как поддерживаемую таксономию с помощью функции register_taxonomy_for_object_type().
Всё, что от вас требуется, это добавить эту строку после регистрации вашего пользовательского типа постов:
register_taxonomy_for_object_type( ‘category’, ‘movies’ );
Если у вас уже есть другая пользовательская таксономия, например topics, добавьте обе следующим образом:
register_taxonomy_for_object_type( ‘topics’, ‘movies’ );
register_taxonomy_for_object_type( ‘category’, ‘movies’ );
Вот пример целого кода, где мы создали пользовательский тип постов под названием «фильмы» с поддержкой всех встроенных категорий.
function custom_post_type() {
 
    // Set UI labels for Custom Post Type
    $labels = array(
        'name'                => _x( 'Movies', 'Post Type General Name', 'mytheme' ),
        'singular_name'       => _x( 'Movie', 'Post Type Singular Name', 'mytheme' ),
        'menu_name'           => __( 'Movies', 'mytheme' ),
        'parent_item_colon'   => __( 'Parent Movie', 'mytheme' ),
        'all_items'           => __( 'All Movies', 'mytheme' ),
        'view_item'           => __( 'View Movie', 'mytheme' ),
        'add_new_item'        => __( 'Add New Movie', 'mytheme' ),
        'add_new'             => __( 'Add New', 'mytheme' ),
        'edit_item'           => __( 'Edit Movie', 'mytheme' ),
        'update_item'         => __( 'Update Movie', 'mytheme' ),
        'search_items'        => __( 'Search Movie', 'mytheme' ),
        'not_found'           => __( 'Not Found', 'mytheme' ),
        'not_found_in_trash'  => __( 'Not found in Trash', 'mytheme' ),
    );
     
    // Set other options for Custom Post Type
    $args = array(
        'label'               => __( 'movies', 'mytheme' ),
        'description'         => __( 'Movie news and reviews', 'mytheme' ),
        'labels'              => $labels,
        'supports'            => array( 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'comments', 'revisions', 'custom-fields' ),
        'hierarchical'        => false,
        'public'              => true,
        'show_ui'             => true,
        'show_in_menu'        => true,
        'show_in_nav_menus'   => true,
        'show_in_admin_bar'   => true,
        'menu_position'       => 5,
        'can_export'          => true,
        'has_archive'         => true,
        'exclude_from_search' => false,
        'publicly_queryable'  => true,
        'capability_type'     => 'page',
        'show_in_rest'        => true,
    );
     
    // Registering your Custom Post Type
    register_post_type( 'movies', $args );
    // Registering Categories and tags
    register_taxonomy_for_object_type( 'category', 'movies' );
    register_taxonomy_for_object_type( 'post_tag', 'movies' );
}
 
/* Hook into the 'init' action */
add_action( 'init', 'custom_post_type', 0 );
Отображение нескольких типов постов на странице категории
По умолчанию страницы категории на сайте WordPress отображают стандартный тип постов. Если хотите, чтобы ваш тип постов отображался бы на той же странице категорий, что и посты по умолчанию, то вам надо добавить следующий код в файл functions.php:
add_filter( 'pre_get_posts', 'query_post_type' );
function query_post_type( $query ) {
    if ( $query->is_main_query() && !is_admin() && is_category() ) {
        $post_type = get_query_var( 'post_type' );
        if ( $post_type ) {
            $post_type = $post_type;
        } else {
            $post_type = array( 'post', 'movies' );
        }
        $query->set( 'post_type', $post_type );
    }
    return $query;
}
Не забудьте поменять movies на название своего пользовательского типа постов.
Наша специальность — разработка и поддержка сайтов на WordPress. Контакты для бесплатной консультации — [email protected], +371 29394520

Ответить
Хотите присоединиться к обсуждению?Не стесняйтесь вносить свой вклад!