我正在尝试修改存档页面的存档查询,此功能连接到pre_get_posts
行动挂钩。
// Load our function when hook is set
add_action( \'pre_get_posts\', \'rc_modify_query_limit_posts\' );
function rc_modify_query_limit_posts( $query ) {
// Check if on frontend and main query is modified
if( ! is_admin() && $query->is_main_query() && $query->is_archive() ) {
$query->set(\'posts_per_page\', \'9\');
}
这工作很好,但不知怎么搞砸了我显示当前帖子的功能”
function archive_post_count() {
global $wp_query;
$showing = \'\';
if ( $wp_query->found_posts > 1 ) {
$page_number = is_paged() ? $wp_query->query_vars[\'paged\'] : 1;
$current_max = ( get_option( \'posts_per_page\' ) * ( $page_number - 1 ) ) + $wp_query->post_count;
$current_min = $current_max - $wp_query->post_count + 1;
$range = ( $current_min == $current_max ) ? strval( $current_min ) : $current_min . \'-\' . $current_max;
$total = $wp_query->found_posts;
$showing = \'Shown \' . $range . \' from \' . $total . \' posts \';
}
echo $showing;
}
目前我有11篇帖子,在第一页上一切正常。但当我点击第2页时,“从11篇帖子中显示11-12”信息就会显示出来。我的错在哪里?
最合适的回答,由SO网友:Pieter Goosen 整理而成
pre_get_posts
不会明确更改posts_per_page
, 该值与后端在读数设置下设置的值保持不变。pre_get_posts
仅在内置SQL查询之前更改此值WP_Query
就在主查询运行之前。
如果您需要在使用pre_get_posts
, 访问将保存由设置的新值的查询变量pre_get_posts
. (NOTE: query_posts
断开主查询对象,因此如果使用query_posts
在页面的某个地方,这也会失败,因为您将获得不正确的值。这是ONE BIG REASON 为什么你永远不应该使用query_posts
这里是an answer that explains this in detail.)
而不是使用
get_option( \'posts_per_page\' );
使用
$wp_query->query_vars[\'posts_per_page\'];