Comprobar si una barra lateral registrada está activa y tiene contenido de widgets
Me gustaría verificar si una barra lateral registrada tiene contenido de widgets - pero no logro encontrar una función de WP para esto - is_active_widget verifica si tiene contenido, pero no si existe o no.
function ql_widget( $widget, $widget_name, $element = 'sider' ){
if ( $widget ) { // se pasó el nombre del widget ##
// verifica si el widget está activo - devuelve html y contenido del widget si es verdadero ##
if ( is_active_sidebar( $widget ) ) {
echo '
<div class="'.$element.'">';
dynamic_sidebar( $widget );
echo '</div>';
} else {
// muestra error si el widget solicitado no existe o está vacío ##
if ( ql_user_is_administator() ) { // el usuario es admin ##
if ( dynamic_sidebar( $widget ) ) { // vacío ##
$message = 'vacío';
} else { // ID o nombre del widget incorrecto ##
$message = 'error';
}
?>
<div class="error"><strong>Widget <?php echo $message; ?>:</strong>
<?php echo $widget_name ? $widget_name : $widget ; ?></div>
<?php
}
}
}
}
Lo llamo en la página usando:
// cargar widget ##
// widget_id, nombre del widget, clase del elemento contenedor ##
ql_widget( 'sidebar-general', 'Barra lateral estándar', 'sider' );
Las barras laterales están registradas correctamente con register_sidebar() y tienen un ID único asignado a cada una.
Actualmente esta función devuelve el error al administrador si el widget está ausente o vacío - Me gustaría poder personalizar el error para indicar si está ausente o vacío
¡Gracias!
ACTUALIZACIÓN aquí está la función que funciona: enlace a pastebin

Puedes verificar si una barra lateral está activa y en uso (contiene widgets con contenido) utilizando is_active_sidebar
, aquí tienes un ejemplo...
if ( is_active_sidebar( $sidebar ) ) {
// Mostrar algún texto
} else {
// No mostrar nada
};
Donde $sidebar
es el nombre, ID o número de la barra lateral que deseas verificar.
Actualización:
Aquí tienes una sugerencia para mejorar la legibilidad de tu función:
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;
}
}
} // Fin de la función
Y si solo quieres que el mensaje de error aparezca para el administrador, entonces envuelve el contenido interno del bloque else
con otro condicional o cambia el else
por elseif
y verifica si es administrador, opcionalmente finalizando con un bloque else
para cubrir otros casos, como para usuarios regulares.
Referencia del Codex: http://codex.wordpress.org/Function_Reference/is_active_sidebar

¡bingo! - Actualizaré la respuesta para mostrar la solución que he usado - gracias

Basándome en la respuesta aceptada, resolví mi problema con esta función. Espero que ayude, y gracias, 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;
}
