Leider wird die switch_to_blog()
Methode für diesen Zweck nicht funktionieren. switch_to_blog()
ist wirklich nur ein Teilwechsel - es werden einige Änderungen an $wpdb
dieser Hilfe bei Datenbankabfragen vorgenommen. Aber es ist kein vollständiger Wechsel, wie Sie es sich vorstellen können.
Hängt insbesondere dynamic_sidebar()
von global aufgerufen ab $wp_registered_sidebars
. Diese globale wird von gefüllt register_sidebar()
, die im Allgemeinen aus einer Themendatei wie functions.php aufgerufen wird. Aber functions.php und der Rest des Theme-Setup-Prozesses werden von nicht erneut ausgeführt switch_to_blog()
. Das heißt: Wenn Sie Twenty Eleven im aktuellen Blog ausführen, werden beim Start eigene Seitenleisten registriert. Wenn Sie switch_to_blog()
ein Blog verwenden, in dem Twenty Ten ausgeführt wird , wird Twenty Ten nicht angewiesen , seine Seitenleisten einzurichten . Sie könnten versuchen, es zu erzwingen (indem Sie die Datei functions.php des Switched-Blogs manuell laden), aber dies führt mit ziemlicher Sicherheit zu einer Katastrophe, da Probleme mit doppelten Funktionsnamen, Ladereihenfolge usw. usw. auftreten.
Sie könnten einen etwas anderen Ansatz ausprobieren: Erstellen Sie im Blog mit der gewünschten Seitenleiste eine Funktion, mit der der Inhalt der Seitenleiste in den Ausgabepuffer gedruckt wird, und speichern Sie ihn vor dem Drucken auf dem Bildschirm in einer site_option. Dann können Sie die Seitenleiste (oder zumindest eine statische Version davon) von jedem Standort im Netzwerk abrufen. Dies funktioniert nicht, wenn Sie unbedingt eine vollständig dynamische Seitenleiste benötigen , für die meisten Zwecke jedoch wahrscheinlich nicht.
Eine andere Methode (die möglicherweise einfacher ist) besteht darin, die Seitenleiste mit einer Funktion in einer Mu-Plugins-Datei oder ähnlichem zu rendern und die Funktion dann manuell in Ihren Designs aufzurufen (oder sie an einen allgemeinen Seitenleisten-Hook anzuhängen). Es könnte einige Arbeit erfordern, um den Inhalt aus der WP_Widget
Architektur zu abstrahieren , aber andererseits wäre es eine wirklich dynamische Lösung für das vorliegende Problem.
get_blog_option('1','sidebars_widgets');
ich eine Liste von Widgets abgerufen habe, aber ich konnte sowieso keine finden, um die Daten in einer Seitenleiste zu verarbeiten.Bin auf das gleiche Problem gestoßen und habe eine Lösung gefunden. Was ich tue, ist das Folgende:
1.) Wenn in der Seitenleiste von Blog 1 etwas geändert wird, speichern Sie ein Array dieser Widgets und ihrer Einstellungen als vorübergehenden Übergang, der nach 24 Stunden veraltet ist.
2.) Fügen Sie in allen untergeordneten Blogs Code in sidebar.php ein, der diesen standortweiten Übergang erfasst und die Widgets anzeigt.
Klingt ziemlich einfach, war aber sehr schwer herauszufinden… und ist immer noch alles andere als perfekt.
Lassen Sie uns einen Code untersuchen:
Dies gehört in die functions.php von Blog 1 (oder besser ein Plugin insgesamt) und speichert die Widgets alle 24 Stunden in dem maßgeschneiderten Transienten.
Dies gehört auch in die Datei functions.php von Blog 1 und erneuert den Übergang jedes Mal, wenn die Widgets aktualisiert werden.
Und schließlich für die anderen Blogs in sidebar.php:
Hoffe, das kann jemandem helfen. Wenn man Verbesserungen hat, sind sie sehr willkommen.
quelle
Stellen Sie sicher, dass auf beiden Websites während widgets_init genau derselbe Registrierungscode für die Seitenleisten ausgeführt wird. Das sollte $ wp_registered_sidebars füllen und das von Boone hervorgehobene Problem lösen. Ich habe es selbst nicht versucht.
quelle
Dieses "könnte" Sie in die richtige Richtung weisen.
Xtreme One - Theme Framework - http://marketpress.com/product/xtreme/
Überprüfen Sie das Video - http://vimeo.com/52479425
Das Grundkonzept besteht darin, dass Sie beim Hinzufügen einer Seitenleiste zu einer Netzwerksite diese auch als globale Seitenleiste zuweisen können.
quelle
Sind Sie mit
global $switched;
?quelle
$switched
Globale wird von innen aufgerufenswitch_to_blog()
. Sie müssen es nicht im globalen Namespace deklarieren.switch_to_blog()
Kontext funktionieren könnten , da sie vor dem Aufruf nicht vom Thema registriert werden müssen (die Registrierungsdaten werden in der Datenbank gespeichert).is_active_sidebar($sidebar_name)
ist.