Intereting Posts
Примените фильтр str_replace к определенному массиву символов в файле__состоянии () с и без под таксономии в url, направляя на одну страницу и вызывая дублирование Измените пользовательские полевые данные перед созданием нового сообщения Страница меню администратора WordPress wordpress / woocommerce login url не перенаправляет правильно Закрытие вложений данных для последующего обновления почты? 301 не работает с мультисайтом Показать форму HTML перед удалением плагина WordPress Как заказать мой запрос цикла? Как сортировать сообщения с несколькими страницами Как переносить сообщения в два столбца с разными размерами изображений с помощью переменной $ counter? Пользовательские страницы редактирования страницы редактирования ссылок для редактирования страницы, а не сообщения Видео с помощью короткого кода видео всегда шириной 640 пикселей? Можно ли изменить содержимое «the_content ()»? Настройте, как выглядит тема WordPress в разделе «Выбор темы»

«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 () в конце цикла.

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