Custom sidebar pentru un anumit articol sau pagină

Un client de-al meu avea la un moment dat nevoie de un meniu special pentru fiecare articol pe care-l făcusem pentru site-ul său de prezentare (asta pentru că a vrut ca site-ul de prezentare să funcţioneze pe platforma WordPress), iar eu, ca să fac asta, aveam nevoie de un sidebar diferit pentru fiecare post în parte.

Trebuia să fac în aşa fel încât să pot adăuga şi edita meniurile pentru fiecare articol fără să întru în cod de fiecare dată, pentru că dacă mai apărea câte-un link ce trebuia introdus în meniu, să şi-l poată introduce şi singur, fără cine ştie ce cunoştinţe de HTML şi CSS.

În rândurile ce vor urma, voi încerca să vă explic pe scurt despre ce-i vorba.

În primul rând, trebuie să-i spunem WordPress-ului că nu vrem să afişăm acelaşi sidebar pe fiecare pagină pe care-o afişează. Pentru a arăta un sidebar diferit în pagina unui articol, spre exemplu, va trebui să modificăm single.php.

Deschide single.php şi găseşte următoarea linie de cod (de obicei este spre sfârşitul documentului, penultimul rând):

<?php get_sidebar(); ?>

Acum înlocuieşte acea linie de cod cu următoarea:

<?php $sidebar = get_post_meta($post->ID, „sidebar”, true);
get_sidebar($sidebar);
?>

Acum va trebui să ne folosim de Custom Fields de fiecare dată când introducem un articol pentru care dorim un sidebar diferit. În josul paginii, chiar în momentul în care scrii articolul, vei observa un tab care se numeşte „Custom Fields”.
Custom sidebar pentru fiecare articol

Câmpul „Name” va fi întoteauna completat cu „sidebar”, pentru că aşa l-am declarat noi în single.php, undeva mai sus. Câmpul value va da numele sidebar-ului. În exemplul dat de mine mai sus, articolul pe care-l scriu, în loc să afişeze fişierul sidebar.php din template, va căuta sidebar-floreacristian.php.

Pentru că sidebar-floreacristian.php nu există, va trebui să-l fac singur. Am copiat sidebar.php, l-am redenumit, iar acum m-am pus pe modificat. Tot ce modific în sidebar-floreacristian.php, va apărea numai în articolele în care setez Custom Fields ca în imaginea de mai sus.

Ce-am făcut eu pentru clientul meu? Am făcut un astfel de sidebar pentru fiecare articol în parte (au fost doar 10 articole), am creat 10 sidebar-uri noi în functions.php, apoi am adăugat câte-un widget în fiecare dintre ele, aşa cum am explicat aici. Omul poate acum să modifice meniurile direct din Appearance » Menus, sau întregul sidebar din Appearance » Widgets.

Pentru ca sidebar-ul să fie diferit pentru pagini, nu pentru articole, va trebui să facem modificări în page.php, nu în single.php.

Lasă un comentariu

14 comentarii

  • Bogdan 30 Apr 2011, ora 16:10

    Ciudata cerinta, ai putea sa exemplifici si cu siteul in cauza? Oricum, buna rezolvarea, cred ca era singura varianta, o sa ma mai gandesc, totusi mai simplu decat cu Custom Fields nu cred ca se putea…

    • Florea Cristian 30 Apr 2011, ora 21:18

      momentan nu pot divulga site-ul, pentru ca nu este gata si lucrez pe un subdomeniu la el. cand o sa-l lansez, o sa-ti pot spune despre ce-i vorba.

  • ramicori 30 Apr 2011, ora 20:23

    putin complicat pentru mine, dar o sa incerc sa vad daca pot sa reusesc.

  • Myky 1 Mai 2011, ora 16:22

    Salut Grim. Am o rugaminte la tine.

    De unde setez sa imi apara in sidebar, cele mai recente articole si mai jos, cele mai comentate ? Mersi :D

    • Florea Cristian 1 Mai 2011, ora 20:29

      din appearance » widgets, dar s-ar putea sa n-ai widget-urile in lista. instaleaza GD Simple Widgets

      • Myky 2 Mai 2011, ora 13:37

        Mersi.

  • Zoly 2 Mai 2011, ora 10:04

    Uhuu!!! Chiar aveam nevoie de asa ceva :) MULTAM FAIN!

  • articole copii 2 Mai 2011, ora 13:27

    E fain sa ai sidebar diferit la fiecare articol, dar eu nu as avea sa pun atatea…

    • Florea Cristian 2 Mai 2011, ora 14:07

      nu la fiecare articol, dar poate ai un artcol mai special (gen vreun caz umanitar), sau pagina cu blogroll-ul, in care nu vrei sa apara orice fel de sidebar

  • ceasuri mana 2 Mai 2011, ora 13:30

    Nu e foarte greu, dar e fain :)

  • ady 15 Mar 2012, ora 18:23

    Merci!!!