Intereting Posts
Файл доступен, но дает 404 в wordpress получить случайную строку из пользовательской таблицы Добавить WordPress в сайт Meteor js Встраивайте / подключайте внешние веб-страницы в свой блог WordPress (например, Facebook захватывает изображение, название и описание) Стиль очереди только на некоторых страницах, не работающих Как изменить всю таблицу направляющих в таблице сообщений? Общие настройки: отображение поля пользовательского плагина после поля Адрес сайта Безопасно ли использовать sslverify => true для wp_remote_get / wp_remote_post Как изменить заголовок заголовка и атрибуты alt для публикации заголовка? Только прикрепленные файлы Таблицы WPML не удаляются при удалении многосайтового дочернего сайта, нужна помощь в очистке моего sql-файла! Связывание PDF как загружаемого документа Magic Fields дает ошибку Файл ___ не существует? Как я могу получить весь авторский контент? Галерея фотографий эскизов

«Pre_get_posts» срабатывает при каждом запросе

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

add_filter('pre_get_posts', 'custom_post_count'); function custom_post_count($query){ $query->set('posts_per_page', 5); return $query; }; 

Поскольку это действие вызывается внутри метода get_posts WP_Query, этот код будет изменять аргумент posts_per_page для всех циклов, а не только для основного, поэтому передача этого аргумента в WP_Query бесполезна …

Solutions Collecting From Web of "«Pre_get_posts» срабатывает при каждом запросе"

В основном вы ищете global $wp_the_query переменную global $wp_the_query которая задана значением основного запроса. Это может быть не идеально подходит для 100% случаев, но, вероятно, будет работать нормально в 99% случаев:

 add_action( 'pre_get_posts', 'custom_post_count' ); function custom_post_count( $query ){ global $wp_the_query; if ( $wp_the_query === $query ) { $query->set( 'posts_per_page', 5 ); } return $query; }; 

Во-первых, «pre_get_posts» – это действие, а не фильтр. Это основная проблема. Во-вторых, вам нужно установить условные условия для контекста.

 add_action('wp', 'custom_post_count'); function custom_post_count($query){ if($query->is_home || $query->is_front_page){ $query->set('posts_per_page', 5); } return $query; }; 

Предыдущий пример: если вы хотите использовать его один раз в своих функциях.php, не касаясь файлов шаблонов. Что касается каждого запроса, если вы не создаете новый запрос, каждый цикл наследует запрос pre_get_posts $. Вот почему я использую query_posts () для создания нового запроса в следующем примере.

Пользовательские циклы

Вот как я делаю пользовательские циклы:

 $args = array( 'posts_per_page' => 5 ); query_posts($args); if(have_posts()): while(have_posts()): the_post(); endwhile; else: endif; wp_reset_query(); 

Просто разместите query_posts () над циклом и wp_reset_query () в конце цикла.

Надеюсь, что это помогает вам. 🙂