Cum să adaugi un widget specific doar pe o singură pagină?

22 dec. 2012, 11:01:11
Vizualizări: 47.2K
Voturi: 7

Aș dori să afișez un widget doar pe o singură pagină a site-ului meu, din câte observ acest lucru nu este posibil, corect?

Ar trebui să îl adaug pentru toate paginile site-ului meu sau nu?

5
Comentarii

Este o temă personalizată sau un widget personalizat?

fuxia fuxia
22 dec. 2012 15:56:51

temă personalizată, FashionStyle de la SMthemes dot com

Filippo oretti Filippo oretti
22 dec. 2012 16:47:09

Opțiuni de Afișare pentru Widget Un alt Plugin care face asta

User User
18 apr. 2013 03:31:51

Este posibil. Cea mai ușoară metodă este să folosești un plugin precum http://wordpress.org/extend/plugins/display-widgets/

Mridul Aggarwal Mridul Aggarwal
22 dec. 2012 12:00:40

Iată o soluție mai bună care funcționează cu orice temă și este ușor de personalizat http://wordpress.stackexchange.com/questions/127111/display-custom-homepage-text-based-on-domain/128354#128354

Brad Dalton Brad Dalton
2 ian. 2014 20:34:48
Toate răspunsurile la întrebare 4
0

Depinde unde doriți să afișați widgetul.

Să începem cu înregistrarea zonei de widgeturi (sidebar):

add_action( 'wp_loaded', 'wpse_76959_register_widget_area' );
function wpse_76959_register_widget_area()
{
    register_sidebar(
        array (
            'name'          => __(
                'Widgets pe pagina Exemplu',
                'theme_textdomain'
                ),
            'description'   => __(
                'Va fi folosit doar pe o pagină cu slug-ul "sample-page".',
                'theme_textdomain'
                ),
            'id'            => 'sample-only',
            'before_widget' => '<div id="sample-only-widget">',
            'after_widget'  => '</div>',
            'before_title'  => '<h2>',
            'after_title'   => '</h2>',
        )
    );
}

Acest lucru este destul de simplu. Înregistrăm o nouă zonă de widgeturi cu un markup personalizat.

introduceți descrierea imaginii aici

Acum trebuie să o afișăm undeva. Am putea adăuga o acțiune personalizată în șablonul nostru page.php:

do_action( 'show_sample_widget' );

Sau am putea folosi o acțiune existentă, ceea ce ar limita locurile unde widgetul este disponibil. De exemplu, acțiunea loop_start este apelată prima dată când apelăm the_post() într-o buclă. Dacă dorim să setăm widgetul în partea de sus a conținutului paginii, folosim acel 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__ );
}

Pentru o acțiune personalizată, am folosi în schimb:

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

Există mai multe plugin-uri care permit afișarea widget-urilor în funcție de anumite condiții:

  • Display Widgets: Interfață simplă și curată
  • Widget Context: Oferă câteva opțiuni în plus față de precedentul
  • Dynamic Widgets: Cel mai bogat în funcționalități
  • Widget Logic: Destinat programatorilor, deoarece necesită scrierea condiției în cod PHP. De exemplu: is_page('about')

O soluție alternativă este oferită de următorul plugin, care vă permite să definiți un set personalizat de widget-uri pentru fiecare pagină, direct din ecranul de editare al paginii:

22 dec. 2012 20:25:03
2

Dacă ești confortabil să editezi fișierele de template ale temei tale:

Găsește unde este apelat

dynamic_sidebar('side_bar_name');

și fie înainte, fie după, sau practic oriunde pe site, folosește:

$pageTitle =  get_the_title($post->ID); 
$targetPage = 'aici introdu titlul paginii pe care vrei să o țintești';

    if($pageTitle == $targetTitle){    
     the_widget( 'the_widget_unique_id_aka_name', $instance, $args);
    }
   //the_widget() apelează un widget specific și îl afișează

Dacă vrei să fii mai organizat: Creează o funcție în functions.php care ar arăta astfel:

function call_my_widget( $post ){
    $pageTitle =  get_the_title($post-ID); 
    $targetPage = 'aici introdu titlul paginii pe care vrei să o țintești';

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

apelează funcția cu:

call_my_widget( $post );

aceasta trebuie apelată în buclă sau acolo unde variabila globală $post există.

Apoi apelează acea funcție în fișierul tău de template (page.php poate?) pentru a afișa widget-urile țintă doar pe pagina dorită.

9 iul. 2013 16:30:35
Comentarii

ce este $instance aici..?

Ari Ari
5 dec. 2014 12:51:00

Din Documentația WP: $instance (array|string) (opțional) Setările instanței widget-ului. Poate fi fie un array, fie un string în stil query. Vezi mai jos exemple pentru fiecare widget. În cazul meu a fost un array gol.

Vigs Vigs
25 dec. 2014 06:29:30
0

Poți folosi widget_display_callback : https://developer.wordpress.org/reference/hooks/widget_display_callback/ și doar să modifici ID-ul paginii în codul de mai jos.

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

Sper că te ajută. Noroc!

11 sept. 2017 10:18:39