Obtener publicaciones por valor meta


27

Me gustaría enumerar todas las publicaciones que tienen una clave cp_annonceurcon el valor professionnel.


8
Tenga en cuenta que se espera que haya investigado el problema e intentado resolverlo antes de publicar una pregunta. Si no hubiera sido nuevo aquí, probablemente habría rechazado la pregunta y hubiera seguido adelante, en lugar de responderla. En el espíritu de "Bienvenido a la pila", esta es su abeja libre. Por favor, eche un vistazo a Cómo hacer preguntas futuras.
s_ha_dum

Este solo me hizo perder algo de tiempo debido a la respuesta no aceptada a continuación. Así que dejo aquí mis 2 centavos. Nunca respondió, ni aceptó la respuesta a continuación. ¿Por qué no eliminas estas preguntas mientras hay docenas de preguntas similares por aquí?
mircobabini

Respuestas:


47

Lo que estás pidiendo es un meta_query

$args = array(
   'meta_query' => array(
       array(
           'key' => 'cp_annonceur',
           'value' => 'professionnel',
           'compare' => '=',
       )
   )
);
$query = new WP_Query($args);

Toda la información que necesita está en el Codex .


3
@Beginner: si esto resolvió el problema, márquelo como "Aceptado". Busque la marca de verificación cerca de las flechas de voto a la izquierda.
s_ha_dum

8

Hay dos maneras de hacerlo:

  1. Intercepte la consulta principal sobre pre_get_posts:

    add_action( 'pre_get_posts', function( $query )
    {
        // only handle the main query
        if ( ! $query->is_main_query() )
            return;
    
        $query->set( 'meta_key',   'cp_annonceur' );
        $query->set( 'meta_value', 'professionnel' );
    } );
  2. Agregar una consulta adicional

    $second_loop = get_posts( array(
        'meta_key'   => 'cp_annonceur',
        'meta_value' => 'professionnel',
    ) );

2
Es bueno saber el camino corto con get_posts ()
Andrew Welch

8

Usé selección personalizada (podría ser un mejor rendimiento)

$posts = $wpdb->get_results("SELECT * FROM $wpdb->postmeta
WHERE meta_key = 'cp_annonceur' AND  meta_value = 'professionnel' LIMIT 1", ARRAY_A);

Inspirado en https://tommcfarlin.com/get-post-id-by-meta-value/


1
Puede tener mejores rendimientos, pero desecha la idea de tener funciones de Wordpress para buscar (y almacenar en caché) los datos. Y, además, ¿qué sucederá si WP decide cambiar la estructura de la tabla? :)
Erenor Paz

2

Podemos obtener el resultado deseado con Meta query de WordPress:

// the meta_key 'diplay_on_homepage' with the meta_value 'true'
$cc_args = array(
    'posts_per_page'   => -1,
    'post_type'        => 'post',
    'meta_key'         => 'cp_annonceur',
    'meta_value'       => 'professionnel'
);
$cc_query = new WP_Query( $cc_args );

Para obtener una guía más detallada sobre la metaconsulta, siga este blog: http://www.codecanal.com/get-posts-meta-values/


¿Puedo saber por qué este post_per_pagevalor es -1?
Abhay Gawade

1
@AbhayGawade Puede limitar el número máximo de resultados usando ese parámetro, -1 significa que no hay límite.
Kush
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.