Überprüfen Sie, ob die registrierte Seitenleiste aktiv ist und Widget-Inhalte enthält

6

Ich möchte überprüfen, ob eine registrierte Seitenleiste Widget-Inhalte enthält - kann aber anscheinend keine WP-Funktion dafür finden - is_active_widget prüft, ob sie Inhalte enthält, aber nicht, ob sie vorhanden sind oder nicht.

function ql_widget( $widget, $widget_name, $element = 'sider' ){

    if ( $widget ) { // widget name passed ##

        // check if widget is active - return html & widget content if true ##
        if ( is_active_sidebar( $widget ) ) { 

        echo '
        <div class="'.$element.'">';

            dynamic_sidebar( $widget );

         echo '</div>';

        } else {

            // issue error if requested widget does not exist or is empty ##
            if ( ql_user_is_administator() ) { // user is admin ##

                if ( dynamic_sidebar( $widget ) ) { // empty ##

                    $message = 'empty';

                } else { // widget ID or name wrong ##

                    $message = 'error';

                }

?>
                <div class="error"><strong>Widget <?php echo $message; ?>:</strong> 
                <?php echo $widget_name ? $widget_name : $widget ; ?></div>
<?php 


            }
        }
    }
}

Ich nenne das auf der Seite mit:

// load widget ##
// widget_id, widget name, class of containing element ##
ql_widget( 'sidebar-general', 'Standard Sidebar', 'sider' );

Die Seitenleisten sind korrekt bei register_sidebar () registriert und haben jeweils eine eindeutige ID.

Derzeit gibt diese Funktion den Fehler an den Administrator zurück, wenn das Widget fehlt oder leer ist. Ich möchte den Fehler so anpassen können, dass er anzeigt, ob er fehlt oder leer ist

Vielen Dank!

UPDATE Hier ist die Arbeitsfunktion: Link zum Pastebin

Q Studio
quelle

Antworten:

7

wp_get_sidebars_widgets();gibt eine Liste aller Seitenleisten und der Widgets in jeder von ihnen zurück. Auf diese Weise können Sie nach Seitenleisten ohne Widgets suchen

Mridul Aggarwal
quelle
Bingo! - Ich werde die Antwort aktualisieren, um die Lösung zu zeigen, die ich verwendet habe - danke
Q Studio
3
Ist das nicht was is_dynamic_sidebar?
Adam
Dadurch konnte ich alle 3 Zustände überprüfen - falscher Name, leer, anzeigen, ob alles in Ordnung ist ...
Q Studio
9

Sie können überprüfen, ob eine Seitenleiste aktiv ist und verwendet wird (enthält Widgets mit Inhalt), indem Sie Folgendes verwenden is_active_sidebar: Hier ein Beispiel ...

if ( is_active_sidebar( $sidebar ) ) {
    // Display some text
} else {
    // Display none
};

Wo $sidebarist entweder der Name, die ID oder die Nummer der Seitenleiste, die Sie überprüfen möchten?

Aktualisieren:

Hier ist ein Vorschlag zur Verbesserung der Lesbarkeit Ihrer Funktion:

function ql_widget( $widget, $widget_name, $element = 'sider' ){

    if ( $widget ) { 

        $message = (ql_user_is_administator() ? 'empty' : 'error');
        $widget_name = ($widget_name ? $widget_name : $widget);

        if ( is_active_sidebar( $widget ) ) { 

            $html  = '<div class="'.$element.'">';
            $html .= dynamic_sidebar( $widget );
            $html .= '</div>';
            echo $html;

        } else {

            $html  = '<div class="error"><strong>Widget ';
            $html .= $message;
            $html .= '</strong> ';
            $html .= $widget_name;
            $html .= '</div>';
            echo $html;

        }
    }
} // This is the end of the function

Wenn Sie möchten, dass die Fehlermeldung nur bei admin angezeigt wird, schließen Sie den inneren Inhalt der elseAnweisung mit einer anderen Bedingung ein oder ändern Sie die elsezu elseifund führen Sie die Prüfung für einen Administrator aus und schließen Sie optional mit einer elseBedingung ab, um alle anderen Ergebnisse zu erfüllen, z für reguläre Benutzer. Codex-Referenz: http://codex.wordpress.org/Function_Reference/is_active_sidebar

Adam
quelle
danke - ich benutze diese Funktion bereits - ich möchte die Seitenleiste anzeigen, wenn sie Widgets enthält, einen Fehler zurückgeben, wenn die Seitenleiste falsch benannt ist, und nichts tun, wenn sie richtig, aber leer benannt ist.
Q Studio