Obtener entradas por valor meta

11 may 2014, 22:56:24
Vistas: 155K
Votos: 50

Me gustaría listar todas las entradas que tengan una clave cp_annonceur con el valor professionnel.

1
Comentarios

Tenga en cuenta que se espera que haya investigado el problema y haya intentado resolverlo antes de publicar una pregunta. Si no fueras nuevo aquí, probablemente habría votado negativamente la pregunta y seguido adelante, en lugar de responderla. En el espíritu de "Bienvenido a Stack", este es tu regalo. Por favor, echa un vistazo a [ask] para futuras preguntas.

s_ha_dum s_ha_dum
11 may 2014 23:05:35
Todas las respuestas a la pregunta 6
6
81

Lo que estás solicitando es un meta_query

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

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

11 may 2014 23:05:26
Comentarios

@Beginner : si esto resolvió el problema, por favor márcalo como "Aceptado". Busca la marca de verificación cerca de las flechas de votación a la izquierda.

s_ha_dum s_ha_dum
11 may 2014 23:35:35

Por alguna razón, usar new WP_Query($args) y luego llamar a get_posts no funciona para mí. Sin embargo, pasar directamente el array $args como argumento a la función get_posts sí funciona.

Kunal Kunal
6 may 2020 00:24:03

@Kunal No necesitas llamar a get_posts. Usa el código de arriba y obtén las publicaciones así: $query->posts. Debería devolver un array. No olvides leer el enlace en el comentario, ya que hay algo que falta en el código: $args = array( 'post_type' => 'your-cpt', 'meta_key' => 'your-meta', 'meta_query' => array( array( 'key' => 'cp_annonceur', 'value' => 'professionnel', 'compare' => '=', ) ) ); $query = new WP_Query($args);

BonisTech BonisTech
14 ene 2021 02:32:05

@s_ha_dum corrección menor de sintaxis - falta una , después de 'custom-meta-key'. Habría editado, pero no es posible hacer una edición de solo 1 carácter...

Steven Steven
29 abr 2021 15:57:12

¿Cuál es la diferencia entre meta_key y key?

Michael Rogers Michael Rogers
14 ene 2022 13:20:26

Esto estaría mal. ¿Por qué pasarías meta_key y luego key? No es como lo describe la Documentación de WP Query. Probablemente lo que querías decir es algo como: 'post_type' => 'product', 'meta_query' => array( array( 'key' => 'color', 'value' => 'blue', 'compare' => 'NOT LIKE', ), ), ?

User User
24 sept 2022 10:22:07
Mostrar los 1 comentarios restantes
3
16

Existen dos formas de hacerlo:

  1. Interceptar la consulta principal con pre_get_posts:

    add_action( 'pre_get_posts', function( $query )
    {
        // solo manejar la consulta principal
        if ( ! $query->is_main_query() )
            return;
    
        $query->set( 'meta_key',   'cp_annonceur' );
        $query->set( 'meta_value', 'professionnel' );
    } );
    
  2. Añadir una consulta adicional

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

Un ejemplo más detallado se puede encontrar en esta respuesta.

11 may 2014 23:08:01
Comentarios

Es bueno conocer la forma abreviada con get_posts()

Andrew Welch Andrew Welch
26 ene 2017 18:06:09

¿Cómo se hace esto con múltiples claves/valores meta?

G-J G-J
10 abr 2020 01:57:44

@G-J quizás quieras echar un vistazo a este ejemplo.

kaiser kaiser
15 abr 2020 18:18:04
3
12

Utilicé una consulta SELECT personalizada (puede tener 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/

28 ene 2016 16:40:33
Comentarios

Podría tener mejor rendimiento, pero descarta por completo la idea de usar las funciones de WordPress para buscar (y cachear) datos. Además, ¿qué pasaría si WP decide cambiar la estructura de las tablas? :)

Erenor Paz Erenor Paz
3 mar 2017 12:11:58

@ErenorPaz Entiendo lo que dices, pero esta forma lo haría más fácil si tienes múltiples meta claves/valores como criterio... ¿Hay una forma oficial de manejar múltiples criterios?

G-J G-J
10 abr 2020 01:59:57

¿Te refieres a algo como WHERE metatable1.meta_key = 'cp_annonceur' AND metatable1.meta_value = 'professionnel' AND metatable2.meta_key = 'cp_other_meta' AND metatable2.meta_value = 'other_value'? (Nota que supongo que hacemos un join en la misma tabla posts_meta usando dos nombres metatable1 y metatable2). Esto se puede lograr añadiendo el campo meta_query (como un array) a la consulta. Echa un vistazo a: https://developer.wordpress.org/reference/classes/wp_query/#order-orderby-parameters y ve al párrafo "‘orderby’ with multiple ‘meta_key’s"

Erenor Paz Erenor Paz
10 abr 2020 14:19:09
3

Podemos obtener el resultado deseado con la consulta meta de WordPress:

// la meta_key 'diplay_on_homepage' con el 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 una guía más detallada sobre consultas meta sigue este blog: http://www.codecanal.com/get-posts-meta-values/

4 oct 2017 08:46:42
Comentarios

¿Puedo saber por qué el valor de post_per_page es -1?

Abhay Abhay
27 abr 2018 08:07:56

@AbhayGawade Puedes limitar el número máximo de resultados usando ese parámetro, -1 significa sin límite.

Kush Kush
20 jun 2018 20:49:03

Gracias, funciona bien. :)

Arman H Arman H
23 feb 2022 08:05:08
0

Puedes obtener fácilmente las publicaciones usando la función incorporada de WordPress llamada get_posts Puedes encontrar más detalles sobre get_posts aquí https://developer.wordpress.org/reference/functions/get_posts/

$posts = get_posts(array(
    'numberposts'   => -1, // -1 para obtener todas las publicaciones
    'post_type'     => 'post', // Tipo de publicación: post
    'meta_key'      => 'cp_annonceur', // Clave meta personalizada
    'meta_value'    => 'professionnel' // Valor meta a buscar
));
31 may 2021 18:48:12
2

Prueba esto, me funciona a mí

global $wpdb;
$meta_key = '_request_body';

// Obtener todos los valores meta distintos para la clave especificada
$data = $wpdb->get_results($wpdb->prepare( "SELECT DISTINCT meta_value FROM $wpdb->postmeta WHERE meta_key = %s", $meta_key) , ARRAY_N  );

// Preparar array para los resultados
$result = [];
foreach($data as $array){
    $result[] = $array[0]; // Añadir cada valor meta al array de resultados
}

// Mostrar los resultados
print_r($result);
20 ene 2021 12:20:12
Comentarios

Eso listaría los valores distintos posibles, lo cual no es exactamente lo que pregunta la pregunta.

Rup Rup
20 ene 2021 18:19:34

Nunca deberías acceder directamente a la base de datos para cosas fundamentales de WP como obtener posts. Siempre debes usar la API abstracta de WordPress que hace todo el trabajo pesado por ti y asegura que tu código seguirá funcionando si algo cambia internamente.

Zarko Jovic Zarko Jovic
18 nov 2022 22:03:39