Come ottenere get_post_meta senza l'ID del post
Voglio ottenere tutti i miei posts-meta
, ma basandomi solo sulla key
. Ad esempio, la query principale per ottenere i post-meta è:
<?php $meta_values = get_post_meta($post_id, $key, $single); ?>
Ora voglio ottenere questi post-meta
basandomi solo sulla key
. La mia query attuale per ottenere i post-meta è:
<?php echo get_post_meta($post->ID, 'custom_tags'.$userID, true); ?>
E voglio rimuovere $post->ID
da questa query. C'è un modo per farlo? Grazie.

$post->ID
è ciò che distingue il valore meta tra tutti i post con la stessa chiave meta.
Quindi, se vuoi abbreviare la chiamata a get_post_meta
per il post corrente, puoi fare così:
function get_cuurent_post_meta($key){
global $post;
return get_post_meta($post->ID,$key,true);
}
e puoi chiamarla in questo modo:
echo get_cuurent_post_meta('custom_tags'.$userID);
Ora, se non si tratta del post corrente ma di qualsiasi post, puoi fare così:
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) );
}
Per ottenere il primo valore meta di questa chiave, chiamala così:
echo get_meta_value_by_key('custom_tags'.$userID);
e per ottenere tutti i valori meta di questa chiave, usa il parametro $limit
, ad esempio:
$post_meta_array = get_meta_value_by_key('custom_tags'.$userID, 999);

C'è una cosa che devo assolutamente chiedere. Quando faccio echo
del $post_meta_array
mostra Array. E quando uso print_r($post_meta_array)
mi mostra dati qualcosa come questo Array (
[0] => stdClass Object ( [meta_value] => $custom_tags )
[1] => stdClass Object ( [meta_value] => tag2,tag3,tag4 )
[2] => stdClass Object ( [meta_value] => garlic,soupe )
) ;
. Come posso mostrarli in una riga senza oggetti.

Puoi modificare l'output di get_results e poi quando hai un array puoi usare implode

Puoi interrogare direttamente la tua tabella postmeta
utilizzando qualcosa come:
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>';
AGGIORNAMENTO
Dopo aver ottenuto i tuoi $metas
, puoi passarli in un ciclo per visualizzare i valori:
if( count($metas) > 0 ){ #controlla se abbiamo ottenuto risultati
foreach ($metas as $meta){
echo $meta->meta_value . "<br />";
}
}

Il problema è lo stesso che ho commentato sopra. Ecco il mio commento.
C'è una cosa che devo chiederti. Quando uso print_r($metas)
mi mostra i dati in questo modo Array ( [0] => stdClass Object ( [meta_value] => $custom_tags ) [1] => stdClass Object ( [meta_value] => tag2,tag3,tag4 ) [2] => stdClass Object ( [meta_value] => garlic,soupe ) ) ;
. Come posso mostrarli in una riga senza oggetti.

@RRikesh Per favore dai un'occhiata a $wpdb->prepare()
. Prepara sempre le tue istruzioni, a prescindere.

@kaiser Grazie, ho aggiornato la mia risposta. A proposito, dovrei preparare anche se sto hardcodando il valore?

Fondamentalmente è un sostituto di sprintf()
che si occupa di sostituire %s
e %d
. Quindi lo farei comunque. Anche se è solo per altre persone che leggono il mio codice o per prepararlo nel caso in cui in seguito passassi a una variabile dinamica. Per rispondere alla tua domanda: No, non in un caso privato ;)
