Wordpress:从查询中排除前4个帖子

时间:2016-06-05 01:45:01

标签: php wordpress

我有一个包含下一个查询的模板:

<?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知识有限,它可以是来自这个查询的东西?或者可能是模板中的更多内容? 感谢

3 个答案:

答案 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);
    }
  }
}