@castetus

Не срабатывает $query->set()?

Не хочет работать фильтр :( Не модифицирует запрос, выводит все посты.
Фильтровать надо по мета-полям посты кастомного типа.
Сам запрос, который модифицируется:
$args = [
'post_type' => 'project'
];
$projects = new WP_Query($args);

Фильтр:
add_action('pre_get_posts', 'projects_filter');
function projects_filter($query){
	if (!is_archive() || is_admin()){
		return;
	}

	if ($query->is_main_query()){
		global $wpdb;
		$ids = [];
		if (isset($_GET['material'])){
			foreach ($_GET['material'] as $material){
				$sql = $wpdb->prepare("SELECT post_id FROM {$wpdb->prefix}postmeta WHERE meta_key = 'materials' AND meta_value = '%s'", $material);
				$ids = array_unique(array_merge($ids, $wpdb->get_col($sql)));
			}
			$query->set('post__in', $ids);
		}
	}
}

Если убрать проверку на is_main_query() - срабатывает (но, естественно, на всех запросах, на каких только может)
echo $query->is_main_query() === 1
Сломал мозг уже весь, помогите плз!
  • Вопрос задан
  • 154 просмотра
Решения вопроса 1
wppanda5
@wppanda5 Куратор тега WordPress
WordPress Mедведь
А зачем вы делаете вот так
$args = [
'post_type' => 'project'
];
$projects = new WP_Query($args);


На странице архива типа записи достаточно стандартного цикла
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы