ti-enxame.com

Como adicionar um widget específico a apenas uma página?

Eu gostaria de mostrar um widget em apenas uma página do meu site, como eu posso ver, não é possível, certo?

Devo adicionar isso para todas as minhas páginas do site ou não?

6
itsme

Depende de onde você quer mostrar o widget.

Vamos começar com o registro da área de widgets (barra lateral):

add_action( 'wp_loaded', 'wpse_76959_register_widget_area' );
function wpse_76959_register_widget_area()
{
    register_sidebar(
        array (
            'name'          => __(
                'Widgets on page Sample Page',
                'theme_textdomain'
                ),
            'description'   => __(
                'Will be used on a page with a slug "sample-page" only.',
                'theme_textdomain'
                ),
            'id'            => 'sample-only',
            'before_widget' => '<div id="sample-only-widget">',
            'after_widget'  => '</div>',
            'before_title'  => '<h2>',
            'after_title'   => '</h2>',
        )
    );
}

Isso é bem simples. Registramos uma nova área de widget com alguma marcação customizada.

enter image description here

Agora temos que mostrar isso em algum lugar. Poderíamos adicionar uma ação personalizada em nosso modelo page.php:

do_action( 'show_sample_widget' );

Ou poderíamos usar uma ação existente, isso limitaria os locais onde o widget está disponível. Por exemplo, a ação loop_start é chamada na primeira vez que chamamos the_post() em um loop. Se quisermos definir o widget no topo do conteúdo da página, usamos esse gancho:

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 uma ação personalizada que usamos em vez disso:

add_action( 'show_sample_widget', 'wpse_76959_render_widget' );
7
fuxia

Existem vários plugins que permitem mostrar widgets baseados em condições específicas:

Uma solução alternativa é fornecida pelo plug-in a seguir, que permite definir um conjunto personalizado de widgets por página, diretamente na tela da página de edição:

3
marcochiesi

Se você estiver confortável editando os arquivos de modelos para o seu tema:

Encontre onde

dynamic_sidebar('side_bar_name');

é chamado, e antes ou depois, ou praticamente em qualquer lugar do seu site, use:

$pageTitle =  get_the_title($post->ID); 
$targetPage = 'the title of the page you want to target goes here';

    if($pageTitle == $targetTitle){    
     the_widget( 'the_widget_unique_id_aka_name', $instance, $args);
    }
   //the_widget() calls a specific widget and displays it

Se você quer ser mais limpo: Crie uma função em functions.php que se pareça com:

function call_my_widget( $post ){
    $pageTitle =  get_the_title($post-ID); 
    $targetPage = 'the title of the page you want to target goes here';

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

chame a função com:

call_my_widget( $post );

isso deve ser chamado no loop ou onde a variável global $post é existente.

Em seguida, chame essa função em seu arquivo de modelo (page.php, talvez?) Para exibir seus widgets de destino apenas em sua página de destino.

1
Vigs

Você pode usar widget_display_callback: https://developer.wordpress.org/reference/hooks/widget_display_callback/ e apenas alterar o id da página no código abaixo.

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 );

Eu espero que isso ajude. Felicidades!

0
Jeffrey Carandang