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.
Adi
Puoi modificare l'output di get_results e poi quando hai un array puoi usare implode
Bainternet
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.
Adi
@RRikesh Per favore dai un'occhiata a $wpdb->prepare(). Prepara sempre le tue istruzioni, a prescindere.
kaiser
@kaiser Grazie, ho aggiornato la mia risposta. A proposito, dovrei preparare anche se sto hardcodando il valore?
RRikesh
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 ;)
kaiser