Obtener valor meta por clave meta en WordPress

13 mar 2013, 17:57:26
Vistas: 37.2K
Votos: 4

Cómo obtener el valor meta por clave meta

Quiero obtener el valor por la clave meta. Esto es lo que he intentado hasta ahora:

   $args = array(
    'post_type' => 'post',
    'post_status' => 'publish',
    'posts_per_page' => -1,
    'meta_key' => 'picture_upload_1'
);
$dbResult = new WP_Query($args);

var_dump($dbResult);

pero no estoy recibiendo el valor meta

Para obtener el valor meta, necesitas usar get_post_meta() después de la consulta. Aquí tienes la forma correcta:

$args = array(
    'post_type' => 'post',
    'post_status' => 'publish',
    'posts_per_page' => -1,
    'meta_key' => 'picture_upload_1'
);
$query = new WP_Query($args);

if ($query->have_posts()) {
    while ($query->have_posts()) {
        $query->the_post();
        // Obtener el valor meta
        $meta_value = get_post_meta(get_the_ID(), 'picture_upload_1', true);
        echo $meta_value;
    }
    wp_reset_postdata();
}
6
Comentarios

gracias, pero como se mencionó en la pregunta. necesito obtener el valor meta por la clave meta. ¡No tengo el ID de la publicación!

meWantToLearn meWantToLearn
13 mar 2013 18:14:10

si no tienes el ID de la publicación, ¿cómo sabes qué valor meta estás buscando si múltiples publicaciones tienen esa clave asociada? ¿qué planeas hacer con los valores meta?

Milo Milo
13 mar 2013 18:20:42

estoy escribiendo un plugin, tiene un tipo de publicación personalizada y un shortcode que acepta un parámetro. Cuando el usuario guarda la publicación personalizada, almaceno la clave como slideshow_1, el 1 será una clave única aleatoria. Cuando el usuario usa el shortcode [images id=1], agregaré 1 a slideshow_ y ejecutaré una consulta para obtener su valor meta que tiene la ruta de la imagen

meWantToLearn meWantToLearn
13 mar 2013 18:21:53

eso no responde ninguna de mis preguntas.

Milo Milo
13 mar 2013 18:23:04

no habrá múltiples publicaciones con la misma clave, la clave será única

meWantToLearn meWantToLearn
13 mar 2013 18:24:59
Mostrar los 1 comentarios restantes
Todas las respuestas a la pregunta 3
1

WP_Query selecciona entradas y no valores de metadatos, por eso no estás obteniendo el valor. Puedes usar el ID de la entrada devuelta para obtener el valor, algo así:

$args = array(
    'post_type' => 'post',
    'post_status' => 'publish',
    'posts_per_page' => 1,
    'meta_key' => 'picture_upload_1'
);
$dbResult = new WP_Query($args);
global $post;
if ($dbResult->have_posts()){
   $dbResult->the_post();
   $value = get_post_meta($post->ID,'picture_upload_1',true);
}

Lo cual obtendrá el valor del metadato de la última entrada publicada que tenga un campo personalizado llamado picture_upload_1

Otra cosa que puedes hacer es crear una consulta manualmente, algo como:

 global $wpdb;
 $value = $wpdb->get_var( $wpdb->prepare("SELECT meta_value FROM $wpdb->postmeta WHERE meta_key = %s LIMIT 1" , $meta_key) );
13 mar 2013 18:25:08
Comentarios

esto es genial pero ¿por qué tenemos que hacer global $post y $dbResult->the_post(); y por qué el post_content está vacío cuando usamos la función $dbResult->get_posts();

mohsin mohsin
20 oct 2017 18:04:45
2

Obtener todos los valores de meta_key en cualquier lugar:

global $wpdb;
$meta_key = 'picture_upload_1';

$data = $wpdb->get_results($wpdb->prepare( "SELECT DISTINCT meta_value FROM $wpdb->postmeta WHERE meta_key = %s", $meta_key) , ARRAY_N  );

$result = [];
foreach($data as $array){
    $result[] = $array[0];
}

print_r($result);
14 ago 2020 19:38:46
Comentarios

¿Por qué estás recorriendo ese array nuevamente?

fuxia fuxia
15 ago 2020 02:56:14

Porque el array original tiene arrays anidados (array multidimensional)

Hisham Dalal Hisham Dalal
15 ago 2020 10:21:39
0

¿Considerarías almacenar el valor en la tabla wp_options en lugar de en wp_postmetas?

De esta manera podrías usar get_option con tu clave personalizada para establecer y recuperar tu valor.

https://developer.wordpress.org/reference/functions/get_option/

14 ago 2020 19:53:08