Cómo recuperar posts con meta_query específica en WordPress

  • Autor Autor adruiz
  • Fecha de inicio Fecha de inicio

adruiz

Gamma
Verificación en dos pasos activada
Verificado por Whatsapp
EDIT: Solucionado 👍

Me explico, tengo un meta_query definido en todos los artículos, y desde el código me interesa recuperar de forma dinámica posts con un query específico (excepto el propio post). Para ejemplo, el siguiente código:
PHP:
$args = array(
    'post_type' => 'post',
    'post__not_in' => array($post_id),
    'meta_query' => array(
        array(
            'key' => 'coches',
            'value' => $coches
        )
    ),
);
$coches = new WP_Query($args);

Funciona correctamente cuando el valor $coches coincide en otros posts y devuelve únicamente los posts que tengan ese valor. El problema viene cuando un post tiene un meta_value que todavía es único y que ninguno otro lo tiene, en ese caso me devuelve todos los posts que existen. He probado con un compare del meta_query siguiendo la documentación de Wordpress, pero no parece funcionar, además de muchas otras opciones similares que he ido viendo en stackoverflow. Algo como esto:
PHP:
$args = array(
    'post_type' => 'post',
    'post__not_in' => array($post_id),
    'meta_query' => array(
        'relation' => 'OR',
        array(
            'key' => 'coches',
            'compare' => 'NOT EXISTS',
            'value' => ''
        ),
        array(
            'key' => 'coches',
            'value' => $coches
        )
    ),
);
$coches = new WP_Query($args);

Siempre, sin excepción, $coches -> have_posts() me devuelve true y yo lo que quiero es que me devuelva true únicamente cuando hay más posts con el mismo meta_value.

Lo único que se me ocurre es jugar de alguna manera con el post__not_in, pero no se me ocurre cómo.

¿Alguna sugerencia? Os leo 🙂
 
Última edición:
Probaste haciendo una consulta asi?
aunque creo que es lo mismo.

PHP:
$args = array(
    'meta_key'   => 'coches',
    'meta_value' => $coches
);

$query = new WP_Query( $args );
 
PHP:
'post__not_in' => array (get_the_ID()),
 
Al final el código funcionaba correctamente, ocurre que lo estaba testeando donde no debía, en borradores 🤦‍♂️ Pero en post publicados sí parece funcionar como debe.

Gracias igualmente a los dos 👍