我有一个过滤器,它根据用户角色(外部处理)过滤来自主循环的帖子
添加帖子/页面时输入元数据。
这是一个过滤器-它用于过滤来自主页循环和搜索页面的帖子,但是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;
}
SO网友:s_ha_dum
这是一个过滤器-它用于过滤来自主页循环和搜索页面的帖子,但粘性帖子会被忽略,并且无论用户角色如何都会显示出来。这些是否未包含在main\\u查询中?
你的问题令人困惑,但我认为这意味着“粘性帖子”会出现在你不想看到的地方。
默认情况下,显示粘性帖子。WordPress会(几乎?)除非另有明确说明,否则请始终将粘帖调整到顶部。对我来说,这种逻辑是倒退的。只有几个地方的贴子是有意义的,但WordPress会将贴子移到几乎所有内容的顶部。我的看法是\'ignore_sticky_posts\' => false
应为默认值。“例外情况”不应是“除一个(或两个)外的所有情况”。
如果这是您面临的问题,您必须添加$query->set( \'ignore_sticky_posts\', true );
到您的过滤器。你会发现自己写了很多。我加上它,或它的等价物--\'ignore_sticky_posts\' => true
--, 几乎所有我写的查询。