¿Cómo puedo obtener solo los términos padre?

1 ago 2011, 15:03:32
Vistas: 96.8K
Votos: 29

¿Existe alguna manera de obtener solo los términos padre de una taxonomía personalizada o categoría?

0
Todas las respuestas a la pregunta 5
3
53

Sí, simplemente pasa el parámetro parent a get_terms cuando lo llames, como mencionó Michael.

Desde WordPress 4.5 este es el uso recomendado:

$myterms = get_terms( array( 'taxonomy' => 'taxonomy_name', 'parent' => 0 ) );

Antes de WP 4.5 este era el uso predeterminado:

$myterms = get_terms( 'taxonomy_name_here', array( 'parent' => 0 ) );

Devolverá todos los términos que tengan un valor parent de 0, es decir, términos de nivel superior.

1 ago 2011 17:14:29
Comentarios

Devuelve un array vacío para taxonomías personalizadas :(

Mamaduka Mamaduka
2 ago 2011 16:14:23

¿Los términos en esa taxonomía están asociados con un post (o tipo personalizado)? Si no es así, necesitarás pasar el parámetro hide_empty, configurándolo también a 0, para que puedas ver términos que actualmente no están en uso.

t31os t31os
2 ago 2011 16:25:38

Ten en cuenta que esto solo obtendrá el nivel padre 1, el término "madre". Para recuperar todos los ancestros, usa get_ancestors(TERM_ID, TAXONOMY, 'taxonomy') https://developer.wordpress.org/reference/functions/get_ancestors/

jave.web jave.web
13 abr 2017 09:07:16
1

para plantillas de correo electrónico de WooCommerce utiliza lo siguiente:

$terms = get_the_terms( $_product->id , 'product_cat');
    if($terms) {
        foreach( $terms as $term ) {
            $term = get_term_by("id", $term->parent, "product_cat");
            if ($term->parent > 0) {
                $term = get_term_by("id", $term->parent, "product_cat");
            }
            $cat_obj = get_term($term->term_id, 'product_cat');
            $cat_name = $cat_obj->name;
        }
    }
echo '<br />('. $cat_name . ')';
2 sept 2013 16:26:28
Comentarios

por favor agrega alguna explicación sobre cómo tu código podría resolver la pregunta. OP no hizo una pregunta sobre plantillas de correo electrónico de woocommerce.

iEmanuele iEmanuele
2 sept 2013 17:34:10
4
$archive_cats = get_terms( 'archivecat', 'orderby=count&hide_empty=0&parent=0' );
24 oct 2013 11:10:18
Comentarios

¿En qué se diferencia esto de la respuesta (ya aceptada) propuesta hace más de dos años?

tfrommen tfrommen
24 oct 2013 11:31:46

¿viste los comentarios en la respuesta (ya aceptada)? si no hay más respuestas útiles ¿por qué la pregunta sigue abierta?

ashraf mohammed ashraf mohammed
12 nov 2013 15:42:03

Había una única consulta sobre términos que no aparecían, que no estaba relacionada con la pregunta original. Abordé ese problema en un comentario de respuesta (ya que no tenía relación con la validez o corrección de la respuesta ya proporcionada).

t31os t31os
28 ene 2014 15:48:06

Por favor, aborda eso en una edición. Explica tu código.

kaiser kaiser
4 feb 2014 00:19:25
0

Para esta demostración, asumiremos que tenemos una taxonomía llamada "Libros". Y podríamos tener una jerarquía como:

Ficción (id: 699)
 - Esta es una Historia de Ficción.
No Ficción
 - Título de No Ficción
Fantasía
  -  ...

Queremos obtener el término padre de la taxonomía "Libros" del post actual.

/* Obtener el Nombre del Término Padre de la Taxonomía por ID del post */

function get_parent_term_by_post_id($taxname, $taxid=null){

if(isset($taxid)):

    //Obtener por ID de término pasado en la función
    $parent_tax = get_term_by('id', $taxid, $taxname);

    return $parent_tax ->name; //usar name, slug o id

else:

     //Obtener por PostId de la página actual
     $terms = wp_get_post_terms( get_the_id(), $taxname);

     $tax_parent_id = $terms[0]->parent;

     if($tax_parent_id == 0):
      $tax_parent_id = $terms[0]->parent; //obtener el siguiente ID padre
     endif; 

     $parent_tax = get_term_by('id', $tax_parent_id , $taxname);

     return $parent_tax ->name; //usar name, slug o id

endif;

}

Luego simplemente lo ejecutas en tu plantilla así:

//ingresar nombre de taxonomía personalizada. Obtendrá por ID de post 
echo get_parent_term_name_by_post_id('libros'); //retorna Ficción

o

//por ID de término 
echo get_parent_term_name_by_post_id('libros', 699); //retorna Ficción
19 nov 2020 17:10:22