Controllare se una sidebar registrata è attiva e ha contenuto widget

17 ott 2012, 13:38:18
Visualizzazioni: 22.9K
Voti: 7

Vorrei controllare se una sidebar registrata ha contenuto widget - ma non riesco a trovare una funzione WP per questo - is_active_widget controlla se ha contenuto, ma non se esiste o meno.

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

    if ( $widget ) { // nome widget passato ##
        
        // controlla se il widget è attivo - restituisce html e contenuto widget se true ##
        if ( is_active_sidebar( $widget ) ) { 

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

            dynamic_sidebar( $widget );

         echo '</div>';

        } else {

            // mostra errore se il widget richiesto non esiste o è vuoto ##
            if ( ql_user_is_administator() ) { // l'utente è admin ##

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

                    $message = 'vuoto';

                } else { // ID widget o nome errato ##

                    $message = 'errore';

                }

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


            }
        }
    }
}

Lo richiamo nella pagina usando:

// carica widget ##
// widget_id, nome widget, classe dell'elemento contenitore ##
ql_widget( 'sidebar-general', 'Sidebar Standard', 'sider' );

Le sidebar sono registrate correttamente con register_sidebar() e hanno un ID univoco assegnato a ciascuna.

Attualmente questa funzione restituisce l'errore all'amministratore se il widget è mancante o vuoto - Vorrei poter personalizzare l'errore per indicare se è mancante o vuoto

Grazie!

AGGIORNAMENTO ecco la funzione funzionante: link a pastebin

0
Tutte le risposte alla domanda 3
1
10

Puoi verificare se una sidebar è attiva e in uso (contiene widget con contenuto) utilizzando is_active_sidebar, ecco un esempio...

if ( is_active_sidebar( $sidebar ) ) {
    // Mostra del testo
} else {
    // Non mostrare nulla
};

Dove $sidebar è il nome, l'ID o il numero della sidebar che desideri verificare.

Aggiornamento:

Ecco un suggerimento per migliorare la leggibilità della tua funzione,

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

    if ( $widget ) { 

        $message = (ql_user_is_administator() ? 'vuoto' : 'errore');
        $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;

        }
    }
} // Questa è la fine della funzione

E se vuoi che il messaggio di errore appaia solo per l'amministratore, allora racchiudi il contenuto interno dello statement else con un altro condizionale o cambia else in elseif e verifica la presenza di un amministratore, opzionalmente terminando con una condizione else per gestire tutti gli altri casi, come per gli utenti normali. Riferimento Codex: http://codex.wordpress.org/Function_Reference/is_active_sidebar

17 ott 2012 14:26:06
Commenti

grazie - sto già utilizzando quella funzione - vorrei mostrare la sidebar se contiene widget, restituire un errore se la sidebar è nominata in modo errato e non fare nulla se è nominata correttamente ma vuota.

Q Studio Q Studio
17 ott 2012 14:45:20
3

wp_get_sidebars_widgets(); restituirà una lista di tutte le sidebar e dei widget presenti in ognuna di esse. Questo può permetterti di verificare la presenza di sidebar senza widget.

17 ott 2012 13:58:37
Commenti

bingo! - aggiornerò la risposta per mostrare la soluzione che ho usato - grazie

Q Studio Q Studio
17 ott 2012 14:50:45

Non è proprio questo lo scopo di is_dynamic_sidebar?

Adam Adam
17 ott 2012 15:04:11

questo mi ha permesso di verificare tutti e 3 gli stati - nome errato, vuoto, visualizzarlo se tutto è a posto...

Q Studio Q Studio
19 ott 2012 13:51:44
0

Basandomi sulla risposta accettata ho risolto il mio problema con questa funzione, spero sia utile, e grazie, Mridul Aggarwal.

function is_active_sidebar_with_content( $sidebar ) {

   $sidebars = wp_get_sidebars_widgets();

   if ( isset( $sidebars[ $sidebar ] ) && ! empty( $sidebars[ $sidebar] ) ) {
       return true;
   }


   return false;
}
27 ago 2021 23:26:26