Mostra tutti gli slug di wp_get_post_terms
Sto utilizzando il seguente codice per visualizzare gli slug della mia tassonomia personalizzata. Tuttavia, viene mostrata solo la prima categoria e non tutte le categorie correlate. So che è abbastanza semplice ed è legato a [0] ma non riesco a capire come modificarlo.
// Ottiene i termini del post
$getslugid = wp_get_post_terms( $post->ID, 'opd_taggallery' );
$getslug = $getslugid [0]->slug;
echo $getslug;
La funzione principale di WordPress wp_list_pluck() dovrebbe rendere questo compito piuttosto semplice.
$getslugid = wp_get_post_terms( $post->ID, 'opd_taggallery' );
$slugs = implode(', ',wp_list_pluck($getslugid,'slug'));
echo $slugs;
+1, non sapevo nemmeno di questa funzione. Poiché utilizza anche il foreach (parlando di performance), preferisco ancora la mia soluzione, dato che ho un controllo più preciso e potrei utilizzare più campi dell'oggetto.
fischi
Sì, in termini di performance... probabilmente non c'è molta differenza. È solo una scorciatoia comoda se hai bisogno di un solo valore.
s_ha_dum
Questa è più una domanda relativa a PHP, ma la soluzione è semplice - devi utilizzare un ciclo foreach su $getslug, perché al momento stai solo visualizzando lo slug della prima tassonomia.
La funzione wp_get_post_terms() non restituisce un singolo oggetto, ma un array di oggetti. Hai ragione riguardo al [0], questo indica che stai controllando il primo elemento di detto array.
La tua funzione dovrebbe essere simile a questa:
$getslugid = wp_get_post_terms( $post->ID, 'opd_taggallery' );
foreach( $getslugid as $thisslug ) {
echo $thisslug->slug . ' '; // Aggiunto uno spazio tra gli slug con . ' '
}
Nelle versioni più recenti di WordPress è possibile interrogare direttamente solo gli slug delle tassonomie. Penso che questa funzionalità sia stata introdotta con l'aggiunta della classe WP_Term_Query nella versione 4.6.0 di WordPress.
$slugs = wp_get_post_terms( $post->ID, 'opd_taggallery', array(
'fields' => 'id=>slug',
) );
echo implode( " ", $slugs );