WordPress benutzerdefinierte Post Kategorien und Unterkategorien auf category.php

Ich habe benutzerdefinierte “Produkte” mit Standart-Kategorien und Unterkategorien. Jetzt muss ich eine Liste von Produkten auf der Kategorieseite anzeigen, die diese aktuelle Kategorie enthält.

Wenn die Kategorie keine Unterkategorien hat, muss ich Folgendes anzeigen:

 

Und wenn die Kategorie Unterkategorien enthält, wird dies angezeigt:

 Subcat 1  Subcat 2  

Wie kann ich meine categories.php anpassen, um meinen Fall zu erledigen? Danke im Voraus!

Solutions Collecting From Web of "WordPress benutzerdefinierte Post Kategorien und Unterkategorien auf category.php"

Dank an alle! Hier ist meine Lösung, die gut funktioniert

 < ?php $cat = get_query_var('cat'); $categories = get_categories('parent='.$cat.''); if(isset($categories) && !empty($categories)){ foreach ($categories as $category) { ?> < ?php echo $category->name; ?> < ?php $prods = new WP_query(); $prods->query('post_type=products&cat=' . $category->cat_ID . ''); ?> < ?php if($prods->have_posts()) { ?>  < ?php } ?> < ?php } } else { global $query_string; // basic query parameters query_posts( $query_string.'&post_type=products'); // basic query + self parameters if( have_posts() ) { ?>   < ?php } else echo "

No entries."; } ?>

Versuchen Sie Folgendes: Es sollte funktionieren und Sie können die Abfrageargumente nach Ihren Bedürfnissen bearbeiten. Kopieren Sie Code mit korrekten html Tags und es sollte funktionieren. Überprüfen Sie, und wenn es funktioniert, werde ich versuchen, es sauberer zu machen.

  < ?php $this_category = get_category($cat); $cats=get_categories(array('hide_empty' => '0', 'parent'=>$this_category ->cat_ID,'order'=> 'ASC','depth'=> '1')); if(!empty($cats)){ foreach ($cats as $cat) { $newargs = array( 'tax_query' => array( array( 'taxonomy' => 'category', 'field' => 'name', 'terms' => $cat->name, ) ) ); echo'
'; echo ''.$cat->name.''; $nopostsparent= new wp_query( $newargs ); if ($nopostsparent->have_posts()) { echo '
'; } } }else{ $newargs = array( 'tax_query' => array( array( 'taxonomy' => 'category', 'field' => 'name', 'terms' => $this_category->name, ) ) ); $nopostsparent= new wp_query( $newargs ); if ($nopostsparent->have_posts()) { echo ''; } } ?>

Sobald Sie die primäre Kategorie haben (diejenige, die in die Vorlage categories.php geladen wurde), können Sie die function get_term_children() , um alle get_term_children() .

Es wird false oder ein leeres Array zurückgeben, wenn es keine untergeordneten Elemente hat. Im folgenden Beispiel ging ich davon aus, dass die Taxonomie Ihres Produkts ” products_categories lautet.

 < ?php $term = ; $term_children = get_term_children($term->term_id, 'products_categories'); if(!empty($term_children)): foreach($term_children as $child): // Magic for subcategories template endforeach; else: // Magic in case there is no subcategories endif; ?> 

In jedem Szenario müssen Sie dann eine neue WP_Query mit $child->term_id oder $term->term_id .

Beachten Sie, dass ein Produkt, wenn es in zwei Unterkategorien verfügbar ist, zweimal auf derselben Seite angezeigt wird.

Siehe Codex als Referenz: https://codex.wordpress.org/Function_Reference/get_term_children

BEARBEITEN

Um die aktuelle Kategorie (in der Vorlage category.php ) zu laden, um das aus meinem ersten Beispiel zu ersetzen, sollten Sie dieses Snippet verwenden können:

 < ?php $termTitle = single_cat_title( '', false ); $termId = get_cat_ID($termTitle); $term = get_term($termId, 'products_categories'); ?> 

Habe ein paar Ideen für deine Anforderung. Überprüfen Sie den folgenden Code … Vergessen Sie nicht, Taxonomie und benutzerdefinierten Post-Typ zu aktualisieren.

 $parent= get_queried_object()->term_id; $taxonomy = get_categories('child_of='.$parent. '&hide_empty=0&echo=0&taxonomy=custom_taxonomy'); if(count($taxonomy) > 0){ foreach ( $taxonomy as $row ) { echo ''.$row->name.''; if(count($child)==$i){ echo ''; } } }else{ echo ''; }