it-swarm.com.de

Anzeigen eines bestimmten dynamischen Seitenleisten-Widgets auf einer bestimmten Seite

Ich habe eine WordPress-Seite bekommen, die mir zur Hälfte der Fertigstellung ausgehändigt wurde. Es ist mindestens ein Jahr her, dass ich WordPress das letzte Mal benutzt habe und es gibt eine Menge Dinge, die ich anders finde. Ich bin es gewohnt, unterschiedliche Inhalte auf unterschiedlichen Seiten anzuzeigen, indem ich Seitenvorlagen für jede Seite erstelle, für die eindeutige Inhalte erforderlich sind.

Ich versuche, auf einer bestimmten Seite eine andere Seitenleiste als auf dem Rest der Site anzuzeigen. Was ich vor einem Jahr getan hätte, ist, eine Seitenvorlage für diese Seite zu erstellen, eine neue Seitenleistendatei zu erstellen und dann die Seitenleistendatei in die Seitenvorlage aufzunehmen. Ich habe festgestellt, dass dies nicht funktioniert. Die Hauptschuldigen, die ich sehe, sind loop.php & loop-page.php, die in dem abgespeckten Thema, das ich normalerweise vor langer Zeit beim Erstellen einer Site verwendete, nicht existierten. Es sieht jedoch so aus, als hätte jeder, der diese Sache vor mir in die Finger bekommen hatte, das Thema „Zehnundzwanzig“ kopiert und unter einem neuen Namen geändert.

Ich habe eine neue dynamische Seitenleiste im functions.php des Themas registriert und kann sie im Abschnitt Widgets des Dashboards anzeigen und Widgets hinzufügen.

Ich kann es nicht aus Liebe zu Gott auf der Seite anzeigen lassen, auf der ich es haben möchte. Ich habe Folgendes versucht:

1.) Geben Sie der Seite eine benutzerdefinierte Vorlage template_news.php und platzieren Sie Folgendes an der Stelle, an der die Seitenleiste aufgerufen werden soll:

include ('sidebar-news.php');

Das Feld sidebar-news.php enthält den von sidebar.php kopierten Code mit der Seitenleisten-ID "News", die ich in functions.php aufgeführt habe:

<?php if ( is_active_sidebar( 'sidebar-news' ) ) : ?>

<div id="secondary" class="widget-area" role="complementary">
    <ul class="xoxo">
        <?php dynamic_sidebar( 'sidebar-news' ); ?>
    </ul>
</div>

<?php endif; ?>

Die Seitenvorlage wird auf die richtige Seite angewendet.

2.) In page.php gegangen und geändert:

<?php get_sidebar(); ?>

zu:

<?php 

if(is_page('18')) {
   include ('sidebar-news.php');
}
else {              
   get_sidebar(); 
} ?>

Ich habe auch mehrmals überprüft, ob die Seiten-ID korrekt ist, und versucht, stattdessen den Namen des Slugs zu verwenden, aber ohne Erfolg.

3.) Versuchte das vorherige in loop-page.php

4.) Platzierte die folgende bedingte Anweisung in sidebar.php:

<?php
if ( is_active_sidebar( 'sidebar-news' ) && is_page('18') ) : ?>
    <div id="sidebarnews" class="widget-area" role="complementary">
    <ul class="xoxo">
    <?php dynamic_sidebar( 'sidebar-news' ); ?>
    </ul>
    </div>
<?php endif; ?>

Nachdem ich einige Nachforschungen angestellt hatte und herausgefunden hatte, dass das Erstellen eines untergeordneten Themas der richtige Weg ist, die Funktionalität eines Themas zu erweitern oder zu ändern, habe ich versucht, dies zu tun, aber es hat dazu geführt, dass einige Dinge kaputt gehen, für die ich keine Zeit habe versuchen und beheben.

Ich habe festgestellt, dass die Standard-Seitenleiste "sidebar.php" aufgerufen und auf der Seite angezeigt wird, obwohl meine bedingte Anweisung mit der Seiten-ID vorhanden ist, werden die benutzerdefinierten Seitenleisten-Widgets nicht angezeigt.

Ich kann auch nicht feststellen, wie die Standardseitenleiste auf der Seite aufgerufen wird, da das Entfernen von get_sidebar(); in meiner benutzerdefinierten Vorlage template_news.php, page.php oder loop-page.php nichts zu bewirken scheint.

Bitte kann mir jemand mitteilen, wie ich diese Seitenleiste zur Seite hinzufügen kann.

1
biggles

Ich denke, was Sie vielleicht brauchen, ist einfach, register_sidebar() in einem 'widgets_init'-Hook auszuführen. Das TwentyTen-Design enthält Beispiele für register_sidebar() in der functions.php-Datei, aber so könnte es aussehen:

add_action( 'widgets_init', 'twentyten_widgets_init' );
function twentyten_widgets_init() {
  register_sidebar( array(
    'name' => __( 'News Sidebar', 'yoursite' ),
    'id' => 'sidebar-news',
    'description' => __( 'The News Sidebar Area', 'yoursite' ),
    'before_widget' => '<li id="%1$s" class="widget-container %2$s">',
    'after_widget' => '</li>',
    'before_title' => '<h3 class="widget-title">',
    'after_title' => '</h3>',
  ));

  /*
   * THE REST OF THE SIDEBAR REGISTRATION CODE FROM twentyten_widgets_init() GOES HERE
   */
}

Verwenden Sie außerdem in Ihrer template_news.php-Seitenvorlage den folgenden Code, um Ihre Seitenleiste aufzurufen, in der die oben erstellte sidebar-news.php-Datei geladen wird:

<?php get_sidebar( 'news' ); ?> 

Sie sollten keines der anderen Dinge benötigen, die Sie ausprobiert haben, und definitiv keine include -Anweisungen.

2
MikeSchinkel

Um ein Widget nur auf bestimmten Seiten anzuzeigen, auf denen alle Ihre Seiten dieselbe Seitenleiste haben, können Sie eines der folgenden Plugins verwenden:

Widgets anzeigen

Verstecken Sie einfach Widgets auf bestimmten Seiten. Fügt jedem Widget Kontrollkästchen hinzu, um es auf jeder Site-Seite anzuzeigen oder auszublenden.

Widget-Logik

Mit Widget-Logik können Sie mithilfe der bedingten Tags von WP steuern, auf welchen Seiten Widgets angezeigt werden. Außerdem wird ein 'widget_content'-Filter hinzugefügt.

1