it-swarm.com.de

Widgets im Dashboard basierend auf der aktuellen Option "Erweiterte benutzerdefinierte Felder" ein-/ausblenden

Um mein neues Projekt voranzutreiben, suche ich nach einer Möglichkeit, Widget-Bereiche zu registrieren und die Registrierung aufzuheben, 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 verwende ACF Pro (Advanced Custom Fields Pro), um Header-Layouts auszuwählen und aufzurufen. Beispiel: Wenn Sie in der Dropdown-Liste "Schwarz" auswählen, wird "header-black.php" aufgerufen und beim Speichern meiner Auswahl global als Site-Header angewendet.

Ich versuche jetzt herauszufinden, wie Widgets registriert werden, die nur für einen ausgewählten Header gelten (z. B. "Schwarz"), und auf der Widget-Verwaltungsseite werden Widgets für den Header "Schwarz" als die einzigen verfügbaren Widgets für den Header angezeigt.

Beispiel: Wählen Sie den Kopfzeilenstil "Schwarz" aus, der zwei Widgets-Bereiche enthält (Kopfzeilen-Schwarz-Widget rechts und Kopfzeilen-Schwarz-Widget links). Diese werden zu den einzigen verfügbaren Kopfzeilen-Widgets, die auf der Widget-Verwaltungsseite verwendet werden können.

Ein Szenario zum Beispiel: In meinem ersten Beispiel habe ich den Kopfzeilenstil "Schwarz" ausgewählt, also möchte ich jetzt zu einem anderen Kopfzeilenlayout mit dem Namen "Slim" wechseln. Jetzt wähle ich den Header-Stil "Slim" aus, der drei Widget-Bereiche enthält (Header-Slim-Widget 1, Header-Slim-Widget 2, Header-Slim-Widget 3), und nach dem Speichern meiner Auswahl des Headers gehen die beiden Widgets des "Black" -Header-Stils verloren entfernt und mit Header-Stil "Slim" drei Widget-Bereiche ersetzt werden.

Ich habe mich ein paar Stunden lang umgesehen und hier eine andere Frage gefunden, die sich auf das bezieht, was ich erreichen möchte, aber ich bin mir immer noch nicht ganz sicher, wie ich es richtig ausführen soll, da die Antwort bearbeitet/aktualisiert und nur ergänzt wurde meine Verwirrung.

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

Hoffe ihr könnt mir helfen, diesen Deal zu planen.

Frohes neues Jahr! Strahl

3
AlonsoF1

Du hast Glück. Eigentlich suchte ich nach einer Ausrede für eines meiner Projekte. Ich habe mir endlich die Zeit genommen, diese Idee in eines meiner Themen einzufügen. :)

Sie können diese Idee aufgreifen und damit anfangen. Es ist ein sehr einfaches und einfaches Beispiel, aber es macht das, was Sie wollen.

Dies gilt nicht für Themenoptionen. Dies setzt voraus, dass Sie Ihre Designeinstellungen bereits in irgendeiner Weise verwaltet haben (wie es sich anhört).

Schritt 1 - Informieren Sie WordPress über "Widget-Bereiche", 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' => '<div id="%1$s" class="widget mbe-theme-widget %2$s">',
                'after_widget'  => '</div><!-- end .mbe-theme-widget -->',
                'before_title'  => '<div class="mbe-theme-widget-title">',
                'after_title'   => '</div><!-- end .mbe-theme-widget-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 functions.php-Datei Ihres derzeit aktiven WordPress-Themas eingefügt werden.

Schritt 2 - Erstellen Sie die Vorlagendateien für jeden Kopftyp.

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

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

Schritt 3 - Bereiten Sie jedes neue Header-Template-Datei-Widget vor.

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

<?php


# BoF Header Column 1
echo '<section class="col-lg-3">' . 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 '</section><!-- end .col-lg-3 -->' . PHP_EOL;
# EoF Header Column 1


# BoF Header Column 2
echo '<section class="col-lg-3">' . 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 '</section><!-- end .col-lg-3 -->' . PHP_EOL;
# EoF Header Column 2


# BoF Header Column 3
echo '<section class="col-lg-3">' . 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 '</section><!-- end .col-lg-3 -->' . PHP_EOL;
# EoF Header Column 3


# BoF Header Column 4
echo '<section class="col-lg-3">' . 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 '</section><!-- end .col-lg-3 -->' . PHP_EOL;
# EoF Header Column 4


echo '<div class="clearfix"></div>' . PHP_EOL;

?>

Schritt 4 - header.php in Ihrem derzeit aktiven Thema bearbeiten, um die dynamische Header-Ausgabe zu aktivieren.

<?php

echo '<section class="container">' . PHP_EOL;
echo '<section class="row">' . 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 '</section><!-- end .row -->' . PHP_EOL;
echo '</section><!-- end .container -->' . PHP_EOL;

?>
5
Michael Ecklund