Cómo obtener post_meta sin el ID del post
Quiero obtener todos mis posts-meta
, pero basándome solo en la key
. Por ejemplo, la consulta principal para obtener los metadatos del post es
<?php $meta_values = get_post_meta($post_id, $key, $single); ?>
Ahora quiero obtener estos post-meta
basándome solo en la key
. Mi consulta actual para obtener los metadatos es
<?php echo get_post_meta($post->ID, 'custom_tags'.$userID, true); ?>
Y quiero eliminar $post->ID
de esta consulta. ¿Hay alguna manera de hacer esto? Gracias.

$post->ID
es lo que distingue el valor meta entre todos los posts con la misma clave meta.
Así que si quieres una forma abreviada de llamar a get_post_meta
para el post actual, puedes hacer esto:
function get_cuurent_post_meta($key){
global $post;
return get_post_meta($post->ID,$key,true);
}
Y puedes llamarlo así:
echo get_cuurent_post_meta('custom_tags'.$userID);
Ahora, si no es el post actual sino cualquier post, puedes hacer esto:
function get_meta_value_by_key($meta_key,$limit = 1){
global $wpdb;
if (1 == $limit)
return $value = $wpdb->get_var( $wpdb->prepare("SELECT meta_value FROM $wpdb->postmeta WHERE meta_key = %s LIMIT 1" , $meta_key) );
else
return $value = $wpdb->get_results( $wpdb->prepare("SELECT meta_value FROM $wpdb->postmeta WHERE meta_key = %s LIMIT %d" , $meta_key,$limit) );
}
Para obtener el primer valor meta de esta clave, simplemente llámalo así:
echo get_meta_value_by_key('custom_tags'.$userID);
Y para obtener todos los valores meta de esta clave, usa el parámetro $limit
ejemplo:
$post_meta_array = get_meta_value_by_key('custom_tags'.$userID, 999);

Hay una cosa que tengo que preguntar. Cuando hago echo
del $post_meta_array
muestra Array. Y cuando uso print_r($post_meta_array)
me muestra datos algo como esto Array (
[0] => stdClass Object ( [meta_value] => $custom_tags )
[1] => stdClass Object ( [meta_value] => tag2,tag3,tag4 )
[2] => stdClass Object ( [meta_value] => garlic,soupe )
) ;
. ¿Cómo puedo mostrarlos en una línea sin objetos?

Puedes cambiar la salida de get_results y luego cuando tengas un array puedes usar implode

Puedes consultar directamente tu tabla postmeta
usando algo como:
global $wpdb;
$metas = $wpdb->get_results(
$wpdb->prepare("SELECT meta_value FROM $wpdb->postmeta where meta_key = %s", 'add_your_key_here')
);
echo '<pre>';
print_r( $metas );
echo '</pre>';
ACTUALIZACIÓN
Después de obtener tus $metas
, las pasas en un bucle para mostrar los valores:
if( count($metas) > 0 ){ #verificar si obtuvimos resultados
foreach ($metas as $meta){
echo $meta->meta_value . "<br />";
}
}

El problema es el mismo que comenté anteriormente. Aquí está mi comentario.
Hay algo que tengo que preguntar. Cuando uso print_r($metas)
me muestra datos algo como esto Array ( [0] => stdClass Object ( [meta_value] => $custom_tags ) [1] => stdClass Object ( [meta_value] => tag2,tag3,tag4 ) [2] => stdClass Object ( [meta_value] => garlic,soupe ) ) ;
. ¿Cómo puedo mostrarlos en una línea sin objetos?

@RRikesch Por favor revisa $wpdb->prepare()
. Siempre prepara tus sentencias, sin importar qué.

@kaiser Gracias, actualicé mi respuesta. Por cierto, ¿debería preparar incluso si estoy codificando el valor?

Básicamente es un reemplazo de sprintf()
que se encarga de reemplazar %s
y %d
. Así que lo haría de todos modos. Incluso si es solo para que otras personas lean mi código o prepararlo en caso de que luego pase a una variable dinámica. Para responder a tu pregunta: No, no en un caso privado ;)
