Obtener publicaciones por valor meta

27

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

Principiante
fuente
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 .

s_ha_dum
fuente
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',
    ) );
emperador
fuente
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/

michalzuber
fuente
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/

Jitendra Damor
fuente
¿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