防止查询重复

时间:2015-02-21 作者:Dragut

试图使用catID在主页上显示特色帖子,但正在复制。有没有办法防止它重复:

<?php
 query_posts("posts_per_page=1&cat=1");
if ( have_posts() ) while ( have_posts() ) : the_post(); ?>
<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
    <?php the_post_thumbnail(); ?>
<p><?php the_excerpt(); ?></p>
<p><a href="<?php the_permalink(); ?>">continue reading</a></p>
<?php endwhile; ?> <?php wp_reset_query(); ?>

2 个回复
SO网友:Greg Piwowarski

尝试使用wp_query 而不是query_posts

SO网友:Pieter Goosen

在我开始之前,你不应该利用query_posts 除非你的意图是破坏页面上的几乎所有内容:-)

Note: 此功能不适用于插件或主题。如后文所述,有更好、性能更好的选项来更改主查询。query\\u posts()是一种过于简单且有问题的方法,通过将页面的主查询替换为新的查询实例来修改它。它效率低下(重新运行SQL查询),并且在某些情况下会彻底失败(尤其是在处理POST分页时)。

要实现这一点,您应该使用WP_Query, 以及post__not_in 参数您必须首先获取页面上所有帖子ID的数组,然后使用该数组在查询中排除这些帖子

您可以在页面上尝试类似的内容

$post_ids = wp_pluck_list($wp_query->posts, \'ID\'); 
$args = array(
    \'posts_per_page\' => 1,
    \'cat\'            => 1,
    \'post__not_in\'   => $post_ids
);
$q = new WP_Query($args);

if ($q->have_posts()) {
    while($q->have_posts()) {
    $q->the_post();

       //Your loop

    }
    wp_reset_postdata();
}

结束

相关推荐