Как правильно использовать meta_key и meta_value вместе в WordPress

26 июл. 2016 г., 23:32:53
Просмотры: 15.4K
Голосов: 2

Я пытаюсь отфильтровать цикл, чтобы найти записи с определенным 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)

Что я могу сделать, чтобы исправить это?

0
Все ответы на вопрос 2
0

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

$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')
18 июл. 2017 г. 21:16:14
1

Из описания вашего первого массива $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 ); // получить записи и сохранить их в массив

Надеюсь, это поможет вам.

Спасибо

26 июл. 2016 г. 23:41:57
Комментарии

В meta_query вы используете 'key' => и 'value' =>, а не 'meta_key' => и 'meta_value' =>, как в ответе Chin Leung

Jignesh Patel Jignesh Patel
4 дек. 2017 г. 05:59:32