Intereting Posts
Создание расширяемого плагина WordPress favouriting – один сериализованный массив метазначений или множество метаданных Использование Image-Uploader Magic Fields с эскизами Можно использовать wordpress в качестве платформы публикации, но программно вставлять контент? WordPress с проблемами развертывания Git Поле подтверждения при отправке сообщения для проверки Измените имя параметра в Настройщике и сохраните данные wpdb-запрос не возвращает результаты, содержащие одинарные кавычки Как добавить пользовательскую кнопку в панель инструментов редактора сообщений? Захват WordPress перед вставкой сообщения в базу данных Как получить список таксономических слизней, заказанных родителями> детьми? якорный тег в заголовке не работает на других страницах, кроме главной страницы Проблема обновления Добавить WordPress Core CSS в editor-style.css 3 разных уведомления по почте Переопределить шаблон comments.php с плагином

$ query-> set в pre_get_posts непреднамеренно влияет на бэкэнд

Итак, у меня есть пользовательский тип сообщения, «свойства».

Я использую archive-properties.php , и вам нужно установить некоторые параметры в $query .

Я не хочу использовать new WP_Query так как я столкнулся с некоторыми проблемами, когда плагин для разбивки на страницы пытался разбивать $query на $query который уже существовал с тех пор, как мы были на странице архива, если это имеет смысл.

Итак, теперь моя проблема заключается в том, что если я устанавливаю posts_per_page на 2 например, и posts_per_page в бэкэнд, а только показываем 2 сообщения.

Поэтому мне нужно это, чтобы изменить запрос на интерфейсе, но не на бэкэнд. Я не знаю, что включить в оператор if.

 function set_query_parameters($query) { if( is_main_query() && is_post_type_archive( 'properties' ) && !$_SESSION ) { $query->set('posts_per_page', 12); $query->set('orderby', array( 'date' => 'DESC', )); } return $query; } add_action( 'pre_get_posts', 'set_query_parameters' ); 

Что касается вашего решения не использовать WP_Query, pre_get_posts на самом деле отличный выбор, а не создание нового экземпляра WP_Query. Фактически, pre_get_posts – это именно то, что вы должны использовать, когда хотите изменить основной запрос. Вместо того, чтобы выполнять отдельный запрос при каждой загрузке страницы, он изменяет параметры основного запроса до его выполнения. Гораздо эффективнее!

Ты почти там. Вам просто нужно добавить !is_admin() в оператор if . Вы также должны специально вызвать is_main_query() объекта $query переданного вашей функции .

С этими двумя изменениями ваш оператор if теперь будет читать:

 if( !is_admin() && $query->is_main_query() && is_post_type_archive( 'properties' ) && !$_SESSION ) { 

Также стоит отметить, что вам не нужно возвращать значение в действие WordPress – в отличие от фильтра . С pre_get_posts аргумент передается по ссылке, поэтому любые изменения, которые вы вносите в переменную $query , вступают в силу автоматически.