Mostrar widgets de barra lateral dinámica específica en una página específica

16 sept 2011, 08:14:05
Vistas: 34.7K
Votos: 1

Me han entregado un sitio de WordPress a medio terminar. Hace al menos un año que no uso WordPress y hay muchas cosas que encuentro diferentes. La forma en que estoy acostumbrado a mostrar diferente contenido en diferentes páginas es crear plantillas de página para cada página que necesita contenido único.

Estoy tratando de mostrar una barra lateral diferente en una página particular que en el resto del sitio. Lo que hubiera hecho hace un año es crear una plantilla de página para esta página y hacer un nuevo archivo de barra lateral y luego incluir el archivo de barra lateral en la plantilla de página. He descubierto que esto no funciona. Los principales culpables que puedo ver son loop.php y loop-page.php, que no existían en el tema básico que típicamente usaba cuando construía un sitio hace tiempo. Sin embargo, parece que quien tuvo sus manos en esto antes que yo ha copiado el tema 'twenty ten' y le ha hecho cambios bajo un nuevo nombre.

He registrado una nueva barra lateral dinámica en el functions.php del tema y puedo verla en la sección Widgets del Panel de Control y agregar widgets a ella.

Sin embargo, no puedo hacer que se muestre en la página que quiero. He probado lo siguiente:

1.) Le di a la página una plantilla personalizada template_news.php y coloqué lo siguiente donde debería llamarse la barra lateral:

include ('sidebar-news.php');

El archivo sidebar-news.php contiene código que copié de sidebar.php con el ID de barra lateral "News" que listé en functions.php:

<?php if ( is_active_sidebar( 'sidebar-news' ) ) : ?>

<div id="secondary" class="widget-area" role="complementary">
    <ul class="xoxo">
        <?php dynamic_sidebar( 'sidebar-news' ); ?>
    </ul>
</div>

<?php endif; ?>

La plantilla de página está aplicada a la página correcta.

2.) Fui a page.php y cambié:

<?php get_sidebar(); ?>

a:

<?php 

if(is_page('18')) {
   include ('sidebar-news.php');
}
else {              
   get_sidebar(); 
} ?>

También he verificado varias veces que el ID de la página sea correcto y he intentado usar el slug en su lugar, pero sin éxito.

3.) Probé lo anterior en loop-page.php

4.) Coloqué la siguiente declaración condicional en sidebar.php:

<?php
if ( is_active_sidebar( 'sidebar-news' ) && is_page('18') ) : ?>
    <div id="sidebarnews" class="widget-area" role="complementary">
    <ul class="xoxo">
    <?php dynamic_sidebar( 'sidebar-news' ); ?>
    </ul>
    </div>
<?php endif; ?>

También, después de investigar y descubrir que la forma correcta de extender o cambiar la funcionalidad de un tema es crear un tema hijo, intenté hacer eso, pero causó que algunas cosas se rompieran que no tengo tiempo de intentar arreglar.

He descubierto que el 'sidebar.php' predeterminado está siendo llamado y mostrado en la página, sin embargo, aunque mi declaración condicional con el ID de página está presente, no está mostrando los widgets de la barra lateral personalizada.

Tampoco puedo encontrar cómo se está llamando la barra lateral predeterminada en la página porque eliminar get_sidebar(); por completo en mi plantilla personalizada template_news.php, page.php, o loop-page.php no parece hacer nada.

Por favor, ¿alguien puede explicarme cómo agregar esta barra lateral a la página?

1
Comentarios

Otro Plugin es Widget Display Options

User User
4 may 2013 17:34:35
Todas las respuestas a la pregunta 2
6

Creo que lo que necesitas es simplemente ejecutar register_sidebar() en un hook 'widgets_init'. El tema TwentyTen tiene ejemplos de register_sidebar() en su archivo functions.php, pero aquí tienes un ejemplo de cómo podría verse:

add_action( 'widgets_init', 'twentyten_widgets_init' );
function twentyten_widgets_init() {
  register_sidebar( array(
    'name' => __( 'Barra lateral de Noticias', 'yoursite' ),
    'id' => 'sidebar-news',
    'description' => __( 'Área de la Barra Lateral de Noticias', 'yoursite' ),
    'before_widget' => '<li id="%1$s" class="widget-container %2$s">',
    'after_widget' => '</li>',
    'before_title' => '<h3 class="widget-title">',
    'after_title' => '</h3>',
  ));

  /*
   * EL RESTO DEL CÓDIGO DE REGISTRO DE LA BARRA LATERAL DE twentyten_widgets_init() VA AQUÍ
   */
}

Además, en tu plantilla de página template_news.php usa el siguiente código para llamar a tu barra lateral, que cargará el archivo sidebar-news.php que creaste anteriormente:

<?php get_sidebar( 'news' ); ?> 

No deberías necesitar ninguna de las otras cosas que intentaste, y definitivamente no necesitas declaraciones include.

16 sept 2011 09:35:58
Comentarios

Ya he hecho esto. Fue lo primero que intenté exactamente como lo has descrito. Sin embargo, no funciona. El código en mi plantilla personalizada para el contenido y la barra lateral está siendo anulado por la configuración predeterminada en loop.php y loop-page.php.

biggles biggles
16 sept 2011 18:03:56

@jlego - Hmm. Probé mi versión original con TwentyEleven y acabo de volver a probar con TwentyTen y funciona. loop.php y loop-page.php no tienen nada que ver con la generación de la barra lateral, a menos que, por supuesto, el otro desarrollador haya hecho cosas realmente extrañas. ¿Podrías actualizar tu pregunta y publicar esos dos archivos junto con el contenido de tu archivo template_news.php?

MikeSchinkel MikeSchinkel
16 sept 2011 18:27:23

@jlego - Además, si no tienes PhpStorm + Zend Debugger en tu conjunto de herramientas, podrías considerar conseguir una copia. Con él podrías rastrear tu sitio línea por línea y ver exactamente por qué funciona o no funciona.

MikeSchinkel MikeSchinkel
16 sept 2011 18:32:07

Realmente me estaba frustrando porque sabía que esto debería funcionar, y había verificado todas las variables para asegurarme de que tenía la plantilla configurada correctamente y no tenía errores en mi código. Resulta que quien haya trabajado en esto antes que yo había logrado mostrar un blogroll en la página configurando esa página en particular como la página de "publicaciones" en el administrador de WordPress. Así que cuando intenté crear una plantilla personalizada, esa configuración estaba anulando mi plantilla y haciendo que la página ejecutara el código en esos archivos. Gracias por tu ayuda de todos modos. Voy a revisar PHPStorm y Zend Debugger.

biggles biggles
17 sept 2011 06:38:53

Aunque esto no resolvió el problema específico que tenía, esta es la forma correcta de agregar una barra lateral a la página. Creo que la solución real a mi problema estaba limitada a mi caso particular, así que estoy marcando tu respuesta como la solución a esta pregunta debido al número de visitas que ha tenido.

biggles biggles
4 sept 2013 00:49:51

@jlego - Wow, gracias por volver después de tanto tiempo. De todos modos, lamento no haber podido ayudarte con tu caso de uso específico.

MikeSchinkel MikeSchinkel
5 sept 2013 17:34:12
Mostrar los 1 comentarios restantes
1

Para mostrar un widget solo en páginas específicas cuando todas tus páginas tienen la misma barra lateral, puedes usar uno de estos plugins:

Display Widgets

Simplemente oculta widgets en páginas especificadas. Añade casillas de verificación a cada widget para mostrarlo u ocultarlo en cada página del sitio.

Widget Logic

Widget Logic te permite controlar en qué páginas aparecen los widgets usando las etiquetas condicionales de WordPress. También añade un filtro 'widget_content'.

16 sept 2011 19:08:56
Comentarios

También un excelente plugin para esto es https://wordpress.org/plugins/dynamic-widgets/

NickFMC NickFMC
16 ene 2015 04:15:36