Interogare postări unde valoarea meta este goală
Vreau să interoghez postările unde valoarea meta este goală. De exemplu, vreau să obțin aceste trei postări, fără valori meta:
Am încercat deja:
$args = array(
'post_type' => 'attachment',
'posts_per_page' => 10,
'paged' => $paged,
'meta_query' => array(
array(
'key' => '_wp_attachment_image_alt',
'value' => '',
'compare' => 'LIKE'
)
)
);
$attachments = new WP_Query($args);
și:
$args = array(
'post_type' => 'attachment',
'posts_per_page' => 10,
'paged' => $paged,
'meta_query' => array(
array(
'key' => '_wp_attachment_image_alt',
'value' => null,
'compare' => 'LIKE'
)
)
);
Dar nu funcționează..
Aveți vreo idee cum să rezolv această problemă?
Mulțumesc

Cred că ai uitat de statusul de post inherit. Cel implicit în WP_Query
este publish.
De asemenea, ar fi mai bine să folosești =
în loc de LIKE
, pentru a evita utilizarea LIKE '%%'
în interogarea SQL.
Încearcă să adaugi asta:
'post_status' => 'inherit'
și
'compare' => '='
în argumentele tale de interogare, pentru a potrivi valorile goale ale șirului _wp_attachment_image_alt
.

Da, am uitat de post_status, și acum funcționează cu '='. Care este diferența dintre '=' și 'LIKE'? Credeam că '=' este pentru numere întregi și 'LIKE' pentru șiruri de caractere... Mulțumesc

Dacă folosești LIKE
în interogarea meta a lui WP_Query
pentru valoarea de exemplu 'test'
, atunci interogarea SQL generată va conține LIKE '%test%'
unde %
este un wildcard. Deci în cazul tău era LIKE '%%'
, ceea ce returnează toate valorile. Reține că coloana meta value este de tipul longtext
, așa că orice numere acolo sunt stocate ca șiruri de caractere. @Avishay
