¿Cómo determinar si un post tiene contenido de widget?

6 abr 2011, 19:02:19
Vistas: 605
Votos: 2

Tengo una barra lateral registrada llamada "my-header" que afecta el posicionamiento absoluto de los elementos debajo de ella en el marcado.

Necesito ejecutar una consulta en header.php para determinar si la barra lateral está presente para el post actual, y escribir un identificador de clase en la etiqueta body de mi tema. Usaré esta clase CSS para ajustar el posicionamiento absoluto de los elementos correspondientemente.

¿Existe algún método que se pueda llamar, separado del método que se usa para mostrar la barra lateral, para determinar si el post tiene contenido de widget para el widget "my-sidebar"? Por ejemplo, uno que solo devuelva verdadero/falso?

Después de revisar widgets.php, intenté usar is_active_sidebar('my-header') pero devuelve verdadero para todas las páginas. Necesito una función que acepte el post como argumento. De lo contrario, si no existe, supongo que tendré que crear mi propia función.

3
Comentarios

Quizás quieras echar un vistazo al plugin My Snippets de Justin Tadlock, http://wordpress.org/extend/plugins/my-snippets/

Manzabar Manzabar
6 abr 2011 19:33:05

@Manzabar: se ve interesante. Lo tenía en mi lista para agregar a mi tema desde hace tiempo. Agradezco la referencia.

Scott B Scott B
6 abr 2011 19:38:48

¿Podrías explicar esta parte - si la publicación tiene contenido de widget para el widget "my-sidebar"? Las publicaciones y los widgets son cosas completamente diferentes, no se intersecan, a menos que uses algún widget personalizado consciente del contexto.

Rarst Rarst
31 may 2011 02:03:27
Todas las respuestas a la pregunta 1
0
<?php
$bodyclass = "";
// ¿estamos en una página 'single'? ej. una entrada, página o algún tipo de contenido personalizado
if(is_single()){
    // ¿es esto una entrada de tipo 'page'? o es una entrada de blog?
    global $post;
    if($post->post_type == 'page'){
        // buen momento para verificar si tenemos una barra lateral con contenido activo
        if( is_active_sidebar('my-header')){
            $bodyclass="wehavesidebarcontentyay";
        }
    }
}

?>
<body <?php body_class($bodyclass); ?>>

Aunque estoy seguro de que si tienes body_class en tu etiqueta body, ya tienes las clases CSS y selectores necesarios para hacer esto sin el código PHP.

9 ago 2011 14:17:32