custom-taxonomy – Taxonomía personalizada, get_the_terms, listada en orden de padre> hijo

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.

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım