Как правильно использовать meta_key и meta_value вместе в WordPress
Я пытаюсь отфильтровать цикл, чтобы найти записи с определенным meta_key
и соответствующим meta_value
. Я изучил Codex и пробовал следующие варианты без успеха:
// Не дает результатов
$args = array(
'post_type' => 'cqpp_interventions',
'posts_per_page' => '-1',
'meta_query' => array(
'relation' => 'OR',
array(
'meta_key' => 'priority',
/* Пробовал и так
'meta_value' => '80',
'compare' => '='
*/
'meta_value' => array('80'),
'compare' => 'IN' )
)
);
// Тоже не дает результатов
$args = array(
'post_type' => 'cqpp_interventions',
'posts_per_page' => '-1',
'meta_key' => 'priority',
'meta_value' => 80
);
// Этот вариант выводит все cqpp_interventions, и я подтвердил, что некоторые имеют meta_value равное 80
$args = array(
'post_type' => 'cqpp_interventions',
'posts_per_page' => '-1',
'meta_key' => 'priority'
);
$cqpp_posts = get_posts( $args );
Вот как я проверяю внутри цикла:
$priority = get_post_meta( get_the_ID(), 'priority');
echo '<pre>';
var_dump($priority);
echo '</pre>';
что дает результат:
search.php:16:
array (size=1)
0 =>
array (size=1)
0 => string '80' (length=2)
search.php:16:
array (size=1)
0 =>
array (size=2)
0 => string '80' (length=2)
1 => string '91' (length=2)
Что я могу сделать, чтобы исправить это?

Вы можете попробовать это:
$args = array(
'post_type' => 'cqpp_interventions',
'posts_per_page' => '-1',
'meta_query' => array(
array(
'key' => 'priority',
'value' => '80'
)
)
);
Основная проблема вашего запроса в том, что вы передаёте meta_key
и meta_value
. Однако, массивы в аргументе meta_query
должны содержать ключи key
и value
.
Это также сработает:
'key' => 'priority',
'value' => array('80')

Из описания вашего первого массива $args
$args = array(
'post_type' => 'cqpp_interventions',
'posts_per_page' => '-1',
'meta_query' => array(
'relation' => 'OR',
array(
'meta_key' => 'priority',
/* Пробовал также это
'meta_value' => '80',
'compare' => '='
*/
'meta_value' => array('80'),
'compare' => 'IN' )
)
);
Вы добавили 'relation' => 'OR'
, что не требуется. Параметр relation
нужен только если у вас несколько meta-value для запроса. Также compare не нужен, если вы ищете конкретное значение, так как по умолчанию используется =
.
Обновленный массив $args будет выглядеть так:
$args = array(
'post_type' => 'cqpp_interventions',
'posts_per_page' => '-1',
'meta_query' => array(
array(
'meta_key' => 'priority',
'meta_value' => '80', // так как 80 является строкой
)
)
);
// попробуйте любой из вариантов ниже
$myPost = new WP_Query( $args ); // получить записи и работать с ними как с объектами
$myPost = get_posts( $args ); // получить записи и сохранить их в массив
Надеюсь, это поможет вам.
Спасибо
