Widgets im WordPress-Admin basierend auf der aktuellen Option Erweiterte benutzerdefinierte Felder einblenden / ausblenden

Um mein neues Projekt voranzutreiben, suche ich nach einer Möglichkeit, Widget-Bereiche zu registrieren und zu entfernen, je nachdem, welche Header-Datei ich über ACF Pro auf der Seite Optionen lade.

Ein paar Infos, um alle auf den neuesten Stand zu bringen: Ich benutze ACF Pro (Advanced Custom Fields Pro), um Header-Layouts auszuwählen und aufzurufen. Beispiel: Die Auswahl von “Schwarz” im Dropdown-Menü ruft header-black.php auf und wird beim Speichern meiner Auswahl global als Site-Header angewendet.

Was ich jetzt herausfinden möchte ist, wie Widgets, die exklusiv für einen ausgewählten Header sind (wie “Schwarz”), registriert werden und die Header “Black” Widgets auf der Widget-Admin-Seite als die einzigen verfügbaren Header-Widgets erscheinen.

Beispiel: Wählen Sie den Kopfzeilenstil “Schwarz” aus, der zwei Widgetbereiche enthält (Header Black Widget Right und Header Black Widget Left), und diese sind die einzigen verfügbaren Header-Widgets zur Verwendung auf der Widget-Admin-Seite.

Ein Szenario zum Beispiel: In meinem ersten Beispiel habe ich den Header-Stil “Schwarz” ausgewählt, also möchte ich jetzt zu einem anderen Header-Layout namens “Slim” wechseln. Jetzt wähle ich Header-Stil “Slim”, die drei Widget-Bereiche enthält (Header Slim Widget 1, Header Slim Widget 2, Header Slim Widget 3) und nach Speichern meiner Wahl der Kopfzeile, gehen die beiden Widgets “Black” Header-Stil weg und werden mit Header-Stil “Slim” drei Widget-Bereichen ersetzt.

Ich habe ein paar Stunden geforscht und eine andere Frage gefunden, die etwas berührt, was ich erreichen möchte, aber ich weiß immer noch nicht genau, wie ich es korrekt ausführen soll, weil die gegebene Antwort bearbeitet / aktualisiert und nur hinzugefügt wurde meine Verwirrung.

Hier ist der Link zu dem anderen Thread, den ich hier gefunden habe: Wie kann ich Menüs und Widgets bedingt basierend auf Designoptionen / Einstellungen registrieren?

Ich hoffe, ihr könnt mir helfen, diesen Deal auszuarbeiten.

Frohes neues Jahr! Strahl

Solutions Collecting From Web of "Widgets im WordPress-Admin basierend auf der aktuellen Option Erweiterte benutzerdefinierte Felder einblenden / ausblenden"

Du hast Glück. Ich suchte nach einer Ausrede, um das bei einem meiner Projekte zu tun. Ich habe mir endlich die Zeit genommen, diese Idee in eines meiner Themen aufzunehmen. 🙂

Sie können diese Idee nehmen und damit laufen. Es ist ein einfaches und bloßes Beispiel, aber es tut, was Sie wollen.

Dies gilt nicht für Themenoptionen. Dies setzt voraus, dass Sie Ihre Designeinstellungen bereits in irgendeiner Weise verwaltet haben (was so klingt wie Sie).

Schritt 1 – Erzählen Sie WordPress über “Widget Areas”, die von Ihrem Thema unterstützt werden.

if ( ! function_exists( 'mbe_theme_register_widget_areas' ) ) { /** * This function tells WordPress that your theme supports up to 4 Widget Areas: * 1.) Header Column 1 * 2.) Header Column 2 * 3.) Header Column 3 * 4.) Header Column 4 * * Allows Widgets to be placed in various places within the theme header. * * @author Michael Ecklund * @author_url http://www.michaelbrentecklund.com/ * * @return bool */ function mbe_theme_register_widget_areas() { $widget_areas = array(); $widget_areas[] = array( 'name' => 'Header Column 1', 'id' => 'mbe-theme-widget-area-header-column-1' ); $widget_areas[] = array( 'name' => 'Header Column 2', 'id' => 'mbe-theme-widget-area-header-column-2' ); $widget_areas[] = array( 'name' => 'Header Column 3', 'id' => 'mbe-theme-widget-area-header-column-3' ); $widget_areas[] = array( 'name' => 'Header Column 4', 'id' => 'mbe-theme-widget-area-header-column-4' ); foreach ( $widget_areas as $widget_area ) { $default_args = array( 'before_widget' => '
', 'after_widget' => '
', 'before_title' => '
', 'after_title' => '
' ); $args = wp_parse_args( $widget_area, $default_args ); register_sidebar( $args ); } return true; } add_action( 'widgets_init', 'mbe_theme_register_widget_areas' ); }

Der obige Code sollte in die Datei functions.php Ihres aktuell aktiven WordPress Theme eingefügt werden.

Schritt 2 – Erstellen Sie die Vorlagendateien für jeden Headertyp.

In diesem Beispiel möchten Sie 4 neue Vorlagendateien im Stammverzeichnis Ihres derzeit aktiven WordPress-Themes erstellen:

  1. header-column-1.php
  2. header-column-2.php
  3. header-column-3.php
  4. header-column-4.php

Schritt 3 – Stellen Sie jedes neue Header-Template-Datei-Widget bereit.

In diesem Beispiel demonstriere ich eine 4-Spalten-Header-Vorlage ( header-column-4.php ):

 < ?php # BoF Header Column 1 echo '
' . PHP_EOL; if ( is_active_sidebar( 'mbe-theme-widget-area-header-column-1' ) ) { // Display Widgets dynamic_sidebar( 'mbe-theme-widget-area-header-column-1' ); } else { // No Widgets, display default fallback markup. echo 'Default Column #1' . PHP_EOL; } echo '' . PHP_EOL; # EoF Header Column 1 # BoF Header Column 2 echo '
' . PHP_EOL; if ( is_active_sidebar( 'mbe-theme-widget-area-header-column-2' ) ) { // Display Widgets dynamic_sidebar( 'mbe-theme-widget-area-header-column-2' ); } else { // No Widgets, display default fallback markup. echo 'Default Column #2' . PHP_EOL; } echo '
' . PHP_EOL; # EoF Header Column 2 # BoF Header Column 3 echo '
' . PHP_EOL; if ( is_active_sidebar( 'mbe-theme-widget-area-header-column-3' ) ) { // Display Widgets dynamic_sidebar( 'mbe-theme-widget-area-header-column-3' ); } else { // No Widgets, display default fallback markup. echo 'Default Column #3' . PHP_EOL; } echo '
' . PHP_EOL; # EoF Header Column 3 # BoF Header Column 4 echo '
' . PHP_EOL; if ( is_active_sidebar( 'mbe-theme-widget-area-header-column-4' ) ) { // Display Widgets dynamic_sidebar( 'mbe-theme-widget-area-header-column-4' ); } else { // No Widgets, display default fallback markup. echo 'Default Column #4' . PHP_EOL; } echo '
' . PHP_EOL; # EoF Header Column 4 echo '
' . PHP_EOL; ?>

Schritt 4 – Bearbeiten Sie header.php in Ihrem aktuell aktiven header.php , um die dynamische header.php zu aktivieren.

 < ?php echo '
' . PHP_EOL; echo '
' . PHP_EOL; $header_template = get_option( 'mbe-theme-header-template' ); // Retrieve theme option configured by user. if ( ! $header_template ) { $header_template = 'column-3'; // Fallback: Set a default header template. } get_template_part( 'header', $header_template );// Load the header template. echo '
' . PHP_EOL; echo '' . PHP_EOL; ?>