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.

Sì, in termini di performance... probabilmente non c'è molta differenza. È solo una scorciatoia comoda se hai bisogno di un solo valore.

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 );
