it-swarm.com.de

Wie erstelle ich dynamisch eine Widget-Seitenleiste für jede Kategorie?

Ich möchte für jede Kategorie einen anderen Inhalt in der Seitenleiste anzeigen, aber wenn ich neue Kategorien erstelle, muss ich den Bereich dafür erstellen. Wie kann ich die Widget-Bereiche dynamisch haben?

3
Diana

Keine gute Sache, wenn Sie viele Kategorien haben, also seien Sie vorsichtig!

Fügen Sie zunächst die folgende Funktion in functions.php hinzu:

add_action( 'widgets_init', 'generate_widget_areas' );

function generate_widget_areas() {

//Do not create for uncategorized category
$terms = get_categories('exclude=1&hide_empty=0'); 

foreach ($terms as $term) {
   register_sidebar( array(
    'name' => 'Category '.$term->name,
    'id' => $term->slug.'-widget-area',
    'description' => 'Widget area for category and posts in '.$term->name,
    'before_widget' => '<li id="%1$s" class="widget-container %2$s">',
    'after_widget' => '</li>',
    'before_title' => '<h3 class="widget-title">',
    'after_title' => '</h3>'    ) );
  }
}

Dies ist genug, jetzt haben Sie in Widgets einen Widget-Bereich für jede Kategorie. Nun müssen Sie den Bereich für die Kategorie anzeigen. Ich möchte den Bereich für Kategorienlisten (Kategorienbeitragslisten) und den gleichen Bereich für Beiträge auch unter Verwendung der Kategorie (einzelne Beitragsseiten) anzeigen.

Fügen Sie in sidebar.php Folgendes hinzu:

<?php if (is_category() ||is_archive()||is_single()) : ?>
<div id="categories" class="widget-area" role="complementary">
<ul class="xoxo">
  <?php
   $category = get_the_category();
   if (in_category($category[0]->slug) || is_category($category[0]->slug)){
        dynamic_sidebar( $category[0]->slug.'-widget-area' );
    };
   ?>
</ul>
</div><!-- #categories .widget-area -->
<?php endif; ?>

Das ist alles, ich wette, jemand kann sich einen besseren Code einfallen lassen, jetzt ist dies der Trick.

3
Diana