Controllare se una sidebar registrata è attiva e ha contenuto widget
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

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

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

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;
}
