Come utilizzare meta_query per verificare se un campo meta ha un valore impostato?

16 dic 2015, 23:12:28
Visualizzazioni: 19.4K
Voti: 3

(WordPress 4.3.1)

Sto eseguendo un loop personalizzato e voglio includere solo i post che hanno un file caricato in un campo personalizzato: audio_file.

Ho provato molte soluzioni trovate online ma finora nulla funziona.

Posso usare meta_query per verificare se una chiave ha un valore?

Ecco il mio tentativo attuale:

global $post;      

$args = array(
   'post_type'      => array (
                       'podcast',
                       'event',
                       ),
   'posts_per_page' => 10,
   'post_status'    => 'publish',     
   'paged'          => get_query_var( 'paged' ),
   'meta_query'     => array (
                           'key' => 'audio_file',
                           'value' => '' ,
                           'compare' => '!=',
                           //'type'    => 'date',
                            ),
   );

   global $wp_query;

   $wp_query = new WP_Query( $args );

   if ( have_posts() ) { while ( have_posts() ) { the_post(); 

Il risultato desiderato è mostrare i post dove 'audio_file' non è vuoto.

Grazie. (WordPress 4.3.1)

1
Commenti

Inoltre, aggiornare WP all'ultima versione è sempre una buona idea dal punto di vista della sicurezza (specialmente se altre persone l'hanno già testata e dimostrato che è sicura e non rompe i siti o i plugin di tutti).

N00b N00b
17 dic 2015 01:47:35
Tutte le risposte alla domanda 4
0

Ho capito, meta_query deve essere un array all'interno di un array poiché è pensato per query avanzate che utilizzano 'relation'.

meta_query => array (
    array (
        //'relation' => 'OR',
        'key' => 'audio_file', // Il campo da controllare.
        'value' => '', // Il valore del campo.
        'compare' => '!=', // Operatore condizionale utilizzato sul valore.
    ),  
),

La condizione '!=' (diverso da) '' (null) restituisce true se è stato caricato un file.

17 dic 2015 02:25:08
0

Questo potrebbe essere utile a qualcuno. Cercherà un valore meta, se esiste e non è vuoto.

'meta_query' => [
    'relation' => 'AND',
    [
        'key'     => 'your_key',
        'compare' => 'EXISTS',
    ],
    // Non vogliamo valori vuoti
    [
        'key'     => 'your_key',
        'value'   => '',
        'compare' => '!=',
    ],
],
29 giu 2020 14:26:08
2

Posso usare meta_query per verificare se una chiave ha un valore?

Qualsiasi valore? Usa EXISTS

'meta_query'     => array (
                        'key' => 'audio_file',
                        'value' => '' ,
                        'compare' => 'EXISTS',
                        'type'    => 'date',
                         ),
);

Non capisco perché il tuo file caricato dovrebbe essere di tipo date. Mi aspetterei che fosse binary o forse char

16 dic 2015 23:33:49
Commenti

Giusto... mi era sfuggito da un precedente tentativo di rilevare il campo data. Forse 'type' non è necessario comunque... Ho provato EXISTS e nessun risultato...

AJD AJD
16 dic 2015 23:58:07

Sì, potrebbe non essere necessario del tutto

s_ha_dum s_ha_dum
17 dic 2015 00:02:38
0

Sembra che il tipo di valore sia essenziale ora. Non sono riuscito a far funzionare correttamente la meta query senza specificare il tipo. Soprattutto quando si verifica l'esistenza del valore.

Questo codice ora non funziona.

'meta_query' => array(
    'relation' => 'AND',
    array(
        'key'     => 'meta_key',
        'value'   => '',
        'compare' => '!=',
    ),
),

Questo invece funziona.

'meta_query' => array(
    'relation' => 'AND',
    array(
        'key'     => 'meta_key',
        'value'   => '',
        'compare' => '!=',
        'type' => 'NUMERIC'
    ),
),

L'unica differenza è il tipo.

4 dic 2021 14:11:02