根据元值将帖子从主循环中排除

时间:2017-10-30 作者:Dave

我需要修改主循环(index.php),以排除具有特定元值集的帖子(通过ACF真/假字段)。

function exclude_featured_post( $query ) {
    if ( $query->is_home() && $query->is_main_query()) {
        // in case for some reason there\'s already a meta query set from other plugin
        $meta_query = $query->get(\'meta_query\')? : [];

        // append yours
        $meta_query[] = [
            \'key\' => \'featured_post\',
            \'value\' => \'1\',
            \'compare\' => \'!=\'
        ];

        $query->set(\'meta_query\', $meta_query);
    }
}
add_action( \'pre_get_posts\', \'exclude_featured_post\' );
这不会返回帖子。我想我需要将其与主查询合并,例如:

global $wp_query;
$merged_args = array_merge( $wp_query->query, $exclude_featured_args );
$query->set(\'meta_query\', $merged_args);
然而,这也不会返回任何帖子。

Update:

使用“比较”=>“不存在”,而不是“比较”=>“!=”似乎返回所有帖子并排除meta\\u查询。

function exclude_featured_post( $query ) {
    if ( $query->is_home() && $query->is_main_query()) {
        // in case for some reason there\'s already a meta query set from other plugin
        $meta_query = $query->get(\'meta_query\')? : [];

        // append yours
        $meta_query[] = [
            \'key\' => \'featured_post\',
            \'value\' => \'1\',
            \'compare\' => \'NOT EXISTS\'
        ];

        $query->set(\'meta_query\', $meta_query);

    }
}
add_action( \'pre_get_posts\', \'exclude_featured_post\' );
从这里开始:https://core.trac.wordpress.org/ticket/18158

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

Dave,你的代码看起来不错,除了其中的一些东西,所以请尝试一下:

function exclude_featured_post( $query ) {
    if ( is_front_page() && $query->is_main_query() ) {


        $meta_query = $query->get(\'meta_query\') ? $query->get(\'meta_query\') : array();

        // append yours
        $meta_query[] = array(
            \'key\' => \'featured_post\', // please make sure that key is correct
            \'value\' => \'1\',
            \'compare\' => \'!=\' // you can also try \'NOT EXISTS\' comparison
        );

        $query->set(\'meta_query\', $meta_query);

    }
}
add_action( \'pre_get_posts\', \'exclude_featured_post\' );
如果上述代码不适用于您,请执行以下步骤:

确保它正在运行主页主查询-只需尝试回显其中的内容即可-此步骤可帮助您了解第2行的条件是否正确。

尝试使用更简单的参数,如orderby 等等。检查它是否工作。

在没有其他帖子的帖子中测试此代码meta_query 参数

尝试使用meta_key, meta_valuemeta_compare params而不是meta\\u query,示例如下https://rudrastyh.com/wordpress/meta_query.html

确保feature_post 是正确的,令人难以置信,但在我的学生中,这是最常见的错误。

结束

相关推荐

Show the excerpt in a loop

我想用这个循环显示最后3篇文章。这很有效,但我不知道为什么,但摘录总是一样的。我做错了什么? <?php $args = array( \'numberposts\' => \'3\' ); $recent_posts = wp_get_recent_posts( $args ); foreach( $recent_posts as $recent ){ ?> <div class=\"