Mostrar todos los slugs de wp_get_post_terms
Estoy usando el siguiente código para mostrar los slugs de mi taxonomía personalizada. Sin embargo, solo muestra la primera categoría y no todas las categorías relacionadas. Sé que esto es bastante simple y tiene que ver con [0] pero no puedo determinar cómo cambiarlo.
$getslugid = wp_get_post_terms( $post->ID, 'opd_taggallery' );
$getslug = $getslugid [0]->slug;
echo $getslug;
La función principal de WordPress wp_list_pluck()
debería facilitar bastante esto.
$getslugid = wp_get_post_terms( $post->ID, 'opd_taggallery' );
$slugs = implode(', ',wp_list_pluck($getslugid,'slug'));
echo $slugs;

+1, ni siquiera sabía de esta función. Como también usa foreach (hablando de rendimiento), todavía prefiero mi solución, ya que tengo control preciso y podría usar múltiples campos del objeto.

Sí, en cuanto a rendimiento... probablemente no haya mucha diferencia. Es solo un atajo conveniente si solo necesitas un valor.

Esto es más una pregunta de PHP, pero la solución es simple: necesitas usar un bucle foreach
en $getslug
, porque solo estás mostrando el slug de la primera taxonomía.
La función wp_get_post_terms()
no devuelve un solo objeto, sino un array de objetos. Tienes razón con el [0]
, esto indica que estás verificando la primera entrada de dicho array.
Tu función debería verse algo así:
$getslugid = wp_get_post_terms( $post->ID, 'opd_taggallery' );
foreach( $getslugid as $thisslug ) {
echo $thisslug->slug . ' '; // Se agregó un espacio entre los slugs con . ' '
}

En versiones más recientes de WordPress es posible consultar directamente solo los slugs de taxonomía. Creo que esto llegó con la introducción de la clase WP_Term_Query en la versión 4.6.0 de WordPress.
$slugs = wp_get_post_terms( $post->ID, 'opd_taggallery', array(
'fields' => 'id=>slug',
) );
echo implode( " ", $slugs );
