Căutați o modalitate de a crea și atașa dinamic bare laterale la pagini sau postări? Deși probabil există un plugin pentru asta, am creat o scurtă secțiune de cod pe care o puteți folosi pentru a crea și atașa dinamic bare laterale la pagini sau postări.
Această secțiune vă va permite să creați cu ușurință bare laterale noi, adăugând pur și simplu numele la un array. Veți putea, de asemenea, să definiți bara laterală creată dinamic atunci când o pagină este încărcată, selectând din metabox-ul de selecție a barei laterale personalizate.
În primul rând, va crea un nou metabox în editorul de pagini, permițându-vă să atașați una dintre barele laterale create dinamic. În al doilea rând, veți observa un array de nume, de ex: Bara laterală 01, Bara laterală 02, etc. Acestea sunt numele barelor laterale create dinamic pe care le puteți schimba sau la care puteți adăuga bare laterale noi.
Instrucțiuni:
Tot ce trebuie să faceți este să adăugați acest cod în fișierul functions.php al temei dvs. sau într-un plugin specific site-ului
$dynamic_widget_areas = array(
/* rename or create new dynamic sidebars */
"Sidebar 01",
"Sidebar 02",
"Sidebar 03",
"Sidebar 04",
"Sidebar 05",
"Sidebar 06",
"Sidebar 07",
"Search Template",
);
if ( function_exists('register_sidebar') ) {
foreach ($dynamic_widget_areas as $widget_area_name) {
register_sidebar(array(
'name'=> $widget_area_name,
'before_widget' => '<div id="%1$s" class="widget %2$s left half">',
'after_widget' => '</div>',
'before_title' => '<h3 class="widgettitle">',
'after_title' => '</h3>',
));
}
}
add_action("admin_init", "sidebar_init");
add_action('save_post', 'save_sidebar_link');
function sidebar_init(){
add_meta_box("sidebar_meta", "Sidebar Selection", "sidebar_link", "page", "side", "default");
}
function sidebar_link(){
global $post, $dynamic_widget_areas;
$custom = get_post_custom($post->ID);
$link = $custom["_sidebar"][0];
?>
<div class="link_header">
<?
echo '<select name="link" class="sidebar-selection">';
echo '<option>Select Sidebar</option>';
echo '<option>-----------------------</option>';
foreach ( $dynamic_widget_areas as $list ){
if($link == $list){
echo '<option value="'.$list.'" selected="true">'.$list.'</option>';
}else{
echo '<option value="'.$list.'">'.$list.'</option>';
}
}
echo '</select><br />';
?>
</div>
<p>Select sidebar to use on this page.</p>
<?php
}
function save_sidebar_link(){
global $post;
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {return $post->ID;}
update_post_meta($post->ID, "_sidebar", $_POST["link"]);
}
add_action('admin_head', 'sidebar_css');
function sidebar_css() {
echo'
<style type="text/css">
.sidebar-selection{width:100%;}
</style>
';
}
Copiați secțiunea de cod de mai jos și înlocuiți tot codul din fișierul sidebar.php al temei dvs. WordPress și sunteți gata.
<!-- begin sidebar -->
<div id="sidebar">
<?
global $post;
$custom = get_post_custom($post->ID);
$link = $custom["_sidebar"][0];
if($link != ''){
echo '<ul id="widgets">';
if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar($link) ) :
endif;
echo '</ul>';
}
?>
</div>
<!-- end sidebar -->
Notă: Dacă este prima dată când adăugați secvențe de cod în WordPress, consultați ghidul nostru despre cum să copiați / lipiți corect secvențe de cod în WordPress, pentru a nu vă defecta accidental site-ul.
Dacă v-a plăcut această secțiune de cod, vă rugăm să luați în considerare să consultați și alte articole de pe site, cum ar fi: Cele mai bune 10 pluginuri WordPress pentru dezvoltatori web și Cum să creați un formular cu mai multe pagini în WordPress.
schimbați codul.
<?php
Salut Kevin,
Mulțumesc pentru cod. Am nevoie de ajutor. Vreau să afișez a 2-a bară laterală sub prima. Cum pot face asta?? Vă rog să mă ajutați!!!
Salut Kevin
Caseta derulantă nu funcționează în wordpress3.8. Aveți idei?
Salut Kevin.
Sunt cam nou în asta și am nevoie de puțin ajutor. Am instalat acest plugin, dar am probleme cu CSS, aveți sfaturi?
Apropo, acest plugin este grozav!
Dacă cineva are o problemă cu bara laterală care nu apare, încercați asta în loc de partea 2:
post->ID;
$link = get_post_meta($postid, ‘_sidebar’, true);
if($link != ”){
echo ”;
if (function_exists(‘dynamic_sidebar’) && dynamic_sidebar(($link))) :endif;
echo ”;
} wp_reset_query(); ?>
totul funcționează excelent,
dar se pare că nu știți ce bară laterală este selectată când vă întoarceți la pagina dvs. Am implementat greșit? sau există o modalitate ușoară de a avea dropdown-ul preselectat dacă este aleasă bara laterală a paginii respective….
mulțumesc
Notificare: Index nedefinit: _sidebar în /home/
Primesc această eroare în bara laterală în archive.php și pagini, postări fără bară laterală selectată.
Nu trece de debug. Aveți idei?
Salutare, prieteni,
Folosesc codul în Thesis. Totul arată grozav pentru mine, cu excepția unui lucru.
Am redenumit „Bara laterală 01” în „Produs 01” și, prin urmare, s-a schimbat în zona mea de editare a postării, dar în zona de widget-uri încă îmi arată Bara laterală 01 și respectiv.. Cineva mă poate ajuta, astfel încât numele din zona de widget-uri să fie schimbat și el?? Mulțumiri & Salutări.
mulțumesc pentru asta, mi-a salvat ziua lol, o problemă este că apare doar în post sau pagină și nu în post și pagină, am rezolvat adăugând următoarele la funcția sidebar_init:
add_meta_box("sidebar_meta", "Selecție bară laterală", "sidebar_link", "page", "side", "default");Mi-ar plăcea totuși să fie puțin mai dinamic, de exemplu, în loc să predefiniți cantitatea de sidebar-uri create, permiteți utilizatorului administrator să introducă o cantitate de sidebar-uri de creat, apoi afișați-le în meniul derulant. Aveți idei cum?
Mulțumesc pentru răspunsul tău. Când vizitez ecranul „Edit Page” unde este adăugată caseta meta, sidebar-urile pe care le-am stocat în array-ul „$dynamic_widget_areas” nu sunt afișate în caseta derulantă „Sidebar Selection” ca opțiune. În schimb, primesc următoarele erori în jurnalul meu de depanare:
Încerc să transform asta într-un plugin, astfel încât oamenii să poată avea o interfață de administrator pentru a crea noi sidebar-uri.
Daniel, ai putea posta un fragment mai mare din asta? Am implementat codul de mai sus în tema mea, dar nu eram sigur unde ar trebui să meargă adăugarea ta... face parte din fișierul sidebar.php sau din fișierul functions?
Întrebare…
Este necesar un anumit nivel de sanitizare pentru ca acest lucru să fie adăugat la o temă din motive de securitate?
Salut, mulțumesc pentru acest fragment. Cum pot adăuga selecția la categorii?
Dacă înțeleg corect, te referi la atribuirea sidebar-urilor pe baza categoriei?
Sunt foarte mulțumit de acest post și foarte util, în special pentru mine. Sper că este util și pentru alți utilizatori WordPress. O treabă grozavă din partea ta, dragă Kevin Chard. Mulțumesc
Nicio problemă, mă bucur să aud că îți place fragmentul.
hmm, nu reușesc să fac asta să funcționeze. primesc în continuare eroarea: “Undefined index: _sidebar in [THEME_PATH]/functions.php on line 97”
caseta de selecție apare pe ecranul de editare, dar niciunul dintre sidebar-urile create în array nu apar în meniul derulant. aveți idei cum să remediați asta?
Salut Chris,
Asigură-te că sidebar-ul tău este gol, folosește doar codul pe care l-am postat mai sus. _sidebar este locul unde sunt salvate informațiile. Unde este afișată eroarea? Este pe pagina editorului sau când încerci să salvezi fișierul functions.php?
Kevin,
Mulțumesc pentru răspunsul dumneavoastră. Când vizitez ecranul „Editare pagină” unde este adăugat caseta meta, barele laterale pe care le-am stocat în matricea „$dynamic_widget_areas” nu se afișează în caseta derulantă „Selecție bară laterală” ca opțiune. În schimb, primesc următoarele erori în jurnalul meu de depanare:
“Undefined index: _sidebar in [THEME_PATH]/functions.php on line 110”
“PHP Warning: Invalid argument supplied for foreach() in [THEME_PATH]/functions.php on line 118”
De asemenea, când vizitez o pagină care ar trebui să afișeze un sidebar, primesc această eroare:
“Undefined index: _sidebar in [THEME_PATH]/sidebar.php on line 17”
Nu am modificat codul tău de mai sus și da, le pun în locurile corecte. Orice ajutor este foarte apreciat!
hhmmm Chris, este ciudat, nu ai cumva un plugin care ar putea cauza probleme cu acest cod? sau alt cod din fișierul functions.php? dacă încă ai probleme, îl voi configura ca un plugin pe care îl poți descărca, să vedem dacă asta rezolvă lucrurile.
Salut din nou,
Îmi pare rău, lucram pe localhost, am încercat să-l încarc pe găzduirea mea și a funcționat fără nicio problemă. Ai idee de ce nu funcționează pe Wampserver?
Și unde poate adăuga administratorul WordPress un nou sidebar? Doar din acel array sau există o opțiune „Adaugă Sidebar Nou” pe ecranul de previzualizare? Nu am văzut o astfel de opțiune de adăugare.
Mulțumesc din nou pentru fragmentele tale grozave.
Hakan
Salut Hakan, Mă bucur să aud că ai rezolvat problemele, deși este foarte ciudat că nu funcționează local, sincer să fiu, nu sunt sigur de ce. În ceea ce privește actualizarea, deocamdată trebuie să actualizezi în continuare array-ul. Deși, din cauza feedback-ului pe care îl primesc, s-ar putea să rezolv lucrurile și să îl lansez ca un plugin în viitor, cu o interfață de administrare.
Încă o dată mulțumesc Hakan, mă bucur să aud că îți plac fragmentele de cod.
Salut Kevin,
Îmi pare rău, dar rezultatul este același. Nicio schimbare. În zona mea de administrare, primesc:
‘; echo ”; echo ”; foreach ( $dynamic_widget_areas as $list ){ if($link == $list){ echo ”; }else{ echo ”; } } echo ‘
‘; ?>Selectează bara laterală de utilizat pe această pagină.
sub Partea de selecție a barei laterale din dreapta și pe site-ul de previzualizare, primesc:
ID); $link = $custom[“_sidebar”][0]; if($link != ”){ echo ”; if ( !function_exists(‘dynamic_sidebar’) || !dynamic_sidebar($link) ) : endif; echo ”; } ?>
Idee grozavă. A trebuit să creez pagini separate de șabloane pentru bara laterală, sau doar șabloane separate pentru site-ul meu, deoarece aveam tendința să folosesc multe bare laterale (bare laterale personalizate pentru fiecare pagină pe care o cream, practic). Cred că este grozav de utilizat pentru testarea A/B și marketing avansat (CTA-uri specifice în bara laterală legate de pagini specifice). Mulțumesc! :)
Salut Antonin
Mă bucur să aud că îți place, am postat acum ceva timp doar despre prima jumătate pentru a crea partea de bare laterale folosind array-ul. Apoi, când lucram la o temă, a trebuit să le atașez și mi-a venit această idee.
Salut Kevin,
Când aplic codul tău, văd
„‘; echo ”; echo ”; foreach ( $dynamic_widget_areas as $list ){ if($link == $list){ echo ”; }else{ echo ”; } } echo ‘
‘; ?>
Selectează bara laterală de utilizat pe această pagină.”
pe bara laterală a paginii mele la „Selecție bară laterală”
Ai vreo idee despre asta?
Salut Hakan, vezi codul din interiorul paginii?
Salut Hakan,
Am încărcat prima parte pentru a funcționa ca un plugin, deci acest lucru ar putea fi mai ușor pentru tine de configurat.
http://wpsnipp.com/wp-content/uploads/2011/11/sidebars.php_.zip
Deschide zip-ul și încarcă acest fișier în folderul tău de plugin-uri, apoi adaugă al doilea cod de mai sus pentru a înlocui codul barei tale laterale. Nu uita să activezi plugin-ul numit attach sidebars. Sper că acest lucru ajută.
Ai publicat asta pentru Wordpress? Dacă da, trimite-mi un link pe twitter (@antjanus), voi scrie un articol despre asta (și îl voi recomanda tuturor 🙂 ).
Ca plugin este limitat, mă gândeam că motivul pentru care Hakan a avut o problemă a fost doar locația din fișierul functions.php, așa că l-am transformat într-un plugin pentru a rezolva problema lui mai repede. Are nevoie de un fel de interfață pentru ca oamenii să poată adăuga noi bare laterale înainte să îl pot lansa ca plugin, deoarece array-ul nu este practic.
Punct bun. Anunță-mă când ai terminat (sau dacă o faci până la urmă) :)