Query per ottenere post con valore meta vuoto

5 ott 2016, 12:02:11
Visualizzazioni: 14.2K
Voti: 5

Voglio interrogare i post dove il valore del meta è vuoto. Ad esempio, voglio ottenere questi tre post, senza valori meta: Esempio di post con meta value vuoto

Ho già provato:

$args = array(
    'post_type'   => 'attachment',
    'posts_per_page' => 10,
    'paged'          => $paged,
    'meta_query'  => array(
        array(
            'key' => '_wp_attachment_image_alt',  // Chiave del campo personalizzato
            'value' => '',                        // Valore vuoto
            'compare' => 'LIKE'                   // Operatore di confronto
        )
    )
);
$attachments = new WP_Query($args);

e:

$args = array(
    'post_type'   => 'attachment',
    'posts_per_page' => 10,
    'paged'          => $paged,
    'meta_query'  => array(
        array(
            'key' => '_wp_attachment_image_alt',  // Chiave meta
            'value' => null,                      // Valore nullo  
            'compare' => 'LIKE'                  // Operatore
        )
    )
);

Ma non funziona...

Qualche idea su come risolvere?

Grazie

0
Tutte le risposte alla domanda 2
2

Penso che ti sia dimenticato dello stato del post inherit. Quello predefinito in WP_Query è publish.

Dovresti anche usare = invece di LIKE, per evitare di usare LIKE '%%' nella query SQL.

Quindi prova ad aggiungere questo:

'post_status' => 'inherit'

e

'compare' => '='

nei parametri della tua query, per corrispondere ai valori vuoti della stringa _wp_attachment_image_alt.

5 ott 2016 12:17:35
Commenti

Sì, ho dimenticato il post_status, e ora funziona con '='. Qual è la differenza tra '=' e 'LIKE'? Pensavo che '=' fosse per gli interi e 'LIKE' per le stringhe..Grazie

Avishay Avishay
5 ott 2016 13:00:32

Se usi LIKE nella meta query di WP_Query per esempio il valore 'test', allora la query SQL generata conterrà LIKE '%test%' dove % è un carattere jolly. Quindi nel tuo caso era LIKE '%%', che restituisce tutti i valori. Nota che la colonna meta value è di tipo longtext quindi qualsiasi numero lì è memorizzato come stringa. @Avishay

birgire birgire
5 ott 2016 13:14:25
1
-1
'meta_query' => array(
    array(
     'key' => '_wp_attachment_image_alt',
     'compare' => 'NOT EXISTS' // questo dovrebbe funzionare...
    ),
)
5 ott 2016 12:20:21
Commenti

Non funziona, nonostante la chiave esista..

Avishay Avishay
5 ott 2016 12:56:46