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.
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.
Um ein Widget nur auf bestimmten Seiten anzuzeigen, auf denen alle Ihre Seiten dieselbe Seitenleiste haben, können Sie eines der folgenden Plugins verwenden:
Verstecken Sie einfach Widgets auf bestimmten Seiten. Fügt jedem Widget Kontrollkästchen hinzu, um es auf jeder Site-Seite anzuzeigen oder auszublenden.
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.