排除wordpress循环中的某个文章

排除wordpress循环中的某个或某几个文章,主要根据

post__not_in

这个参数在主循环里排除不想加入的文章ID:例如不想要ID为178的文章:

<?php
$args=array(
  'post__not_in'=> array(170),
  'post_type' => 'post',
  'post_status' => 'publish',
  'posts_per_page' => -1,
  'caller_get_posts'=> 1
);
$my_query = null;
$my_query = new WP_Query($args);
if( $my_query->have_posts() ) {
  echo 'List of Posts';
  while ($my_query->have_posts()) : $my_query->the_post(); ?>
    <p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p>
    <?php
  endwhile;
}
wp_reset_query();  // Restore global post data stomped by the_post().
?>

注意点1:参数是post__not_in,这个post后面跟的是两个下划线。。。我这里没注意,想了好久都没办法。。。提醒大家注意。

注意点2:如果要排除置顶的文章,

'caller_get_posts'=> 1

这个参数不能少。

注意点3:也是最重要的,那个post__not_in必须对应一个数组,哪怕你就是排除一篇文章,也得写出array。也可以传递变量,比如'post__not_in' => $id,这个$id是个数组,我就是用这个变量记录排除的文章的。

顺便给大家一个测试query的方法,就在主循环the_post()后面加上:

<?php echo "<p>REQUEST:$wp_query->request</p>";?>

可以输出wordpress当前的query内容:

例如输出的结果

REQUEST: SELECT SQL_CALC_FOUND_ROWS wp_16_posts.* FROM wp_16_posts WHERE 1=1 AND wp_16_posts.ID NOT IN (261,209) AND wp_16_posts.ID NOT IN ( SELECT tr.object_id FROM wp_16_term_relationships AS tr INNER JOIN wp_16_term_taxonomy AS tt ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy = 'category' AND tt.term_id IN ('4', '0', '0') ) AND wp_16_posts.post_type = 'post' AND (wp_16_posts.post_status = 'publish') ORDER BY wp_16_posts.post_date DESC LIMIT 0, 8 

这样的结果很方便复杂查询的排错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值