web-dev-qa-db-ja.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

あなたはこれを試すことができます:

$args = array(
    'post_type' => 'cqpp_interventions',
    'posts_per_page' => '-1',
    'meta_query' => array(
        array(
            'key' => 'priority',
            'value' => '80'
        )
    )
);

あなたのクエリの本当の問題はあなたがmeta_keymeta_valueを渡しているからです。しかし、meta_query引数の配列は、代わりにキーkeyvalueを持つべきです。

これも動作します:

'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を追加する必要があります。デフォルトでは=が使用されているので、特定の値が必要な場合もcompareは必要ありません。

更新された$ 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