Holen Sie sich Woocommerce-Kategorien mit Unterkategorie

Lesezeit: 8 Minuten

Ich möchte alle Woocommerce-Kategorien im Frontend mit Unterkategorien wie diesem Ergebnis erhalten:

<ul>
    <li><a href="">Link</a>
        <ul>
            <li><a href="">Submenu link</a></li>
        </ul>
    </li>
</ul>

Hier ist, was ich habe (aber es ist nicht das, was ich will):

<?php

  $taxonomy     = 'product_cat';
  $orderby      = 'name';  
  $show_count   = 0;      // 1 for yes, 0 for no
  $pad_counts   = 0;      // 1 for yes, 0 for no
  $hierarchical = 1;      // 1 for yes, 0 for no  
  $title="";  
  $empty        = 0;

  $args = array(
         'taxonomy'     => $taxonomy,
         'orderby'      => $orderby,
         'show_count'   => $show_count,
         'pad_counts'   => $pad_counts,
         'hierarchical' => $hierarchical,
         'title_li'     => $title,
         'hide_empty'   => $empty
  );
 $all_categories = get_categories( $args );
 foreach ($all_categories as $cat) {
    if($cat->category_parent == 0) {
        $category_id = $cat->term_id;       
        echo '<li><a href="'.%20get_term_link($cat->slug,%20'product_cat')%20.'">'. $cat->name .'</a></li>';

        $args2 = array(
                'taxonomy'     => $taxonomy,
                'child_of'     => 0,
                'parent'       => $category_id,
                'orderby'      => $orderby,
                'show_count'   => $show_count,
                'pad_counts'   => $pad_counts,
                'hierarchical' => $hierarchical,
                'title_li'     => $title,
                'hide_empty'   => $empty
        );
        $sub_cats = get_categories( $args2 );
            if($sub_cats) {
                foreach($sub_cats as $sub_category) {
                    echo  '<li><a href="'.%20get_term_link($sub_category->slug,%20'product_cat')%20.'">'. $sub_category->name .'</a></li>';
                }
            }
        }       
}
?>  

Dieser Code zeigt die Kategorie und Unterkategorie, aber die Unterkategorie ist nicht dort, wo sie sein sollte, die Unterkategorie ist wie ein separater Link wie dieser:

<ul>
    <li><a href="">link</a></li>
    <li><a href="">Submenu link</a></li>
</ul>

  • Ihr Code wird hier kopiert: stackoverflow.com/questions/21009516/… Was haben Sie bisher versucht oder wo treten Probleme auf?

    – Florian Moser

    18. April 2017 um 6:28 Uhr


  • sieh dir das an – rachievee.com/…

    – Mittul bei TechnoBrave

    18. April 2017 um 6:31 Uhr

  • Überprüfen Sie dies auch einmal – wpworking.com/hacks-2/…

    – Mittul bei TechnoBrave

    18. April 2017 um 6:33 Uhr

  • stackoverflow.com/questions/41754733/…

    – Mittul bei TechnoBrave

    18. April 2017 um 6:39 Uhr

Holen Sie sich Woocommerce Kategorien mit Unterkategorie
Peyman Naeimi

Sie könnten diesen Code versuchen:

  $args = array(
          'taxonomy' => 'product_cat',
          'hide_empty' => false,
          'parent'   => 0
      );
  $product_cat = get_terms( $args );

  foreach ($product_cat as $parent_product_cat)
  {

  echo '
      <ul>
        <li><a href="'.get_term_link($parent_product_cat->term_id).'">'.$parent_product_cat->name.'</a>
        <ul>
          ';
  $child_args = array(
              'taxonomy' => 'product_cat',
              'hide_empty' => false,
              'parent'   => $parent_product_cat->term_id
          );
  $child_product_cats = get_terms( $child_args );
  foreach ($child_product_cats as $child_product_cat)
  {
    echo '<li><a href="'.get_term_link($child_product_cat->term_id).'">'.$child_product_cat->name.'</a></li>';
  }

  echo '</ul>
      </li>
    </ul>';
  }

Dies wird auf Ihrer WooCommerce, WordPress-basierten Website gedruckt.

  • Es funktioniert immer noch in WordPress 5.4.4 und Woocommerce 4.7.1. Du hast meinen Tag gerettet!

    – Felix Htoo

    4. Dezember 2020 um 19:11 Uhr

  • Es funktioniert nicht. Es werden keine Unterkatzen gedruckt

    – Karue Benson Karue

    12. Juli 2021 um 10:55 Uhr

$taxonomy     = 'product_cat';
$orderby      = 'name';  
$show_count   = 0;      
$pad_counts   = 0;      
$hierarchical = 1;      
$title="";  
$empty        = 0;

$args = array(
    'taxonomy'     => $taxonomy,
    'orderby'      => $orderby,
    'show_count'   => $show_count,
    'pad_counts'   => $pad_counts,
    'hierarchical' => $hierarchical,
    'title_li'     => $title,
    'hide_empty'   => $empty
);

$all_categories = get_categories( $args );

foreach ($all_categories as $cat) {

    if($cat->category_parent == 0) {

        $category_id = $cat->term_id;

        echo '<br /> ('. $category_id .') <a href="'.%20get_term_link($cat->slug,%20'product_cat')%20.'">'. $cat->name .'</a>';

        $args2 = array(
            'taxonomy'     => $taxonomy,
            'parent'       => $category_id,
            'orderby'      => $orderby,
            'show_count'   => $show_count,
            'pad_counts'   => $pad_counts,
            'hierarchical' => $hierarchical,
            'title_li'     => $title,
            'hide_empty'   => $empty
        );

        $sub_cats = get_categories( $args2 );

        if($sub_cats) {

            foreach($sub_cats as $sub_category) {
                echo  '<br/> > <a href="'.%20get_term_link($sub_category->slug,%20'product_cat')%20.'">'. $sub_category->name .'</a>';
                echo apply_filters( 'woocommerce_subcategory_count_html', ' (' . $sub_category->count . ')', $category );


                 $args3 = array(
            'taxonomy'     => $taxonomy,
            'parent'       =>  $sub_category->term_id,
            'orderby'      => $orderby,
            'show_count'   => $show_count,
            'pad_counts'   => $pad_counts,
            'hierarchical' => $hierarchical,
            'title_li'     => $title,
            'hide_empty'   => $empty
        );

        $sub_cats3 = get_categories( $args3 );

        if($sub_cats3) {

            foreach($sub_cats3 as $sub_category3) {
                echo  '<br/> > > <a href="'.%20get_term_link($sub_category3->slug,%20'product_cat')%20.'">'. $sub_category3->name .'</a>';
                echo apply_filters( 'woocommerce_subcategory_count_html', ' (' . $sub_category3->count . ')', $category );

            }


                 }

            }
        }
    }       
}

  • Dies sollte als richtige Antwort markiert werden

    – Karue Benson Karue

    12. Juli 2021 um 10:58 Uhr

<?php

  $taxonomy     = 'product_cat';
  $orderby      = 'name';  
  $show_count   = 0;      // 1 for yes, 0 for no
  $pad_counts   = 0;      // 1 for yes, 0 for no
  $hierarchical = 1;      // 1 for yes, 0 for no  
  $title="";  
  $empty        = 0;

  $args = array(
         'taxonomy'     => $taxonomy,
         'orderby'      => $orderby,
         'show_count'   => $show_count,
         'pad_counts'   => $pad_counts,
         'hierarchical' => $hierarchical,
         'title_li'     => $title,
         'hide_empty'   => $empty
  );
 $all_categories = get_categories( $args );
 foreach ($all_categories as $cat) {
    if($cat->category_parent == 0) {
        $category_id = $cat->term_id;       
        echo '<br /><a href="'.%20get_term_link($cat->slug,%20'product_cat')%20.'">'. $cat->name .'</a>';

        $args2 = array(
                'taxonomy'     => $taxonomy,
                'child_of'     => 0,
                'parent'       => $category_id,
                'orderby'      => $orderby,
                'show_count'   => $show_count,
                'pad_counts'   => $pad_counts,
                'hierarchical' => $hierarchical,
                'title_li'     => $title,
                'hide_empty'   => $empty
        );
        $sub_cats = get_categories( $args2 );
        if($sub_cats) {
            foreach($sub_cats as $sub_category) {
                echo  $sub_category->name ;
            }   
        }
    }       
}
?>

  • Hallo Benjamin, ich habe zwei Abfragen erstellt, eine zum Extrahieren von Kategorien und eine zum Extrahieren von Unterkategorien und auch eine benutzerdefinierte Taxonomie verwendet, damit die Postkategorien nicht mit den Kategorien von Woocommerce-Produkten vermischt werden Mit foreach können wir Kategorien und Unterkategorien anzeigen, in denen wir anzeigen möchten

    – KTrivedi

    20. Juni 2017 um 6:37 Uhr


  • Ich meinte im Text Ihrer Frage 🙂 Sie können dafür den Bearbeitungslink verwenden. Das wird dem OP helfen, es zu verstehen!

    – BenMorel

    20. Juni 2017 um 7:16 Uhr

  • hehe ja, aber ich habe dafür eine benutzerdefinierte Abfrage erstellt und lerne nur aus dem WordPress-Codex. Danke für den Vorschlag 🙂

    – KTrivedi

    20. Juni 2017 um 7:38 Uhr

Um alle Kategorien zu erhalten und die Hierarchie beizubehalten, müssen Sie eine rekursive Funktion verwenden. Bedenken Sie, dass Sie die folgende Hierarchie der Woocommerce-Kategorien haben: (Kategoriename, übergeordnetes Element)

Kleidung 0

—Zubehör 127

——Parfum 130

——— Paris 141

—Kapuzenpullover 127

—T-Shirts 127

Dekor 0

Musik 0

Nicht kategorisiert 0

Schreiben Sie eine Funktion, um nur die übergeordneten Kategorien zu erhalten:

function getparentcategories()
    {
        $taxonomy     = 'product_cat';
        $orderby      = 'name';
        $show_count   = 0;      
        $pad_counts   = 0;      
        $hierarchical = 1;      
        $title="";
        $empty        = 0;

        $args = array(
            'taxonomy'     => $taxonomy,
            'orderby'      => $orderby,
            'show_count'   => $show_count,
            'pad_counts'   => $pad_counts,
            'hierarchical' => $hierarchical,
            'title_li'     => $title,
            'hide_empty'   => $empty
        );

        $all_categories = get_categories( $args );
        return $all_categories;
    }

Schreiben Sie dann eine zweite rekursive Funktion, um die Unterkategorie jedes übergeordneten Elements abzurufen, und übergeben Sie als Referenz ein zweidimensionales Array, um die Kategorie und ihre Ebene zu speichern:

function getcatsubs($items,&$arg,$level=0)
    {
        $taxonomy     = 'product_cat';
        $orderby      = 'name';
        $show_count   = 0;
        $pad_counts   = 0;
        $hierarchical = 1;
        $title="";
        $empty        = 0;

        if($items) {
            $category_id = $items->term_id;
            $args = array(
                'taxonomy' => $taxonomy,
                'child_of' => 0,
                'parent' => $category_id,
                'orderby' => $orderby,
                'show_count' => $show_count,
                'pad_counts' => $pad_counts,
                'hierarchical' => $hierarchical,
                'title_li' => $title,
                'hide_empty' => $empty
            );
            $sub_cats = get_categories($args);
            if($sub_cats)
            {
                foreach ($sub_cats as $sub)
                {
                    $category_id = $sub->term_id;
                    $args2 = array(
                        'taxonomy' => $taxonomy,
                        'child_of' => 0,
                        'parent' => $category_id,
                        'orderby' => $orderby,
                        'show_count' => $show_count,
                        'pad_counts' => $pad_counts,
                        'hierarchical' => $hierarchical,
                        'title_li' => $title,
                        'hide_empty' => $empty
                    );
                    array_push($arg[0],$sub);
                    array_push($arg[1],$level);
                    static::getcatsubs($sub,$arg,$level+1);
                }
            }
            else
            {
                return;
            }
        }
        else
        {
            return;
        }
    }

Führen Sie den folgenden Code aus, um die Hierarchie der Kategorien wie oben gedruckt zu erhalten:

$cats=getparentcategories();
foreach ($cats as $cat)
{
    if($cat->parent==0) {
        echo "<p>$cat->name $cat->parent</p>";
        $arg=[[],[]];
        getcatsubs($cat,$arg);
        if ($arg[0]) {
            $l=0;
            foreach ($arg[0] as $scat) {
                $i=$arg[1][$l];
                echo "<p>---";
                for ($x=0;$x<$i;$x++)
                    echo "---";
                echo "$scat->name $scat->parent</p>";
                $l++;
            }
        }
    }
}

Holen Sie sich Woocommerce Kategorien mit Unterkategorie
Diego Aquino

Basierend auf Peymans Antwort können Sie eine rekursive Funktion verwenden, wenn Sie Unterkategorien in anderen Unterkategorien haben:

function get_wc_categories(int $parent = 0): string {

    $text="<ul>";

    $args = array(
        'taxonomy' => 'product_cat',
        'hide_empty' => false,
        'parent'   => $parent
    );

    $product_cat = get_terms($args);

    if (empty($product_cat)) {
        return '';
    }

    foreach ($product_cat as $parent_product_cat) {

        $text .= '<li><a href="'.get_term_link($parent_product_cat->term_id).'">'.$parent_product_cat->name.'</a>';

        $text .= get_wc_categories($parent_product_cat->term_id);

        $text .= '</li>';
    }
    return $text . '</ul>';
}

Wenn Sie also die Kategorien anzeigen möchten, verwenden Sie Folgendes:

echo get_wc_categories();

  • Wenn Sie eine rekursive Lösung verwenden, sollten Sie sie nicht verwenden $child_product_cats = get_terms( $child_args ); wieder in der Mitte Ihres Codes.

    – John

    8. Dezember 2021 um 6:27 Uhr

  • Danke @John! Änderung erledigt

    – Diego Aquino

    8. Dezember 2021 um 14:44 Uhr

  • Wenn Sie eine rekursive Lösung verwenden, sollten Sie sie nicht verwenden $child_product_cats = get_terms( $child_args ); wieder in der Mitte Ihres Codes.

    – John

    8. Dezember 2021 um 6:27 Uhr

  • Danke @John! Änderung erledigt

    – Diego Aquino

    8. Dezember 2021 um 14:44 Uhr

1003810cookie-checkHolen Sie sich Woocommerce-Kategorien mit Unterkategorie

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy