it-swarm.com.de

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

Ich möchte überprüfen, ob in einer registrierten Seitenleiste Widget-Inhalte enthalten sind, kann aber anscheinend keine WP -Funktion dafür finden. Is_active_widget überprüft, ob Inhalte vorhanden sind, nicht jedoch, 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 mit 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 angezeigt wird, ob er fehlt oder leer ist

Vielen Dank!

UPDATEhier ist die funktionierende Funktion: Link zu Pastebin

7
Q Studio

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

7
Mridul Aggarwal

Sie können mit is_active_sidebar prüfen, ob eine Seitenleiste aktiv ist und verwendet wird (enthält Widgets mit Inhalten). Hier ist ein Beispiel ...

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

Dabei ist $sidebar 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;

        }
    }

Wenn Sie möchten, dass die Fehlermeldung nur bei admin angezeigt wird, müssen Sie den inneren Inhalt der Anweisung else mit einer anderen Bedingung umbrechen oder die else in elseif ändern. Führen Sie dann die Prüfung für einen Administrator durch und beenden Sie sie optional mit einer else-Bedingung, um alle anderen zu erfüllen Ergebnisse, z. B. für reguläre Benutzer. Codex-Referenz: http://codex.wordpress.org/Function_Reference/is_active_sidebar

9
userabuser