it-swarm.com.de

meta_query 'compare' => 'IN' funktioniert nicht

Zunächst einmal weiß ich, dass es sich um ein Duplikat handelt, aber keine der älteren Antworten war hilfreich.

Ich suche in Beiträgen über post_meta. Hier ist mein Code, der derzeit nichts zurückgibt.

$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;

Wenn ich meta_query entferne, funktioniert es. Ich bin mir dieser Dinge sicher:

  • Es gibt keine Rechtschreibfehler in der key oder der value.
  • beitragstyp ist post
  • Es gibt ist einen Beitrag mit dem Wert 'single' in 'system_power_supply'. Post-Felder werden jedoch von Erweiterte benutzerdefinierte Felder generiert.
8
Rizwan

Es gibt keine einfache Möglichkeit, serialisierte Werte in einer Metaabfrage zu suchen. Wenn die Liste der Werte nicht sehr lang ist, können Sie möglicherweise mehrere Metaabfragen einrichten:

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

Oder wenn Sie super schick werden möchten, können Sie es dynamisch einrichten:

$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

Ich weiß, es ist lange her, aber nur für den Fall, dass jemand das gleiche Problem hat. Nun, ich habe stundenlang an meinen Haaren gezogen, bevor ich das Problem fand: 'meta_query' mit dem Vergleichsoperator 'IN' scheint das übliche Array nicht zu akzeptieren. Stattdessen müssen Sie ihn zuerst mit ',' verbinden.

In Ihrem Fall sollte also so etwas funktionieren:

$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