通过META_QUERY过滤所有帖子和粘帖

时间:2013-06-27 作者:rob_was_taken

我有一个过滤器,它根据用户角色(外部处理)过滤来自主循环的帖子

添加帖子/页面时输入元数据。

这是一个过滤器-它用于过滤来自主页循环和搜索页面的帖子,但是sticky posts 忽略,无论用户角色如何,都将显示。这些是否未包含在main\\u查询中?

add_filter( \'pre_get_posts\', \'hide_private_posts\' );

function hide_private_posts( $query ) {

$loggedInArray  = array(
                  \'key\' => \'smartPrivate\',
                  \'value\' => \'smartPrivate_loggedIn\',
                  \'compare\' => \'!=\'
            );
$mentorArray    = array(
                  \'key\' => \'smartPrivate\',
                  \'value\' => \'smartPrivate_loggedInMentors\',
                  \'compare\' => \'!=\'
            );

// If user isn\'t logged in, hide all private posts / pages
if( !is_user_logged_in() ) {

    if ( $query->is_main_query() || $query->is_feed() ) {

        $query->set( \'meta_query\', array(

            $loggedInArray,
            $mentorArray

        ));
    }

// If user is logged in but a learner, show logged in posts / pages
} else if( is_user_sso_role( array(\'learner\') ) ) {

    if ( $query->is_main_query() || $query->is_feed() ) {

        $query->set( \'meta_query\', array(

            $mentorArray

        ));
    }

}

return $query;
}

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

你可以试试

$query->set( \'ignore_sticky_posts\', 1 );
阻止粘帖被预先设置。

SO网友:s_ha_dum

这是一个过滤器-它用于过滤来自主页循环和搜索页面的帖子,但粘性帖子会被忽略,并且无论用户角色如何都会显示出来。这些是否未包含在main\\u查询中?

你的问题令人困惑,但我认为这意味着“粘性帖子”会出现在你不想看到的地方。

默认情况下,显示粘性帖子。WordPress会(几乎?)除非另有明确说明,否则请始终将粘帖调整到顶部。对我来说,这种逻辑是倒退的。只有几个地方的贴子是有意义的,但WordPress会将贴子移到几乎所有内容的顶部。我的看法是\'ignore_sticky_posts\' => false 应为默认值。“例外情况”不应是“除一个(或两个)外的所有情况”。

如果这是您面临的问题,您必须添加$query->set( \'ignore_sticky_posts\', true ); 到您的过滤器。你会发现自己写了很多。我加上它,或它的等价物--\'ignore_sticky_posts\' => true--, 几乎所有我写的查询。

SO网友:rob_was_taken

好啊

上面的修复方法可以让meta\\u查询过滤在这些帖子上工作,但不会让它们变得“粘滞”。

是否有人知道我可以使用meta\\u查询过滤它们,但仍然保持粘滞在顶部的方法?

提前感谢

抢劫

结束

相关推荐