query_posts y mostrar solo resultados si un campo personalizado no está vacío
¿Cómo puedo usar query_posts
y mostrar solo resultados si un campo personalizado no está vacío o tiene un valor?
Quiero poner una URL en un campo personalizado y mostrar solo estas páginas si existe una URL.
Código actual pero no puedo resolver el resto:
$args = array( 'posts_per_page' => '10',
'post_type' => 'programmes',
'orderby' => 'meta_value_num', 'meta_key' => 'popularityfig',
'order' => 'DESC',
);

Prueba este código:
$args = array(
'posts_per_page' => '10',
'post_type' => 'programmes',
'meta_key' => 'popularityfig',
'meta_value' => '',
'meta_compare' => '!=',
'order' => 'DESC'
);
Hay 2 argumentos que quizás quieras notar en el código: meta_value
y meta_compare
. Usar meta_compare
con el operador !=
excluirá las publicaciones con valor meta vacío.

Gracias, ahora puedo verlo en el codex. No estoy seguro de por qué no podía verlo antes. ¡Gracias de nuevo!

Por alguna razón, esto seguía mostrando todos mis posts sin importar el valor. En cambio, usé 'meta_value' => array('') y 'meta_compare' => 'NOT IN' y eso funcionó. Creé mi meta valor con el plugin Advanced Custom Fields (ACF) y era solo un campo de texto.

No está claro si la respuesta anterior realmente funcionó para ti @erichmond, pero definitivamente no funcionó para mí. Sin embargo, encontré una solución. Mira: Cómo mostrar publicaciones solo si meta_value no está vacío

La respuesta aceptada no funcionó para mí con un campo de texto en Advanced Custom Fields. Seguía recuperando todas las publicaciones una vez que se guardaban después de agregar el campo de texto a los Campos Personalizados. Tuve que implementar una solución similar a otros:
$args = array(
'meta_key' => 'your_acf_field', // Reemplaza con tu campo ACF
'meta_value' => array(''),
'meta_compare' => 'NOT IN', // Excluye registros donde el campo está vacío
);
