¿Mostrar todas las subcategorías de una categoría específica?
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?

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>';
}
Edición:
Código completado, probado, ver comentarios

Gracias, pero no sé cómo poner ese código en el mío, de todos modos encontré este código:
pero muestra todas las categorías, necesito solo una categoría seleccionada con sus subcategorías

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

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.

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.

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í

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

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?

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

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

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.

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

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!

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; ?>
