query_posts e mostra solo risultati se un campo personalizzato non è vuoto
Come posso utilizzare query_posts
e mostrare solo i risultati se un campo personalizzato non è vuoto o ha un valore.
Voglio inserire un URL in un campo personalizzato e mostrare solo le pagine che hanno un URL?
Codice attuale ma non riesco a capire il resto:
$args = array(
'posts_per_page' => '10', // numero di post per pagina
'post_type' => 'programmes', // tipo di post personalizzato
'orderby' => 'meta_value_num',
'meta_key' => 'popularityfig', // chiave del campo personalizzato per l'ordinamento
'order' => 'DESC', // ordine decrescente
);

Prova questo codice:
$args = array(
'posts_per_page' => '10',
'post_type' => 'programmes',
'meta_key' => 'popularityfig',
'meta_value' => '',
'meta_compare' => '!=',
'order' => 'DESC'
);
Ci sono 2 argomenti che potresti voler notare nel codice: meta_value
e meta_compare
. Usando meta_compare
con l'operatore !=
verranno esclusi i post con valore meta vuoto.

Grazie, ora lo vedo sul codex?? Non sono sicuro del perché non riuscissi a vederlo prima!! Grazie ancora.

Per qualche motivo, continuava a recuperare tutti i miei post indipendentemente dal valore. Invece, ho usato 'meta_value' => array('') e 'meta_compare' => 'NOT IN' e ha funzionato. Ho creato il mio meta value con il plugin Advanced Custom Fields (ACF) ed era semplicemente un campo di testo.

Non è chiaro se la risposta sopra abbia effettivamente funzionato per te @erichmond, ma sicuramente non ha funzionato per me. Tuttavia ho trovato una soluzione. Vedi: Come mostrare i post solo se meta_value non è vuoto

La risposta accettata non funzionava per me con un campo di testo in Advanced Custom Fields. Continuava a recuperare tutti i post una volta che erano stati salvati dopo l'aggiunta del campo di testo ai Custom Fields. Ho dovuto implementare una soluzione simile ad altre:
$args = array(
'meta_key' => 'your_acf_field',
'meta_value' => array(''),
'meta_compare' => 'NOT IN',
);
