it-roy-ru.com

meta_key и meta_value не работают вместе

Я пытаюсь отфильтровать цикл, чтобы найти сообщения, которые имеют meta_key с определенным meta_value. Я посмотрел на Кодекс и попробовал следующее без удачи:

// No results
$args = array(
    'post_type' => 'cqpp_interventions',
    'posts_per_page' => '-1',
    'meta_query' => array(
            'relation' => 'OR',
            array(
                'meta_key' => 'priority',
                /* Tried this too
                'meta_value' => '80',
                'compare' => '='
                */
                'meta_value' => array('80'),
                'compare' => 'IN' )
    )
);

// No results
$args = array(
    'post_type' => 'cqpp_interventions',
    'posts_per_page' => '-1',
    'meta_key' => 'priority',
    'meta_value' => 80
);

// This list me all cqpp_interventions and I can confirm that I have some with meta_value set to 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)

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

1
Jonathan Lafleur

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

$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')
2
Chin Leung

Из ссылки ваших первых $ args

$args = array(
    'post_type' => 'cqpp_interventions',
    'posts_per_page' => '-1',
    'meta_query' => array(
            'relation' => 'OR',
            array(
                'meta_key' => 'priority',
                /* Tried this too
                'meta_value' => '80',
                'compare' => '='
                */
                'meta_value' => array('80'),
                'compare' => 'IN' )
    )
);

Вы добавили 'relation' => 'OR', который не нужен. relation необходимо добавить, если у вас есть несколько мета-значений для запроса. Также сравнение не требуется, если вы хотите указать конкретное значение, так как по умолчанию используется =.

Обновленные $ args будут

$args = array(
    'post_type' => 'cqpp_interventions',
    'posts_per_page' => '-1',
    'meta_query' => array(
            array(
                'meta_key' => 'priority',
                'meta_value' => '80', // since 80 is string
             )
    )
);

// try either of below.
$myPost = new WP_Query( $args ); // fetch post and managed in objects
$myPost = get_posts( $args ); // fetch post and store in array

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

Спасибо

0
Aftab