Как выводить кастомные типы записей в стандартных рубриках или тегах

15.09.2021

По умолчанию WordPress не включает кастомные типы записей в архивы категорий и тегов. Из-за этого вам нужно самостоятельно добавить кастомные посты в цикл.

Вы добавите следующие фрагменты в файл functions.php вашей темы или, если хотите, в сборку настраиваемого плагина только для вашего собственного веб-сайта.

function my_cptui_add_post_types_to_archives($query) {
    // We do not want unintended consequences.
    if (is_admin() || !$query->is_main_query()) {
        return;
    }

    if (is_category() || is_tag() && empty($query->query_vars['suppress_filters'])) {
        $cptui_post_types = cptui_get_post_type_slugs();

        $query->set(
            'post_type',
            array_merge(
                array('post'),
                $cptui_post_types
            )
        );
    }
}
add_filter('pre_get_posts', 'my_cptui_add_post_types_to_archives');

В этом коде мы проверяем, если мы находимся в архиве категорий или архиве тегов, тогда получаем массив всех слагов постов на основе CPTUI и объединяем его в массив с типом поста post. Создав этот массив, мы передаем его в параметры запроса, чтобы WordPress знал, что нужно запрашивать все эти типы записей.

Добавление в архив только некоторых типов записей CPTUI.

function my_cptui_add_post_types_to_archives($query) {
    // We do not want unintended consequences.
    if (is_admin() || !$query->is_main_query()) {
        return;
    }

    if (is_category() || is_tag() && empty($query->query_vars['suppress_filters'])) {

        // Replace these slugs with the post types you want to include.
        $cptui_post_types = array('my_post_type', 'my_other_post_type');

        $query->set(
            'post_type',
            array_merge(
                array('post'),
                $cptui_post_types
            )
        );
    }
}
add_filter('pre_get_posts', 'my_cptui_add_post_types_to_archives');

Этот фрагмент будет очень похож на первый, за исключением того, что мы включаем только определенные типы постов из CPTUI.

Обязательно измените my_post_type и my_other_post_type, чтобы они действительно соответствовали слагам вашего пользовательского типа постов, которые вы хотите включить.

Если у вас только один архив категорий или архив тегов, то измените второй оператор if следующим образом:

if ( is_category() && empty( $query->query_vars['suppress_filters'] ) )

или

if ( is_tag() && empty( $query->query_vars['suppress_filters'] ) )

Взято здесь.

Полезная инфа:

Оставить комментарий