Pregunta:
Tengo una taxonomía personalizada jerárquica que puedo mostrar usando print_r(get_the_terms( $post->ID, 'taxonomic_rank' ));
:
Array
(
[46] => stdClass Object
(
[term_id] => 46
[name] => Aplocheilidae
[slug] => aplocheilidae
[term_group] => 0
[term_taxonomy_id] => 53
[taxonomy] => taxonomic_ranks
[description] =>
[parent] => 39
[count] => 1
[object_id] => 443
)
[47] => stdClass Object
(
[term_id] => 47
[name] => Aplocheilus
[slug] => aplocheilus
[term_group] => 0
[term_taxonomy_id] => 54
[taxonomy] => taxonomic_ranks
[description] =>
[parent] => 46
[count] => 1
[object_id] => 443
)
[39] => stdClass Object
(
[term_id] => 39
[name] => Cyprinodontiformes
[slug] => cyprinodontiformes
[term_group] => 0
[term_taxonomy_id] => 52
[taxonomy] => taxonomic_ranks
[description] =>
[parent] => 0
[count] => 1
[object_id] => 443
)
)
Esta taxonomía siempre tendrá la siguiente forma: Orden (padre)> Familia (hijo de Orden)> Subfamilia (hijo de familia)
¿Existe una forma rápida y sencilla de mostrar estas taxonomías en el orden correcto, de modo que pueda imprimir la siguiente línea? Order: <order>, Family: <family>, Sub-family: <sub-family>
Gracias por adelantado
Respuesta:
Probablemente haya algunas formas mejores de hacer esto, pero siempre puede hacer tres bucles foreach
simples.
Escribí una función de ejemplo que hace bien el trabajo y debería servirte como un buen punto de partida:
function print_taxonomic_ranks( $terms = '' ){
// check input
if ( empty( $terms ) || is_wp_error( $terms ) || ! is_array( $terms ) )
return;
// set id variables to 0 for easy check
$order_id = $family_id = $subfamily_id = 0;
// get order
foreach ( $terms as $term ) {
if ( $order_id || $term->parent )
continue;
$order_id = $term->term_id;
$order = $term->name;
}
// get family
foreach ( $terms as $term ) {
if ( $family_id || $order_id != $term->parent )
continue;
$family_id = $term->term_id;
$family = $term->name;
}
// get subfamily
foreach ( $terms as $term ) {
if ( $subfamily_id || $family_id != $term->parent )
continue;
$subfamily_id = $term->term_id;
$subfamily = $term->name;
}
// output
echo "Order: $order, Family: $family, Sub-family: $subfamily";
}
Déjelo vivir en su archivo functions.php
y úselo en sus plantillas de esta manera:
print_taxonomy_ranks( get_the_terms( $post->ID, 'taxonomic_rank' ) );
NOTA: Hacer un bucle con la misma matriz tres veces suena un poco estúpido, pero por otro lado es una solución rápida y fácil que es fácil de leer, extender y mantener.