我有一个包含下一个查询的模板:
<?php
if ( get_query_var('paged') ) {
$paged = get_query_var('paged');
} else if ( get_query_var('page') ) {
$paged = get_query_var('page');
} else {
$paged = 1;
}
query_posts( array( 'post_type' => 'post', 'paged' => $paged ) );
?>
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<?php get_template_part('/post-types/home-normal'); ?>
<?php endwhile; ?>
当然,如果我想在这种情况下排除前4个帖子使用'offset' => 1
购买,如果我转到帖子列表的第2页,这是行不通的,实际上,显示相同的帖子来自第1页,并且在第3页中相同,每次都是相同的帖子
我的PHP知识有限,它可以是来自这个查询的东西?或者可能是模板中的更多内容? 感谢
答案 0 :(得分:0)
像这样使用
<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$new_query =new WP_Query( array( 'paged' => $paged, 'offset' => 4 ) );
?>
<?php if ( $new_query->have_posts()) : ?>
<?php while ( $new_query->have_posts()) : $new_query->the_post(); ?>
<?php get_template_part('/post-types/home-normal'); ?>
<?php endwhile; ?>
<?php wp_reset_query(); ?>
答案 1 :(得分:0)
offset
会覆盖分页,因为当您进入查询级别时,它会通过offset
进行分页。
你仍然可以使用offset
,你只需要做一些数学运算就可以将你想要的offset
乘以当前的页码(注意这个计算是有效的,因为每页的帖子和{{1}如果两者不同,则可能必须在计算中使用offset
值:
posts_per_page
编辑 - 过滤function my_function_for_excluding_posts( $query ) {
if ($query->is_home() && $query->is_main_query()) {
$offset = 4;
$paged = 0 == $query->get( 'paged' ) ? 1 : $query->get( 'paged' );
$query->set( 'offset', $paged * $offset );
}
}
add_action( 'pre_get_posts', 'my_function_for_excluding_posts' );
所以页数是正确的。
found_posts
有关详细信息,请参阅此link
答案 2 :(得分:0)
以防其他人发现这个老问题。 忘记搞乱“偏移”并破坏其他所有内容,改用“post__not_in”。
add_action( 'pre_get_posts', 'mytheme_modify_posts_list' );
function mytheme_modify_posts_list( $query ) {
//make sure not messing with your admin search
if( !is_admin() ){
//in main post list
if( $query->is_main_query() && $query->is_home() ) {
//get your IDs
$skip = new WP_Query(array( 'posts_per_page'=>4, 'post_type'=>'post', 'post_status'=>'publish' ));
if($skip){
$skip_ids = wp_list_pluck($skip->posts, 'ID');
//apply to query
$query->set('post__not_in', $skip_ids);
}
}
}