web-dev-qa-db-ja.com

meta_query 'compare' => 'IN'が機能しない

まず第一に、私はそれが重複していることを知っていますが、古い答えのどれも役に立ちませんでした。

私はpost_metaを通して投稿を検索しています。これが私のコードです。現在は何も返されていません。

$args   =   array(
    'numberposts'   => -1,
    'post_type'     => 'post',
    'meta_query'    => array(
        array(
            'key'       => 'system_power_supply',
            'value'     => array('single', 'redundant'),
            'compare'   => 'IN',
        )
    )

);

$query = new WP_Query($args);
echo $query->found_posts;

meta_queryを削除すればうまくいきます。私はこれらのことを確信しています:

  • keyまたはvalueにスペルミスはありません。
  • 投稿タイプはpostです
  • 'system_power_supply'に 'single'の値を持つ投稿です。ただし、投稿フィールドは Advanced Custom Fields によって生成されます。
8
Rizwan

メタクエリで直列化された値を検索する簡単な方法はありません。値の一覧が長くない場合は、潜在的に複数のメタクエリを設定することができます。

'meta_query'    => array(
    'relation' => 'OR',
    array(
        'key'       => 'system_power_supply',
        'value'     => 'single',
        'compare'   => 'LIKE',
    ),
    array(
        'key'       => 'system_power_supply',
        'value'     => 'redundant',
        'compare'   => 'LIKE',
    )
)

もしあなたが素晴らしい空想を得たいのなら、あなたはそれを動的に設定することができます:

$values_to_search = array('single', 'redundant');
$meta_query = array('relation' => 'OR');
foreach ($values_to_search as $value) {
    $meta_query[] = array(
        'key'       => 'system_power_supply',
        'value'     => $value,
        'compare'   => 'LIKE',
    );
}
8
guiniveretoo

私はそれが長い時間であったことを知っています、しかし念のために誰かが同じ問題を抱えています。さて、問題が見つかるまで何時間も髪の毛を引っ張ってきました: 'IN'比較演算子を使った 'meta_query'は通常の配列を受け入れないようです。代わりに、最初に「、」で結合する必要があります。

だから、あなたの場合は、このようなものが動作するはずです:

$args   =   array(
'posts_per_page'   => -1,
'post_type'     => 'post',
'meta_query'    => array(
    array(
        'key'       => 'system_power_supply',
        'value'     => join(', ', array('single', 'redundant')),
        'compare'   => 'IN',
    )
)
);
$query = new WP_Query($args);
echo $query->found_posts;
2
Badr