避免WP_QUERY的带有分类的重复帖子

时间:2012-05-20 作者:Cerere

给定一个包含多个类别(如“运动”、“自然”等)的博客,然后我开始创建一个自定义分类法,它允许我在博客的某些区域显示文章,并使用诸如“幻灯片放映”、“侧边栏突出显示”、“顶级类别”等术语。

在我的侧边栏中,我创建了一个区域,使用两个不同的循环显示文章(来自同一类别,比如“Nature”)。第一篇文章只显示了一篇文章(第一篇按时间顺序排列,来自自然类别,也在“侧栏突出显示”分类法的术语内),带有特色图片、标题和摘录,而第二篇文章只显示了自然类别中最近的3篇文章。为了避免重复,我一直在使用以下代码:

$nature_loop_1 = new WP_Query( array (

    \'category_name\' => \'nature\', 
    \'tax_query\' => array (
        array (
            \'taxonomy\'  => \'highlight\',
            \'field\'     => \'slug\', 
            \'terms\'     => \'sidebar-highlight\',
            \'operator\'  => \'IN\' 
        ) 
    ),
    ) 
 );
$nature_loop_2 = new WP_Query( array ( 

    \'category_name\' => \'nature\', 
    \'tax_query\' => array (
        array (
            \'taxonomy\'  => \'highlight\',
            \'field\'     => \'slug\', 
            \'terms\'     => \'sidebar-highlight\',
            \'operator\'  => \'NOT IN\' 
        ) 
    ),
    ) 
 ); 

然而,尽管这样做有效,这意味着“侧边栏突出显示”中的文章永远不会显示在第二个循环中,无论它们是何时发布的。所以我想知道是否有什么方法可以避免重复,同时允许来自“侧边栏突出显示”术语显示的文章。

提前谢谢。

1 个回复
最合适的回答,由SO网友:Milo 整理而成

将第一个查询中的帖子ID作为post__not_in 参数将其从第二个查询中排除。

$nature_loop_1 = new WP_Query(
    array (
        \'category_name\' => \'nature\', 
        \'tax_query\' => array (
            array (
                \'taxonomy\'  => \'highlight\',
                \'field\'     => \'slug\', 
                \'terms\'     => \'sidebar-highlight\',
                \'operator\'  => \'IN\' 
            ) 
        ),
    ) 
);

$exclude = $nature_loop_1->post->ID;

$nature_loop_2 = new WP_Query(
    array ( 
        \'category_name\' => \'nature\', 
        \'post__not_in\' => array( $exclude )
    ) 
);

结束

相关推荐

Invalid Taxonomy

因此,我注册了一个自定义帖子类型以及该帖子类型的分类法。然后,我在该分类法中创建了两个项目,但当我单击其中任何一个时,发现它们是无效的分类法。下面是我用来创建自定义帖子类型+分类法的代码。我有一个插件。class GW_Guides_Post_Type { public function __construct() { $this->register_post_type(); $this->metaboxes();