Afișarea unui sidebar dinamic cu widget-uri specifice pe o anumită pagină

16 sept. 2011, 08:14:05
Vizualizări: 34.7K
Voturi: 1

Mi s-a predat un site WordPress la jumătatea finalizării. A trecut cel puțin un an de când am lucrat ultima dată cu WordPress și găsesc multe lucruri diferite. Modul în care eram obișnuit să afișez conținut diferit pe pagini diferite era să creez șabloane de pagină pentru fiecare pagină care necesită conținut unic.

Încerc să afișez un sidebar diferit pe o anumită pagină față de restul site-ului. Ceea ce aș fi făcut acum un an ar fi să creez un șablon de pagină și să fac un nou fișier sidebar pe care să-l includ în șablonul paginii. Am descoperit că acest lucru nu funcționează. Principalele probleme pe care le pot vedea sunt loop.php și loop-page.php, care nu existau în tema simplificată pe care o foloseam de obicei când construiam un site în trecut. Cu toate acestea, se pare că cine a lucrat înainte la acest proiect a copiat tema 'twenty ten' și a făcut modificări sub un nume nou.

Am înregistrat un nou sidebar dinamic în functions.php al temei și îl pot vedea în secțiunea Widgets din Dashboard și pot adăuga widget-uri la acesta.

Nu reușesc însă să-l afișez pe pagina dorită. Am încercat următoarele:

1.) Am dat paginii un șablon personalizat template_news.php și am plasat următorul cod unde ar trebui apelat sidebar-ul:

include ('sidebar-news.php');

Fișierul sidebar-news.php conține codul copiat din sidebar.php cu ID-ul sidebar-ului "News" pe care l-am listat în 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; ?>

Șablonul paginii este aplicat paginii corecte.

2.) Am modificat în page.php din:

<?php get_sidebar(); ?>

în:

<?php 

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

Am verificat de mai multe ori pentru a mă asigura că ID-ul paginii este corect și am încercat să folosesc și slug-ul în loc de ID, dar fără succes.

3.) Am încercat codul anterior în loop-page.php

4.) Am plasat următoarea declarație condițională în 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; ?>

De asemenea, după ce am făcut cercetări și am aflat că modul corect de a extinde sau modifica funcționalitatea unei teme este să creez o temă copil, am încercat să fac asta, dar a cauzat unele probleme pe care nu am timp să încerc să le rezolv.

Am descoperit că sidebar.php implicit este apelat și afișat pe pagină, totuși, chiar dacă declarația mea condițională cu ID-ul paginii este prezentă, nu afișează widget-urile sidebar-ului personalizat.

De asemenea, nu pot găsi cum este apelat sidebar-ul implicit pe pagină deoarece eliminarea completă a get_sidebar(); din șablonul meu personalizat template_news.php, page.php sau loop-page.php nu pare să aibă niciun efect.

Vă rog să mă ajutați să înțeleg cum pot adăuga acest sidebar pe pagină.

1
Comentarii

Un alt Plugin este Widget Display Options

User User
4 mai 2013 17:34:35
Toate răspunsurile la întrebare 2
6

Cred că ai nevoie pur și simplu să apelezi register_sidebar() într-un hook 'widgets_init'. Tema TwentyTen are exemple pentru register_sidebar() în fișierul său functions.php, dar iată cum ar putea arăta:

add_action( 'widgets_init', 'twentyten_widgets_init' );
function twentyten_widgets_init() {
  register_sidebar( array(
    'name' => __( 'Bara laterală știri', 'yoursite' ),
    'id' => 'sidebar-news',
    'description' => __( 'Zona barei laterale pentru știri', 'yoursite' ),
    'before_widget' => '<li id="%1$s" class="widget-container %2$s">',
    'after_widget' => '</li>',
    'before_title' => '<h3 class="widget-title">',
    'after_title' => '</h3>',
  ));

  /*
   * RESTUL CODULUI DE ÎNREGISTRARE A BAREI LATERALE DIN twentyten_widgets_init() SE ADĂUGĂ AICI
   */
}

De asemenea, în șablonul tău de pagină template_news.php folosește următorul cod pentru a apela bara ta laterală, care va încărca fișierul sidebar-news.php pe care l-ai creat mai sus:

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

Nu ar trebui să ai nevoie de celelalte încercări pe care le-ai făcut, și cu siguranță nu de niciun include.

16 sept. 2011 09:35:58
Comentarii

Am făcut deja asta. A fost primul lucru pe care l-am încercat exact cum ai descris. Totuși, nu funcționează. Codul din șablonul meu personalizat pentru conținut și bara laterală este suprascris de setările implicite din loop.php și loop-page.php.

biggles biggles
16 sept. 2011 18:03:56

@jlego - Hmm. Am testat soluția inițială cu TwentyEleven și am retestat acum cu TwentyTen și funcționează. loop.php și loop-page.php nu au nicio legătură cu generarea barei laterale, decât dacă celălalt developer a făcut niște modificări foarte ciudate. Poți să actualizezi întrebarea ta și să postezi acele două fișiere, precum și conținutul fișierului tău template_news.php?

MikeSchinkel MikeSchinkel
16 sept. 2011 18:27:23

@jlego - De asemenea, dacă nu ai PhpStorm + Zend Debugger în setul tău de unelte, ai putea să iei în considerare obținerea unei copii. Cu acesta, ai putea să urmărești site-ul linie cu linie și să vezi exact de ce funcționează sau nu funcționează.

MikeSchinkel MikeSchinkel
16 sept. 2011 18:32:07

Era extrem de frustrant pentru mine, pentru că știam că asta ar trebui să funcționeze și verificasem toate variabilele pentru a mă asigura că am setat corect template-ul și nu aveam greșeli în cod. S-a dovedit că cine a lucrat la el înaintea mea a reușit să afișeze o listă de bloguri pe pagină prin setarea acelei pagini specifice ca pagină de "articole" în administrarea WordPress. Așa că, atunci când am încercat să creez un template personalizat, acea setare suprascria template-ul meu și forța pagina să ruleze codul din acele fișiere. Oricum, mulțumesc pentru ajutor. Voi încerca PHPStorm și Zend Debugger.

biggles biggles
17 sept. 2011 06:38:53

Chiar dacă aceasta nu a rezolvat problema specifică pe care o aveam, aceasta este metoda corectă de a adăuga o bară laterală pe pagină. Cred că soluția reală la problema mea era specifică cazului meu, așa că îți marchez răspunsul ca soluție la această întrebare, având în vedere numărul mare de vizualizări pe care le are întrebarea.

biggles biggles
4 sept. 2013 00:49:51

@jlego - Uau, mulțumesc că ai revenit la această întrebare după atâta timp. Oricum, îmi pare rău că nu am putut să te ajut cu cazul tău specific.

MikeSchinkel MikeSchinkel
5 sept. 2013 17:34:12
Arată celelalte 1 comentarii
1

Pentru a afișa un widget doar pe anumite pagini, unde toate paginile tale au aceeași bară laterală, poți folosi unul dintre aceste plugin-uri:

Display Widgets

Pur și simplu ascunde widget-urile pe paginile specificate. Adaugă casete de bifat la fiecare widget pentru a-l afișa sau ascunde pe fiecare pagină a site-ului.

Widget Logic

Widget Logic îți permite să controlezi pe ce pagini apar widget-urile folosind tag-urile condiționale ale WordPress. De asemenea, adaugă un filtru 'widget_content'.

16 sept. 2011 19:08:56
Comentarii

De asemenea, un alt plugin excelent pentru aceasta este https://wordpress.org/plugins/dynamic-widgets/

NickFMC NickFMC
16 ian. 2015 04:15:36