如何将“特色”帖子排除在主循环之外?

时间:2011-10-29 作者:pixeline

在类别中。php模板,我构建了一个函数,在主循环之前列出“特色”帖子。使用自定义字段和get\\u posts()选择特色帖子:

function list_featured_articles(){
 $featured_posts = get_posts(\'meta_key=featured_article&meta_value=on&numberposts=10&order=DESC&orderby=post_date\');
}
我的类别。php模板:

echo list_featured_articles();
get_template_part( \'loop\', \'category\' );
它工作得很好,只是特色文章也列在文章的类别列表中。我想,从我的功能中,获取特色帖子的ID,并将其从主循环中删除。有没有合适的方法?我想我可以使用一个全局变量来存储排除ID的数组,但我希望避免使用全局变量。

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

这将是对query_posts(), 使用post custom meta query.

因为您正在查询meta_key=featured_article&meta_value=on, 然后在相同的参数上排除。

<?php
// Setup the custom meta-query args
$exclude_featured_args = array(
    \'meta_query\' => array(
        array(
            \'key\' => \'featured_article\',
            \'value\' => \'on\',
            \'compare\' => \'!=\'
        )
    )
 );
// globalize $wp_query
global $wp_query;
// Merge custom query with $wp_query
$merged_args = array_merge( $wp_query->query, $exclude_featured_args );
// Query posts using the modified arguments
query_posts( $merged_args );
?>
这应该将特色帖子从主循环中排除。

注意:您只想在显示特色帖子循环的相同上下文中执行此操作。

EDIT

根据您的评论:

我的功能设置为,如果没有“特色”帖子,它会自动将最近的帖子显示为“特色”

同样,你可以用任何方法include 在特色循环中发布,然后使用相同的参数exclude 来自主循环的相同帖子。

在不知道您的方法是什么的情况下,我无法给出如何将其合并到excluded posts参数数组中的精确答案。

结束

相关推荐