web-dev-qa-db-fra.com

vérifier si la barre latérale enregistrée est active et a un contenu de widget

Je voudrais vérifier si une barre latérale enregistrée a un contenu de widget - mais n'arrive pas à trouver une fonction WP pour cela - is_active_widget vérifie si elle a du contenu, mais pas s'il existe ou non.

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 


            }
        }
    }
}

J'appelle cela sur la page en utilisant:

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

Les barres latérales sont enregistrées correctement avec register_sidebar () et ont un identifiant unique attribué à chacune.

actuellement, cette fonction renvoie l'erreur à l'administrateur si le widget est manquant ou vide - j'aimerais pouvoir personnaliser l'erreur pour indiquer s'il est manquant ou vide

Merci!

UPDATEvoici la fonction de travail: lien vers Pastebin

7
Q Studio

wp_get_sidebars_widgets(); renverra une liste de toutes les barres latérales et des widgets dans chacune d'elles. Cela peut vous permettre de vérifier les barres latérales sans widgets

7
Mridul Aggarwal

Vous pouvez vérifier si une barre latérale est active et en cours d'utilisation (contient des widgets avec du contenu) en utilisant is_active_sidebar , voici un exemple ...

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

$sidebar est soit le nom, l'ID ou le numéro de la barre latérale que vous souhaitez vérifier.

Mettre à jour:

Voici une suggestion pour améliorer la lisibilité de votre fonction,

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;

        }
    }

Et si vous souhaitez uniquement que le message d'erreur apparaisse si admin, encapsulez le contenu intérieur de l'instruction else avec une autre condition ou changez la valeur else en elseif et exécutez la vérification pour un administrateur et terminez éventuellement avec une condition else résultats, tels que pour les utilisateurs réguliers. Référence du Codex: http://codex.wordpress.org/Function_Reference/is_active_sidebar

9
userabuser