Suchen Sie nach einer Möglichkeit, Sidebars dynamisch zu erstellen und Seiten oder Beiträgen zuzuordnen? Es gibt wahrscheinlich ein Plugin dafür, aber wir haben einen schnellen Code-Schnipsel erstellt, den Sie verwenden können, um Sidebars dynamisch zu erstellen und Seiten oder Beiträgen zuzuordnen.
Mit diesem Schnipsel können Sie ganz einfach neue Sidebars erstellen, indem Sie einfach den Namen zu einem Array hinzufügen. Sie können auch die dynamisch erstellte Sidebar definieren, die eine Seite lädt, indem Sie aus dem Metabox zur Auswahl der benutzerdefinierten Sidebar auswählen.
Erstens wird ein neuer Metabox im Seiten-Editor erstellt, mit dem Sie eine der dynamisch erstellten Sidebars zuordnen können. Zweitens werden Sie ein Array von Namen sehen, z. B. Sidebar 01, Sidebar 02 usw. Dies sind die Namen der dynamisch erstellten Sidebars, die Sie ändern oder neue Sidebars hinzufügen können.
Anweisungen:
Alles, was Sie tun müssen, ist, diesen Code zu Ihrer functions.php-Datei oder einem websitespezifischen Plugin hinzuzufügen
$dynamic_widget_areas = array(
/* rename or create new dynamic sidebars */
"Sidebar 01",
"Sidebar 02",
"Sidebar 03",
"Sidebar 04",
"Sidebar 05",
"Sidebar 06",
"Sidebar 07",
"Search Template",
);
if ( function_exists('register_sidebar') ) {
foreach ($dynamic_widget_areas as $widget_area_name) {
register_sidebar(array(
'name'=> $widget_area_name,
'before_widget' => '<div id="%1$s" class="widget %2$s left half">',
'after_widget' => '</div>',
'before_title' => '<h3 class="widgettitle">',
'after_title' => '</h3>',
));
}
}
add_action("admin_init", "sidebar_init");
add_action('save_post', 'save_sidebar_link');
function sidebar_init(){
add_meta_box("sidebar_meta", "Sidebar Selection", "sidebar_link", "page", "side", "default");
}
function sidebar_link(){
global $post, $dynamic_widget_areas;
$custom = get_post_custom($post->ID);
$link = $custom["_sidebar"][0];
?>
<div class="link_header">
<?
echo '<select name="link" class="sidebar-selection">';
echo '<option>Select Sidebar</option>';
echo '<option>-----------------------</option>';
foreach ( $dynamic_widget_areas as $list ){
if($link == $list){
echo '<option value="'.$list.'" selected="true">'.$list.'</option>';
}else{
echo '<option value="'.$list.'">'.$list.'</option>';
}
}
echo '</select><br />';
?>
</div>
<p>Select sidebar to use on this page.</p>
<?php
}
function save_sidebar_link(){
global $post;
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {return $post->ID;}
update_post_meta($post->ID, "_sidebar", $_POST["link"]);
}
add_action('admin_head', 'sidebar_css');
function sidebar_css() {
echo'
<style type="text/css">
.sidebar-selection{width:100%;}
</style>
';
}
Kopieren Sie den folgenden Code-Schnipsel und ersetzen Sie den gesamten Code in Ihrer sidebar.php-Vorlage Ihres WordPress-Themes, und Sie sind bereit.
<!-- begin sidebar -->
<div id="sidebar">
<?
global $post;
$custom = get_post_custom($post->ID);
$link = $custom["_sidebar"][0];
if($link != ''){
echo '<ul id="widgets">';
if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar($link) ) :
endif;
echo '</ul>';
}
?>
</div>
<!-- end sidebar -->
Hinweis: Wenn Sie zum ersten Mal Code-Schnipsel in WordPress hinzuf ilde{A}gen, lesen Sie bitte unseren Leitfaden, wie Sie Code-Schnipsel richtig in WordPress kopieren / einf ilde{A}gen, damit Sie Ihre Website nicht versehentlich besch ilde{A}digen.
Wenn Ihnen dieser Code-Schnipsel gefallen hat, sollten Sie sich unsere anderen Artikel auf der Website ansehen, wie z. B.: 10 beste WordPress-Plugins für Webentwickler und So erstellen Sie ein mehrseitiges Formular in WordPress.
ändern Sie Ihren Code.
Hallo Kevin,
Danke für den Code. Ich brauche Hilfe. Ich möchte die 2. Sidebar unter der 1. anzeigen. Wie kann ich das machen?? Bitte helfen Sie mir!!!
Hallo Kevin
Die Dropdown-Box funktioniert in WordPress 3.8 nicht. Irgendwelche Ideen?
Hallo Kevin.
Ich bin neu hier und brauche ein wenig Hilfe. Ich installiere dieses Plugin, habe aber Probleme mit CSS, irgendwelche Tipps?
Übrigens ist dieses Plugin großartig!
Wenn jemand Probleme hat, dass die Sidebar nicht angezeigt wird, versuchen Sie stattdessen dies für Teil 2:
post->ID; $link = get_post_meta($postid, ‘_sidebar’, true); if($link != ”){ echo ”; if (function_exists(‘dynamic_sidebar’) && dynamic_sidebar(($link))) :endif; echo ”; } wp_reset_query(); ?>
alles funktioniert super,
aber es scheint, dass Sie nicht wissen, welche Sidebar ausgewählt ist, wenn Sie zu Ihrer Seite zurückkehren. Habe ich es falsch implementiert? Oder gibt es eine einfache Möglichkeit, das Dropdown-Menü vorauszuwählen, wenn die Sidebar dieser Seite ausgewählt ist?
Danke
Hinweis: Undefinierter Index: _sidebar in /home/
Ich erhalte diese Fehlermeldung in der Sidebar in archive.php und in Seiten, Beiträgen ohne ausgewählte Sidebar.
Debug wird nicht übergeben. Irgendwelche Ideen?
Hallo Freunde,
Ich benutze den Code in meiner Diplomarbeit. Alles sieht für mich großartig aus, bis auf eine Sache.
Ich habe „Sidebar 01“ in „Product 01“ umbenannt und es wurde auch in meinem Beitragsbearbeitungsbereich geändert, aber im Widget-Bereich wird immer noch Sidebar 01 und entsprechend angezeigt. Kann mir jemand helfen, damit der Name im Widget-Bereich auch geändert werden kann?? Danke & Grüße.
Danke dafür, hat mir den Tag gerettet lol, ein Problem ist, dass es nur in Beitrag oder Seite und nicht in Beitrag und Seite erscheint, ich habe es gelöst, indem ich Folgendes zur sidebar_init-Funktion hinzugefügt habe:
add_meta_box("sidebar_meta", "Sidebar-Auswahl", "sidebar_link", "page", "side", "default");Ich würde es jedoch gerne etwas dynamischer gestalten, anstatt die Anzahl der erstellten Sidebars vordefiniert festzulegen, dem Admin-Benutzer die Eingabe einer Anzahl von Sidebars zu ermöglichen, die dann in der Dropdown-Liste angezeigt werden. Irgendwelche Ideen, wie das geht?
Danke für diesen tollen Schnipsel.
Ich überlege, dies in ein Plugin zu verwandeln, damit die Leute eine Admin-Oberfläche zum Erstellen neuer Sidebars haben können.
Daniel, könntest du einen größeren Schnipsel davon posten? Ich habe den obigen Code in mein Theme implementiert, aber ich war mir nicht sicher, wo deine Ergänzung hingehört… ist das Teil der sidebar.php-Datei oder der functions-Datei?
Frage…
Muss es eine gewisse Bereinigung geben, damit dies aus Sicherheitsgründen zu einem Theme hinzugefügt werden kann?
Hallo, danke für diesen Schnipsel. Wie kann ich die Auswahl zu Kategorien hinzufügen?
Wenn ich das richtig verstehe, meinst du, Sidebars basierend auf der Kategorie zuzuweisen?
Ich bin sehr zufrieden mit diesem Beitrag & sehr nützlich, besonders für mich. Ich hoffe, er ist auch für andere WordPress-Benutzer nützlich. Tolle Arbeit von dir, lieber Kevin Chard. Danke
Kein Problem, ich freue mich zu hören, dass dir der Schnipsel gefällt.
hmm, ich kann das Problem nicht lösen. Ich erhalte immer die folgende Fehlermeldung: „Undefined index: _sidebar in [THEME_PATH]/functions.php on line 97“
Die Auswahlbox wird auf der Bearbeitungsseite angezeigt, aber keine der im Array erstellten Sidebars erscheint im Dropdown-Menü. Irgendwelche Ideen, wie man das beheben kann?
Hallo Chris,
Stellen Sie sicher, dass Ihre Sidebar leer ist. Verwenden Sie einfach den Code, den ich oben gepostet habe. _sidebar ist der Ort, an dem die Informationen gespeichert werden. Wo wird der Fehler angezeigt? Ist es auf der Editorseite oder wenn Sie versuchen, Ihre functions.php zu speichern?
Kevin,
Vielen Dank für Ihre Antwort. Wenn ich die „Seite bearbeiten“-Ansicht aufrufe, wo die Meta-Box hinzugefügt wurde, werden die Sidebars, die ich im „$dynamic_widget_areas“-Array gespeichert habe, nicht als Option in der Dropdown-Box „Sidebar-Auswahl“ angezeigt. Stattdessen erhalte ich die folgenden Fehler in meinem Debug-Log:
„Undefined index: _sidebar in [THEME_PATH]/functions.php on line 110“
„PHP Warning: Invalid argument supplied for foreach() in [THEME_PATH]/functions.php on line 118“
Wenn ich eine Seite aufrufe, die eine Sidebar anzeigen soll, erhalte ich auch diesen Fehler:
„Undefined index: _sidebar in [THEME_PATH]/sidebar.php on line 17“
Ich habe Ihren obigen Code nicht verändert, und ja, ich füge sie an den richtigen Stellen ein. Jede Hilfe wird sehr geschätzt!
hhmmm Chris, das ist seltsam. Haben Sie vielleicht ein Plugin, das Probleme mit diesem Code verursachen könnte? Oder anderen Code in der functions.php? Wenn Sie immer noch Probleme haben, werde ich es als Plugin einrichten, das Sie herunterladen können, um zu sehen, ob das die Dinge löst.
Hallo nochmal,
Es tut mir leid, ich habe auf meinem lokalen Rechner gearbeitet. Ich habe versucht, es auf mein Hosting hochzuladen, und es hat ohne Probleme funktioniert. Haben Sie eine Ahnung, warum es auf Wampserver nicht funktioniert.
Und wo kann der WordPress-Admin eine neue Sidebar hinzufügen? Nur aus diesem Array oder gibt es eine Option „Neue Sidebar hinzufügen“ auf dem Vorschaufenster? Ich konnte keine solche Hinzufügen-Option sehen.
Vielen Dank nochmals für Ihre großartigen Snippets.
Hakan
Hallo Hakan, ich freue mich zu hören, dass Sie die Dinge zum Laufen gebracht haben, obwohl es ehrlich gesagt sehr seltsam ist, dass es lokal nicht funktioniert. Ich bin mir nicht sicher, warum. Bezüglich der Aktualisierung müssen Sie derzeit immer noch das Array aktualisieren. Obwohl ich aufgrund des Feedbacks, das ich erhalte, die Dinge vielleicht aufbereiten und in Zukunft als Plugin mit einer Admin-Oberfläche veröffentlichen werde.
Nochmals vielen Dank, Hakan, ich freue mich, dass Ihnen die Snippets gefallen.
Hallo Kevin,
Es tut mir leid, aber das Ergebnis ist dasselbe. Keine Änderung. In meinem Admin-Bereich erhalte ich:
‘; echo ”; echo ”; foreach ( $dynamic_widget_areas as $list ){ if($link == $list){ echo ”; }else{ echo ”; } } echo ‘
‘; ?>Wählen Sie die Sidebar, die auf dieser Seite verwendet werden soll.
unter dem Teil „Sidebar-Auswahl“ auf der rechten Seite und auf der Vorschauseite erhalte ich:
ID); $link = $custom[“_sidebar”][0]; if($link != ”){ echo ”; if ( !function_exists(‘dynamic_sidebar’) || !dynamic_sidebar($link) ) : endif; echo ”; } ?>
Tolle Idee. Ich musste separate Seiten für Seitenleisten-Vorlagen oder einfach separate Vorlagen für meine Website erstellen, da ich dazu neigte, viele Seitenleisten zu verwenden (im Grunde benutzerdefinierte Seitenleisten für jede von mir erstellte Seite). Ich finde es großartig für A/B-Tests und fortgeschrittenes Marketing (spezifische CTAs in der Seitenleiste, die mit bestimmten Seiten verknüpft sind). Danke! 🙂
Hallo Antonin
Ich freue mich zu hören, dass es dir gefällt. Ich habe vor einiger Zeit nur über die erste Hälfte gepostet, um den Teil mit den Seitenleisten mithilfe des Arrays zu erstellen. Als ich dann an einem Theme arbeitete, musste ich sie anhängen, und da kam mir diese Idee.
Hallo Kevin,
Wenn ich deinen Code anwende, sehe ich
“‘; echo ”; echo ”; foreach ( $dynamic_widget_areas as $list ){ if($link == $list){ echo ”; }else{ echo ”; } } echo ‘
‘; ?>
Seitenleiste zur Verwendung auf dieser Seite auswählen.”
in der Seitenleiste meiner Seite unter „Seitenleistenauswahl“
Hast du eine Idee dazu?
Hallo Hakan, siehst du den Code innerhalb der Seite?
Hallo Hakan,
Ich habe den ersten Teil hochgeladen, damit er wie ein Plugin funktioniert. Das ist vielleicht einfacher für dich einzurichten.
http://wpsnipp.com/wp-content/uploads/2011/11/sidebars.php_.zip
Öffne das Zip und lade diese Datei in deinen Plugins-Ordner hoch, dann ersetze deinen Seitenleisten-Code durch den zweiten Code oben. Vergiss nicht, das Plugin namens „attach sidebars“ zu aktivieren. Ich hoffe, das hilft.
Hast du das für WordPress veröffentlicht? Wenn ja, schick mir einen Link über Twitter (@antjanus), ich werde einen Artikel darüber schreiben (und es jedem empfehlen 🙂 ).
Als Plugin ist es begrenzt. Ich dachte, der Grund für Hakans Problem sei nur die Position in der functions.php-Datei, also habe ich es nur zu einem Plugin gemacht, um sein Problem schneller zu lösen. Es benötigt eine Art Benutzeroberfläche, damit Leute neue Seitenleisten hinzufügen können, bevor ich es als Plugin veröffentlichen kann, da das Array nicht praktikabel ist.
Guter Punkt. Lass es mich wissen, wenn du es fertig hast (oder wenn du es am Ende doch machst) 🙂