给定一个包含多个类别(如“运动”、“自然”等)的博客,然后我开始创建一个自定义分类法,它允许我在博客的某些区域显示文章,并使用诸如“幻灯片放映”、“侧边栏突出显示”、“顶级类别”等术语。
在我的侧边栏中,我创建了一个区域,使用两个不同的循环显示文章(来自同一类别,比如“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\'
)
),
)
);
然而,尽管这样做有效,这意味着“侧边栏突出显示”中的文章永远不会显示在第二个循环中,无论它们是何时发布的。所以我想知道是否有什么方法可以避免重复,同时允许来自“侧边栏突出显示”术语显示的文章。
提前谢谢。
最合适的回答,由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 )
)
);