¿Mostrar todas las subcategorías de una categoría específica?

30 may 2013, 12:47:47
Vistas: 75.6K
Votos: 9

Necesito mostrar todas las subcategorías usando

$product_category = wp_get_post_terms( $post->ID, 'product_cat' );

actualmente uso:

<?php 

// Hacemos global la variable post
global $post;

// Obtenemos los términos de la categoría de producto
$terms = get_the_terms( $post->ID, 'product_cat', 'hide_empty=0'  );
foreach ( $terms as $term ){
    $category_id = $term->term_id;
    $category_name = $term->name;
    $category_slug = $term->slug;

    echo '<li><a href="'. get_term_link($term->slug, 'product_cat') .'">'.$category_name.'</a></li>';
}   

?>

Está bien pero solo muestra la categoría padre y una sola subcategoría...

¿Cómo puedo arreglarlo?

0
Todas las respuestas a la pregunta 2
13
22

Prueba algo como esto:

por ID

function woocommerce_subcats_from_parentcat_by_ID($parent_cat_ID) {
    $args = array(
       'hierarchical' => 1,
       'show_option_none' => '',
       'hide_empty' => 0,
       'parent' => $parent_cat_ID,
       'taxonomy' => 'product_cat'
    );
  $subcats = get_categories($args);
    echo '<ul class="wooc_sclist">';
      foreach ($subcats as $sc) {
        $link = get_term_link( $sc->slug, $sc->taxonomy );
          echo '<li><a href="'. $link .'">'.$sc->name.'</a></li>';
      }
    echo '</ul>';
}

por NOMBRE

function woocommerce_subcats_from_parentcat_by_NAME($parent_cat_NAME) {
  $IDbyNAME = get_term_by('name', $parent_cat_NAME, 'product_cat');
  $product_cat_ID = $IDbyNAME->term_id;
    $args = array(
       'hierarchical' => 1,
       'show_option_none' => '',
       'hide_empty' => 0,
       'parent' => $product_cat_ID,
       'taxonomy' => 'product_cat'
    );
  $subcats = get_categories($args);
    echo '<ul class="wooc_sclist">';
      foreach ($subcats as $sc) {
        $link = get_term_link( $sc->slug, $sc->taxonomy );
          echo '<li><a href="'. $link .'">'.$sc->name.'</a></li>';
      }
    echo '</ul>';
}

Fuente/inspiración

Edición:

Código completado, probado, ver comentarios

30 may 2013 13:43:29
Comentarios

Gracias, pero no sé cómo poner ese código en el mío, de todos modos encontré este código:

[http://wordpress.stackexchange.com/questions/73795/how-to-split-the-categories-of-subcategories-with-thumbnails]

pero muestra todas las categorías, necesito solo una categoría seleccionada con sus subcategorías

Yhis Yhis
30 may 2013 13:51:48

Gracias amigo, copié y pegué el código en mi woocommerce-template.php en la parte donde lo necesito, pero muestra todas las categorías y ninguna subcategoría; por favor mira el enlace que publiqué arriba, debería ser así pero con solo una categoría y sus subcategorías

Yhis Yhis
30 may 2013 14:20:06

Eché un vistazo rápido al código de las preguntas que enlazaste. Lo que buscas hacer es solo lo que está asociado a $sub_cats = get_categories( $args2 ) y la parte de $args2 = array( ... ), pero dicho esto, lo que sugerí es prácticamente lo mismo. Así que no estoy realmente seguro de por qué no te funciona.

Nicolai Grossherr Nicolai Grossherr
30 may 2013 14:36:35

si elimino function woocommerce_subcats_from_parentcat($parent_cat) { funciona, pero solo muestra las categorías principales, no las subcategorías, si copio y pego tu código tal cual, aparece en blanco, nada.

Yhis Yhis
30 may 2013 14:49:55

Ok, muestra las subcategorías y no la categoría principal, pero solo si pongo '23', con '21' aparece todo en blanco.. gracias por tu ayuda, si pudieras arreglar este último pequeño bug sería genial para mí

Yhis Yhis
30 may 2013 15:27:46

ok funciona, solo necesito mostrar la categoría principal encima de las subcategorías: CATEGORÍA PRINCIPAL - sub cat - sub cat

Yhis Yhis
30 may 2013 15:54:50

ok, amigo mío, ¡todo funciona perfectamente! ¡muchas gracias!! solo una pequeña pregunta: ¿es posible mostrar siempre la categoría principal cuando hago clic en una subcategoría?

Yhis Yhis
30 may 2013 16:09:55

ciertamente es posible, pero me parece una pregunta, hazla correctamente; esto podría ayudarte: http://wordpress.stackexchange.com/questions/56784/get-main-parent-categories-for-a-product

Nicolai Grossherr Nicolai Grossherr
30 may 2013 16:36:26

sí, probablemente sea la mejor solución, pero ¿cómo puedo llamar a estas dos funciones en mi página?

Yhis Yhis
30 may 2013 16:39:38

de todos modos, el problema persiste: woocommerce_subcats_from_parentcat_by_ID($parent_cat_ID) muestra solo subcategorías, y woocommerce_subcats_from_parentcat_by_NAME($parent_cat_NAME) muestra solo TODAS las categorías principales sin subcategorías.

Yhis Yhis
30 may 2013 16:48:49

Necesito que se muestre PRINCIPAL->sub y al hacer clic en una subcategoría debería mantenerse igual 'PRINCIPAL->sub'. Necesito que este tipo de menú no cambie si hago clic en PRINCIPAL o en una subcategoría

Yhis Yhis
30 may 2013 16:51:42

En primer lugar, ambas funciones funcionan perfectamente para mí, quizás estés usando alguna de ellas incorrectamente. En segundo lugar, deberías poder lograr el comportamiento deseado con la información aquí y en la pregunta enlazada arriba. ¡Buena suerte!

Nicolai Grossherr Nicolai Grossherr
30 may 2013 16:56:27

Gracias por esto :)

Adrian Adrian
18 dic 2020 17:18:57
Mostrar los 8 comentarios restantes
1

Aquí está el código que me funcionó en una plantilla de página (mi ID padre era 7):

<?php $wcatTerms = get_terms('product_cat', array('hide_empty' => 0, 'orderby' => 'ASC', 'parent' => 7, )); 
        foreach($wcatTerms as $wcatTerm) : 
        $wthumbnail_id = get_woocommerce_term_meta( $wcatTerm->term_id, 'thumbnail_id', true );
        $wimage = wp_get_attachment_url( $wthumbnail_id );
    ?>
    <div><a href="<?php echo get_term_link( $wcatTerm->slug, $wcatTerm->taxonomy ); ?>">
    <?php if($wimage!=""):?><img src="<?php echo $wimage?>" class="aligncenter"><?php endif;?></a>
    <h3 class="text-center"><a href="<?php echo get_term_link( $wcatTerm->slug, $wcatTerm->taxonomy ); ?>"><?php echo $wcatTerm->name; ?></a></h3>
    </div>
    <?php endforeach; ?> 
11 dic 2014 04:27:10
Comentarios

Una forma más simple de la respuesta de @mikes sin la opción de imagen - puede reemplazar las líneas 6-10 con: <a href="<?php echo get_term_link( $wcatTerm->slug, $wcatTerm->taxonomy ); ?>"><?php echo $wcatTerm->name; ?></a>

Jon Jon
27 may 2015 15:14:31