Вопрос или проблема
Я пытаюсь получить дочерние записи от двух родителей (эта часть работает хорошо),
… но теперь я хочу исключить записи, у которых meta_key равен ‘feature’ с meta_value равным ‘1’
Согласно справке Codex я пробовал несколько способов написать это, но не работает.
Вот что я написал до сих пор, я думаю, что я близок, но мне нужна помощь. Спасибо!
<?php
$argsthis = array(
'post_status' => 'publish',
'post_type' => 'page',
'order' => 'DESC',
'posts_per_page' => '5',
'post_parent__in' => array(10,11),
'meta_query' => array(
array(
'key' => 'feature',
'value' => '1',
'compare' => '!=',
),
)
);
?>
и я пробовал, просто (с точно таким же результатом, как выше):
<?php
$argsthis = array(
'post_status' => 'publish',
'post_type' => 'page',
'order' => 'DESC',
'posts_per_page' => '5',
'post_parent__in' => array(10,11),
'meta_key' => 'feature',
'meta_value' => '1',
'meta_compare' => '!=',
),
)
);
?>
Вот что работает в моем запросе:
<?php
$argsfeature = array(
'post_status' => 'publish',
'post_type' => 'page',
'order' => 'DESC',
'posts_per_page' => '1',
'meta_key' => 'featuring',
'meta_value' => '1'
);
?>
и этот запрос работает:
<?php
$argsarticles = array(
'post_status' => 'publish',
'post_type' => 'page',
'order' => 'DESC',
'posts_per_page' => '5',
'post_parent__in' => array(10,11)
);
?>
что не работает, так это “переписывание” второго запроса, указанного выше, где я могу получить дочерние страницы 10 и 11, НО НЕ страницы, которые уже были извлечены из запроса “featuring 1” – первого запроса, указанного выше.
Большое спасибо за помощь.
Ответ или решение
Чтобы решить вашу задачу с использованием WP_Query
и исключением постов по пользовательскому полю feature
с мета-значением 1
, вам следует учесть правильное объявление параметров, как в случае с meta_query
.
Давайте разберем ваш код и внесем необходимые изменения.
Основная проблема
Ваш текущий подход, использующий meta_query
, выглядит правильным, но вы не включали корректные параметры в запрос, чтобы исключить посты. Вот как это должно выглядеть:
<?php
$args = array(
'post_status' => 'publish',
'post_type' => 'page',
'order' => 'DESC',
'posts_per_page' => '5',
'post_parent__in' => array(10, 11),
'meta_query' => array(
array(
'key' => 'feature',
'value' => '1',
'compare' => 'NOT EXISTS'
),
array(
'relation' => 'OR',
array( // Условие, если 'feature' не существует
'key' => 'feature',
'compare' => 'NOT EXISTS',
),
array( // Условие, если 'feature' существует, но не равно '1'
'key' => 'feature',
'value' => '1',
'compare' => '!='
),
)
),
);
$query = new WP_Query($args);
?>
Объяснение кода
-
Параметры запроса:
- Мы устанавливаем
post_status
,post_type
,order
иposts_per_page
, как вы это делали изначально. - Параметр
post_parent__in
следует оставить, чтобы выбирать только дочерние посты от родительских с идентификаторами 10 и 11.
- Мы устанавливаем
-
meta_query:
- Здесь мы используем
meta_query
, чтобы задать критерии для мета-поляfeature
. Мы объединяем несколько условий с помощьюrelation
. - Первое условие проверяет, существует ли мета-ключ
feature
. Если он не существует, пост будет включен в результат. - Второе условие проверяет, что если мета-ключ
feature
существует, его значение не должно быть равно1
. Это позволит исключить посты, гдеfeature
равно1
.
- Здесь мы используем
Проверка результатов
Не забудьте проверить результаты вашего запроса. Используйте цикл WordPress для отображения подлежащих постов:
if ($query->have_posts()) :
while ($query->have_posts()) : $query->the_post();
// Ваш код для отображения поста
endwhile;
wp_reset_postdata();
else :
echo 'Посты не найдены.';
endif;
Заключение
Используя представленный выше код, вы должны успешно исключить посты с мета-полем feature
, значение которого равно 1
, при этом включая все остальные. Это обеспечит корректное выполнение вашего запроса и выдачу ожидаемых результатов. Если у вас возникнут дополнительные вопросы или потребуется дальнейшая помощь, не стесняйтесь обращаться!