¿Cómo agregar un widget específico a una sola página?

22 dic 2012, 11:01:11
Vistas: 47.2K
Votos: 7

Me gustaría mostrar un widget en una sola página de mi sitio, por lo que veo ¿no es posible?

¿Debería agregarlo a todas las páginas de mi sitio o no?

5
Comentarios

¿Es este un tema personalizado o un widget personalizado?

fuxia fuxia
22 dic 2012 15:56:51

tema personalizado, FashionStyle de SMthemes punto com

Filippo oretti Filippo oretti
22 dic 2012 16:47:09

Opciones de visualización de widgets Otro plugin que hace esto

User User
18 abr 2013 03:31:51

Es posible. La forma más sencilla es usar un plugin como http://wordpress.org/extend/plugins/display-widgets/

Mridul Aggarwal Mridul Aggarwal
22 dic 2012 12:00:40

Aquí hay una mejor solución que funciona con cualquier tema y es fácil de personalizar http://wordpress.stackexchange.com/questions/127111/display-custom-homepage-text-based-on-domain/128354#128354

Brad Dalton Brad Dalton
2 ene 2014 20:34:48
Todas las respuestas a la pregunta 4
0

Depende de dónde quieras mostrar el widget.

Comencemos con el registro del área de widgets (sidebar):

add_action( 'wp_loaded', 'wpse_76959_register_widget_area' );
function wpse_76959_register_widget_area()
{
    register_sidebar(
        array (
            'name'          => __(
                'Widgets en la página Página de Ejemplo',
                'theme_textdomain'
                ),
            'description'   => __(
                'Se usará solo en una página con el slug "sample-page".',
                'theme_textdomain'
                ),
            'id'            => 'sample-only',
            'before_widget' => '<div id="sample-only-widget">',
            'after_widget'  => '</div>',
            'before_title'  => '<h2>',
            'after_title'   => '</h2>',
        )
    );
}

Esto es bastante simple. Registramos un nueva área de widgets con un marcado personalizado.

Descripción de la imagen aquí

Ahora tenemos que mostrarla en algún lugar. Podríamos agregar una acción personalizada en nuestra plantilla page.php:

do_action( 'show_sample_widget' );

O podríamos usar una acción existente, esto limitaría los lugares donde el widget está disponible. Por ejemplo, la acción loop_start se llama la primera vez que usamos the_post() en un bucle. Si queremos colocar el widget en la parte superior del contenido de la página, usamos ese hook:

add_action( 'loop_start', 'wpse_76959_render_widget' );

function wpse_76959_render_widget()
{
    is_page( 'sample-page' ) && dynamic_sidebar( 'sample-only' );
    remove_action( current_filter(), __FUNCTION__ );
}

Para una acción personalizada usaríamos en su lugar:

add_action( 'show_sample_widget', 'wpse_76959_render_widget' );
22 dic 2012 17:14:34
0

Existen varios plugins que permiten mostrar widgets basados en condiciones específicas:

  • Display Widgets: Interfaz limpia y sencilla
  • Widget Context: Ofrece algunas opciones más que el anterior
  • Dynamic Widgets: Es el más completo en características
  • Widget Logic: Orientado a programadores, ya que requiere escribir la condición en código PHP. Ejemplo: is_page('about')

Una solución alternativa la proporciona el siguiente plugin, que permite definir un conjunto personalizado de widgets por página, directamente desde la pantalla de edición:

22 dic 2012 20:25:03
2

Si te sientes cómodo editando los archivos de plantilla de tu tema:

Encuentra donde se llama a:

dynamic_sidebar('side_bar_name');

y ya sea antes, después, o básicamente en cualquier lugar de tu sitio, usa:

$pageTitle =  get_the_title($post->ID); 
$targetPage = 'aquí va el título de la página que deseas dirigir';

    if($pageTitle == $targetTitle){    
     the_widget( 'el_id_unico_del_widget_o_nombre', $instance, $args);
    }
   //the_widget() llama a un widget específico y lo muestra

Si prefieres una solución más limpia: Crea una función en functions.php que se vería así:

function call_my_widget( $post ){
    $pageTitle =  get_the_title($post-ID); 
    $targetPage = 'aquí va el título de la página que deseas dirigir';

        if($pageTitle == $targetTitle){    
         the_widget( 'el_id_unico_del_widget_o_nombre', $instance, $args);
        }
}

Llama a la función con:

call_my_widget( $post );

esto debe llamarse dentro del loop o donde la variable global $post exista.

Luego llama a esa función en tu archivo de plantilla (¿quizás page.php?) para mostrar tus widgets específicos solo en tu página objetivo.

9 jul 2013 16:30:35
Comentarios

¿qué es $instance aquí..?

Ari Ari
5 dic 2014 12:51:00

De la documentación de WP: $instance (array|string) (opcional) La configuración de instancia del widget. Puede ser un array o una cadena estilo query. Ver ejemplos en cada widget. En mi caso era un array vacío.

Vigs Vigs
25 dic 2014 06:29:30
0

Puedes usar widget_display_callback : https://developer.wordpress.org/reference/hooks/widget_display_callback/ y simplemente cambiar el ID de la página en el código a continuación.

function custom_display_callback( $instance, $widget, $args ){
    if( is_page( 10 ) ){
        return false;
    }
    return $instance;
}
add_filter( 'widget_display_callback', 'custom_display_callback', 50, 3 );

Espero que esto ayude. ¡Saludos!

11 sept 2017 10:18:39