¿Cómo verificar si una categoría tiene una categoría principal?

5 minutos de lectura

avatar de usuario
PhatToni

Estoy tratando de verificar si ‘categoryone’ tiene un padre. Ahora sé que puedo verificar y ver que hay una categoría llamada categoría uno, pero no si la categoría uno tiene una categoría principal. He intentado codificar algo como el siguiente código.

  $tid = term_exists('categoryone', 'category', 0);

  $term_ids = [];

  if ( $tid !== 0 && $tid !== null )
  {
$term_ids[] = $tid['term_id'];

  }
  else
  {
    // If there is not a parent category!
    $insert_term_id = wp_insert_term( 'categoryone', 'category' );
    if ( ! is_wp_error )
    $term_ids[] = $insert_term_id;
  }
  wp_set_post_categories( $insert_id, $term_ids );

avatar de usuario
el alfa

Puede usar algo como esto (pegue esto en su functions.php expediente)

function category_has_parent($catid){
    $category = get_category($catid);
    if ($category->category_parent > 0){
        return true;
    }
    return false;
}

Llame a esto desde la plantilla

if(category_has_parent($tid)) {
    // it has a parent
}

Comprobar niños

function has_Children($cat_id)
{
    $children = get_terms(
        'category',
        array( 'parent' => $cat_id, 'hide_empty' => false )
    );
    if ($children){
        return true;
    }
    return false
}

Llame a esto desde la plantilla

if(has_Children($tid)) {
    // it has children
}

  • Buen código, pero ¿es posible verificar si ‘categoryone’ tiene categorías de Childe?

    – PhatToni

    28 de septiembre de 2013 a las 9:32

  • Sí, definitivamente, espera.

    – El alfa

    28 de septiembre de 2013 a las 9:33

avatar de usuario
M Khalid Junaid

Puedes usar el obtener_categoría() para obtener los detalles de la categoría actual pasando term_id

$tid = term_exists('categoryone', 'category', 0);
$t_details=get_category($tid);
if(!empty($t_details->parent)){
echo $t_details->parent; // parent category id or $t_details->category_parent
}

obtener_categoría() devuelve el objeto como el siguiente tomado del sitio de referencia

stdClass Object
(
    [term_id] => 85
    [name] => Category Name
    [slug] => category-name
    [term_group] => 0
    [term_taxonomy_id] => 85
    [taxonomy] => category
    How to check if a category has a parent category? => 
    [parent] => 70
    [count] => 0
    [cat_ID] => 85
    [category_count] => 0
    [category_description] => 
    [cat_name] => Category Name
    [category_nicename] => category-name
    [category_parent] => 70
)

EDITAR Para obtener las categorías secundarias que puede utilizar obtener_categorías() pasando la matriz de argumentos.

padre

(entero) Muestra solo las categorías que son descendientes directos (es decir, solo niños) de la categoría identificada por su ID

$args=array('parent'=>$tid);
$child_categories=get_categories($args);

  • Súper como tu código! ¿Es posible verificar si ‘categoryone’ tiene categorías de Childe?

    – PhatToni

    28 de septiembre de 2013 a las 9:27

Bueno, puedes usar get_category_parents() (eche un vistazo al enlace para leer los argumentos, etc.). Esto devolverá una lista de todos los padres en orden jerárquico. En ese caso, si solo desea la categoría principal más inmediata, podría hacer algo como esto:

<?php 
 $parent_cats = get_category_parents( $cat, false, ',' ); 
 $parent_cat = explode(",", $parent_cats); 
 echo $parent_cat[0];    
?>

Esto hará eco de la primera categoría principal (la que está directamente arriba de su categoría actual).

Para ser claro:

en get_category_parents()

– arg 1 es la identificación de la categoría (acabo de usar $cat arbitrariamente)
– arg 2 es si desea que wp agregue un enlace a cada categoría principal devuelta
– arg 3 es el delimitador utilizado para separar las categorías devueltas, si las hay

en explode()

– arg 1 es el delimitador a buscar para separar la cadena en una matriz
– arg 2 es la cadena de origen para separar

¡Feliz codificación!

  • Genial, código… ¿Es posible verificar si ‘categoryone’ tiene categorías Childe?

    – PhatToni

    28 de septiembre de 2013 a las 9:25

Use el código a continuación para verificar los padres y los hijos de una categoría.

$term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) ); // get current term

$parent = get_term($term->parent, get_query_var('taxonomy') ); // get parent term

$children = get_term_children($term->term_id, get_query_var('taxonomy')); // get children

if(($parent->term_id!="" && sizeof($children)>0)) {

   // has parent and child

}elseif(($parent->term_id!="") && (sizeof($children)==0)) {

   // has parent, no child

}elseif(($parent->term_id=="") && (sizeof($children)>0)) {

   // no parent, has child

}

avatar de usuario
jose bradley

@M Khalid Junaid

Para ampliar su respuesta, utilicé la base de su código para verificar si la categoría no tiene padres y es un elemento de nivel superior en una jerarquía de categoría/taxonomía. Incluyo esto porque es lo que estaba buscando cuando encontré este hilo y tal vez alguien más esté haciendo lo mismo.

<?php
$args = array( 
    'taxonomy' = 'categories'; // If using custom post types, type in the custom post type's name
);

$terms = get_terms( $args );

foreach ( $terms as $term ) {
    $has_parent = $term->parent;
    $name = $term->name;

    // If it doesn't have parents...
    if ( !$has_parent ) {

        // ...then it's the top tier in a hierarchy!
        echo "Tier 1:" $name . '<br />';

    }
}
?>

Producción

Nivel 1: Nombre de categoría
Nivel 1: Otro nombre de categoría
Nivel 1: todas las categorías de nivel superior

avatar de usuario
marcos di paolo

$queried = $wp_query->get_queried_object();
    if ($queried->category_parent) {
        // category has parent
    }

avatar de usuario
Bishwas Shrestha

En primer lugar, obtenga todos los términos bajo su taxonomía ‘taxonomy_name’ y luego verifique que cada uno de ellos tenga padre o no. Pruebe el siguiente código

<?php
$service_terms= get_terms( array(
    'taxonomy' => 'taxonomy_name'
) );
?>
<?php if(!empty($service_terms)) : ?>
   <?php foreach($service_terms as $term) : ?>
        <?php $has_parent = $term->parent; ?>
        <?php if (!$has_parent): ?>
                      <!-- If this term is a parent then put your code here -->
        <?php endif ?>
   <?php endforeach ?>
<?php endif ?>

¿Ha sido útil esta solución?