Intereting Posts
Однажды щелкнув навигацию «Dehighlighting» Переадресация htaccess и WordPress Ограничьте количество терминов, которые пользовательская таксономия может сохранить на пользовательский тип сообщения Как получить идентификатор страницы автора? Если post-format == 'gallery' условный Как получить сингулярное имя пользовательской таксономии? Доступ к внешней базе данных: ERR_INCOMPLETE_CHUNKED_ENCODING Создание всплывающего окна (или лайтбоксов) для отображения сообщения благодарности Может ли разработчик принять плагин с надписью «не обновляется более чем за 2 года»? Лучший способ обновить многочисленную таблицу базы данных многопользовательского плагина С Visual Composer, как Strech только 1 столбец? Как отключить одно представление для настраиваемого типа сообщений? К сожалению удалили себя в качестве плагина Изменить название страницы пользовательского архива таксономии Сохранение и отображение содержимого на передней панели с помощью wp_editor

Pre Get Posts – Разница между условными () и $ query-> условными ()?

Это может быть плохой вопрос, но внутри pre_get_posts() есть ли какая-либо реальная разница между $query->conditional() и просто добавлением conditional() ? Возьмем следующий пример:

 /** Themes Pre Get Posts **/ function theme_pgp( $query ) { if( $query->is_home() ) { // Run Conditional 1 } if( is_home() ) { // Run Conditional 2 } } add_action( 'pre_get_posts', 'theme_pgp' ); 

Для удобства чтения я предпочитаю использовать второе условие, но я часто вижу, что код использует первый, поэтому мой вопрос: внутри функции pre_get_posts / action / filter – есть ли когда-либо случай, когда это может возвращать разные результаты, что означает 1 условный пробег, но не Другие?

Там большая разница … большую часть времени.

is_home() , как и любой другой условный тег, проверьте основной запрос .

$query->condition() проверяет объект запроса, который передается действием, который может быть совершенно другим запросом, потому что pre_get_posts вызывается для всех запросов.

В качестве примера предположим, что вы просматриваете уникальную запись , а внутри single.php вас есть:

 $q = new WP_Query( array('nopaging'=>true) ); 

Предположим теперь, что в functions.php вас есть:

 add_action('pre_get_posts', function ($query) { if( $query->is_home() ) { // conditional code } } ); 

Зацепленный обратный вызов будет выполняться, когда действие инициируется как основным запросом, так и вторичным запросом.

Однако для основного запроса условный код не запускается, потому что вы находитесь в сингулярном представлении, но при запуске вторичного запроса условный код будет запущен, потому что этот вторичный объект запроса имеет домашний тип.

Поэтому не стоит использовать $query->is_home() и is_home() , они просто разные, вы должны выбрать тот или другой на основе результатов, которые хотите получить.

Однако, когда объект запроса, переданный действием, является основным запросом, два способа идентичны, поэтому, если вы хотите проверить только объекты основного запроса, используйте тот или иной вариант:

 function theme_pgp( $query ) { if ( ! $query->is_main_query() ) { return; // only main query } // here using is_home() or $query->is_home() // does not make any difference }