Comprobar si una barra lateral registrada está activa y tiene contenido de widgets

17 oct 2012, 13:38:18
Vistas: 22.9K
Votos: 7

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

0
Todas las respuestas a la pregunta 3
1
10

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

17 oct 2012 14:26:06
Comentarios

gracias - ya estoy usando esa función - quiero mostrar la barra lateral si tiene widgets, devolver un error si la barra lateral tiene un nombre incorrecto y no hacer nada si está nombrada correctamente pero vacía.

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

wp_get_sidebars_widgets(); devolverá una lista de todas las barras laterales y los widgets en cada una de ellas. Esto te permite verificar barras laterales que no tienen widgets.

17 oct 2012 13:58:37
Comentarios

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

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

¿No es para eso is_dynamic_sidebar?

Adam Adam
17 oct 2012 15:04:11

esto me permitió verificar los 3 estados - nombre incorrecto, vacío, mostrarlo si todo está bien...

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

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;
}
27 ago 2021 23:26:26