Фильтрация всех сообщений и липких сообщений через meta_query

У меня есть фильтр, который фильтрует сообщения из основного цикла в зависимости от роли пользователя (обрабатывается извне)

Метаданные вводятся при добавлении сообщения / страницы.

Это фильтр – он работает для фильтрации сообщений из главных страниц и страниц поиска, но липкие сообщения игнорируются и будут отображаться независимо от роли пользователя. Не включены ли они в основной_запись?

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; } 

Solutions Collecting From Web of "Фильтрация всех сообщений и липких сообщений через meta_query"

Вы можете попробовать

 $query->set( 'ignore_sticky_posts', 1 ); 

для предотвращения добавления липких сообщений.

Это фильтр – он работает для фильтрации сообщений из главных страниц и страниц поиска, но липкие сообщения игнорируются и будут отображаться независимо от роли пользователя. Не включены ли они в основной_запись?

Ваш вопрос запутан, но я считаю, что «липкие сообщения» появляются там, где вы их не хотите.

Показ липких сообщений по умолчанию. WordPress будет (почти?) Всегда жонглировать липкими сообщениями на вершину, если явно не указано иное. Для меня эта логика обратная. Есть только пара мест, где липкие сообщения имеют смысл, но WordPress переместит их на вершину почти для всего. Я 'ignore_sticky_posts' => false что значение 'ignore_sticky_posts' => false должно быть по умолчанию. «Исключение» не должно быть «каждый случай, кроме одного (или двух)».

Если это проблема, с которой вы сталкиваетесь, вам придется добавить $query->set( 'ignore_sticky_posts', true ); к вашему фильтру. Вы обнаружите, что пишете много . Я добавляю его или его эквивалент – 'ignore_sticky_posts' => true – практически для каждого запроса, который я пишу.

ОК…

Исправление выше работает для фильтрации meta_query для работы над этими сообщениями, но не позволяет им быть «липким».

Кто-нибудь знает, как я могу фильтровать их, используя meta_query, но все равно сохраняю липку наверху?

заранее спасибо

обкрадывать