Главная Новости

Модификации стандартных циклов в WordPress перед вызовом

Опубликовано: 25.05.2018

Наверное по заголовку не совсем понятно, о чем речь. Итак, предположим, что есть страница для рубрик, archive.php (ну или category.php, это не важно).

Мы создали новый тип постов, например events, (ивенты) но в рубриках они ничерта не появились. Ну то есть в админке при создании ивента мы приписали ему какую-либо из рубрик, но толку нет.

Первое решение, которое напрашивается, это изменить в начале файла цикл при помощи query_posts . Окей, сделали.

$params = array ( 'post_type' => array ( 'post' , 'events' ) , 'posts_per_page' => 7 // должен быть равен параметру в настройках чтения ) ; query_posts ( $params ) ;

В итоге перестала работать постраничная навигация.

Дело в том, что в основном цикле есть ещё некоторые параметры, которые необходимо учитывать. И сделать это можно двумя способами:

Способ 1.

Этот код вставляется непосредственно на страницах category.php, tag.php, archive.php, search.php и так далее.

global $wp_query ; $params = array ( 'post_type' => array ( 'post' , 'events' ) // posts_per_page нахрен не нужен, пусть берется из основного цикла ) ; $params = array_merge ( $wp_query -> query , $params ) ; query_posts ( $params ) ;

Способ 2.

Сделаем всё то же самое, но при помощи фильтра. Код засунуть в functions.php, находящийся в папке с текущей темой.

function tr_pre_redefining_query ( $query ) { if ( $query -> is_category ) { // вот оно, определение нужной страницы $query -> set ( 'post_type' , array ( 'post' , 'events' ) ) ; } return $query ; } add_filter ( 'pre_get_posts' , 'tr_pre_redefining_query' ) ;

Смотрите также

Добро пожаловать , Гость !

Мы настоятельно рекомендуем Вам зарегистрироваться, если вы ещё этого не сделали. регистрация откроет Вам новые функции.

Войти или Зарегистрироваться

www.silvio-berluskoni.ru © Все права защищены © 2016.
rss