Come utilizzare meta_query per verificare se un campo meta ha un valore impostato?
(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)

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.

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' => '!=',
],
],

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

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.
