Моя ситуация несколько сложная, я постараюсь объяснить ее как можно более лаконично.
В настоящее время я использую query_posts
для изменения основного запроса на пользовательских страницах на моем сайте, который, насколько я могу сказать, работает достаточно хорошо, хотя я читал, что использование query_posts - это плохая практика для ряда различных причины.
Итак, почему я использую query_posts
и не создаю объект WP_Query
, который вы можете задать?
Это потому, что я использую плагин с бесконечным прокруткой, бесконечная прокрутка не очень хорошо работает с WP_query, но она отлично работает, когда вы просто изменяете основной запрос с помощью query_posts. Например, разбиение на страницы не работает, используя бесконечную прокрутку + WP_query (главное беспокойство).
На одной странице я изменяю запрос, чтобы получить наиболее просматриваемые сообщения.
<?php $paged = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1; ?>
<?php query_posts( array( 'meta_key' => 'wpb_post_views_count', 'orderby' => 'meta_value_num', 'order' => 'DESC' , 'paged' => $paged, ) ); ?>
<?php if (have_posts()) : ?>
<?php while ( have_posts() ) : the_post() ?>
<?php if ( has_post_format( 'video' )) {
get_template_part( 'video-post' );
}elseif ( has_post_format( 'image' )) {
get_template_part( 'image-post' );
} else {
get_template_part( 'standard-post' );
}
?>
<?php endwhile;?>
<?php endif; ?>
Итак, после большого чтения я понимаю, что моя другая опция для изменения основного запроса использует pre_get_posts
, хотя я несколько не уверен, как это сделать.
Возьмите это, например: -
function textdomain_exclude_category( $query ) {
if ( $query->is_home() && $query->is_main_query() ) {
$query->set( 'cat', '-1,-2' );
}
}
add_action( 'pre_get_posts', 'textdomain_exclude_category' );
Хорошо, достаточно просто - если это главная страница, измените основной запрос и исключите две категории.
Я смущен и не могу понять: -
-
сценарий использования для настраиваемых шаблонов страниц. С моей модификацией
query_posts
я могу просто отбросить массив доif (have_posts())
, выбрать мой шаблон страницы, опубликовать его и прочь. Сpre_get_posts
я не могу понять, как сказать, например,$query->most-viewed
и т.д. -
array( 'meta_key' => 'wpb_post_views_count', 'orderby' => 'meta_value_num', 'order' => 'DESC' , 'paged' => $paged, ) );
Как я делаю это с pre_get_posts
и убедитесь, что он разбит на страницы, т.е. работает с бесконечным свитком? Во всех примерах, которые я видел с помощью pre_get_posts
, нет массивов.