WordPress WooCommerce muestra la categoría de productos anidados para productos individuales

3 minutos de lectura

Tengo un sitio de WordPress WooCommerce que vende piezas de automóviles. Para cada parte (producto) he creado Categorías de productos únicas que puedo asignar a la parte. Por ejemplo, un faro (pieza) puede ser de un Alfa Romeo 156 1.1 Manual de gasolina azul de 3 puertas de 1999.

En la página del producto individual, quiero mostrar una lista anidada de solo las categorías de productos asociadas con ESTA parte. Entonces, cuando etiqueto una parte, tendré una vista anidada como la imagen a continuación.
ingrese la descripción de la imagen aquí

Sin embargo, mi código actual debajo de la segunda imagen muestra todas las categorías de productos que tienen una parte asociada, incluida ESTA parte. Como se puede ver en la segunda imagen a continuación, tengo muchas otras partes asignadas a otras marcas de automóviles y todas se muestran para ESTA parte. Solo quiero que ESTA parte muestre las categorías de productos asociadas con ESTA parte. Por lo tanto, en Hacerlo solo debe mostrar Alfa Romeo, no todas las demás categorías de productos que tienen partes, independientemente de si están etiquetadas en ESTA parte.
ingrese la descripción de la imagen aquí

Alguien puede ayudarme porfavor?

Código actual

<?php 
    $woocCategoryTerms = get_terms('product_cat', array(
        'order'        => 'ASC',
        'hide_empty'   => true,  // (boolean) 
        'parent'       => 0,     // (integer) Get direct children of this term (only terms whose explicit parent is this value). If 0 is passed, only top-level terms are returned. Default is an empty string.
        'hierarchical' => true,  // (boolean) Whether to include terms that have non-empty descendants (even if 'hide_empty' is set to true).
        ));    

    foreach($woocCategoryTerms as $wooCategoryTerm) : 
?>
        <ul>
            <li>
                <a href="https://stackoverflow.com/questions/25998739/<?php echo get_term_link( $wooCategoryTerm -> slug, $wooCategoryTerm -> taxonomy ); ?>">
                    <?php 
                        echo $wooCategoryTerm -> name; 
                    ?>
                </a>
                <ul class="wsubcategs">
                    <?php
                        $wooSubArgs = array(
                            'hierarchical' => true,
                            'hide_empty' => true,
                            'parent' => $wooCategoryTerm -> term_id,
                            'taxonomy' => 'product_cat'
                        );

                        $wooSubCategories = get_categories($wooSubArgs);

                        foreach ($wooSubCategories as $wooSubCategory):
                    ?>
                            <li>
                                <a href="<?php echo get_term_link( $wooSubCategory -> slug, $wooSubCategory -> taxonomy );?>">
                                    <?php 
                                        echo $wooSubCategory -> name;
                                    ?>
                                </a>
                            </li>
                            <?php
                        endforeach;
                            ?>  
                </ul>
            </li>
        </ul>
        <?php 
    endforeach; 
        ?>

get_terms devuelve todos los términos para la taxonomía específica dada, y no la publicación. Tienes un par de opciones aquí, pero me gusta usar wp_list_categories de su flexibilidad. No solo funciona con categorías integradas, sino también con taxonomías personalizadas.

Aquí hay un ejemplo del códice.

<?php
$taxonomy = 'category'; //change to your taxonomy name

// get the term IDs assigned to post.
$post_terms = wp_get_object_terms( $post->ID, $taxonomy, array( 'fields' => 'ids' ) );
// separator between links
$separator=", ";

if ( !empty( $post_terms ) && !is_wp_error( $post_terms ) ) {

    $term_ids = implode( ',' , $post_terms );
$terms = wp_list_categories( 'title_li=&style=none&echo=0&taxonomy=' . $taxonomy . '&include=" . $term_ids );
$terms = rtrim( trim(  str_replace( "<br />',  $separator, $terms ) ), $separator );

// display post categories
echo  $terms;
}
?>

También puedes hacer uso de get_the_terms

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad