es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Mostrar una lista dinámica de categorías hermanas y subcategorías directas de WooCommerce.

Tratando de crear una función que muestre los hermanos y los hijos de primer nivel de la categoría actual del producto. Es decir, no los hijos de los hermanos ni los hijos de los hijos.

Las categorías pueden tener una profundidad de hasta 4 niveles, necesito que la lista cambie lo que muestra dependiendo de la página actual.

Ejemplo:

  • Categoría 1
  • Categoría 2
  • Categoría 3 <- Categoría actual del producto
    • Categoría 3-1
    • Categoría 3-2
    • Categoría 3-3
    • Categoría 3-4
  • Categoría 4

  • Categoría 5

Encontré algunos mensajes donde se explica cómo mostrar los hermanos, o los hijos de primer nivel. Pero estoy intentando combinar ambos sin éxito:

  • https://stackoverflow.com/questions/63755303/get-a-list-of-siblings-term-ids-from-current-product-category-in-woocommerce

  • https://stackoverflow.com/questions/64017746/display-current-category-first-then-child-categories-in-woocommerce

¿Alguna idea? Cualquier cosa que me indique en la dirección correcta sería de ayuda.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para mostrar los hermanos y los hijos del primer nivel de la categoría de producto actual, puedes comenzar obteniendo el ID de la categoría padre y luego usando ese ID para obtener la lista de categorías hermanas. Una vez que tengas la lista de categorías hermanas, puedes recorrerlas y obtener sus respectivos hijos del primer nivel.

    Aquí tienes una función de ejemplo que puedes utilizar:

    function mostrar_hermanos_y_hijos() {
        // obtener el ID de la categoría de producto actual
        $id_categoria_actual = get_queried_object_id();
        // obtener el ID de la categoría padre
        $id_categoria_padre = wp_get_post_parent_id( $id_categoria_actual );
        // si no hay categoría padre, asumir que la categoría actual está en el nivel superior
        if ( ! $id_categoria_padre ) {
            $id_categoria_padre = $id_categoria_actual;
        }
        // obtener las categorías hermanas
        $categorias_hermanas = get_terms( array(
            'taxonomy' => 'product_cat',
            'child_of' => $id_categoria_padre,
            'exclude' => $id_categoria_actual,
        ) );
        // recorrer las categorías hermanas
        foreach ( $categorias_hermanas as $categoria_hermana ) {
            // mostrar el nombre de la categoría hermana
            echo '<h2>' . $categoria_hermana->name . '</h2>';
            // obtener los hijos del primer nivel de la categoría hermana
            $categorias_hijas = get_terms( array(
                'taxonomy' => 'product_cat',
                'parent' => $categoria_hermana->term_id,
            ) );
            // recorrer las categorías hijas
            foreach ( $categorias_hijas as $categoria_hija ) {
                // mostrar el nombre de la categoría hija
                echo '<li>' . $categoria_hija->name . '</li>';
            }
        }
    }
    

    Luego, puedes llamar a esta función donde quieras mostrar la lista de hermanos y los hijos del primer nivel, por ejemplo:

    if ( is_product_category() ) {
        mostrar_hermanos_y_hijos();
    }
    

Comments are closed.