This kind of follows on from a previous question where JanW : http://bit.ly/VQy9hb
I’m trying to hide posts that contain certain meta data, in this case meta_name = “smartPrivate”.
The function below works but unfortunately also affects the menu loop (it just disappears).
Does anyone know how I can hide these posts from appearing in all loops but not affect the menu (and who knows what else…)
Thanks in advance
Rob
function hide_some_posts( $query ) {
if (!is_user_logged_in()) {
$query->set( 'meta_query', array(
array(
'key' => 'smartPrivate',
'value' => 'smartPrivate_loggedIn',
'compare' => '!='
),
array(
'key' => 'smartPrivate',
'value' => 'smartPrivate_loggedInMentors',
'compare' => '!='
)
));
}
return $query;
}
add_filter( 'pre_get_posts', 'hide_some_posts' );
So your problem is that it affects other queries than the main query, if I understand your situation correctly. This is pretty much why is_main_query exists. So try this: