X

Come Creare e Collegare Dinamicamente Sidebar a Pagine o Articoli

Snippet di IsItWP

Stai cercando un modo per creare e collegare dinamicamente sidebar a pagine o articoli? Sebbene esista probabilmente un plugin per questo, abbiamo creato un rapido snippet di codice che puoi utilizzare per creare e collegare dinamicamente sidebar a pagine o articoli.

Questo snippet ti permetterà di creare facilmente nuove sidebar semplicemente aggiungendo il nome a un array. Sarai anche in grado di definire la sidebar creata dinamicamente quando una pagina viene caricata selezionandola dalla metabox di selezione della sidebar personalizzata.

Innanzitutto, creerà una nuova metabox all'interno dell'editor delle pagine che ti permetterà di collegare una delle sidebar create dinamicamente. In secondo luogo, noterai un array di nomi, ad esempio: Sidebar 01, Sidebar 02, ecc. Questi sono i nomi delle sidebar create dinamicamente che puoi modificare o a cui puoi aggiungere nuove sidebar.

Istruzioni:

Tutto quello che devi fare è aggiungere questo codice al file functions.php del tuo tema o a un plugin specifico per il sito

    $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 lo snippet di codice qui sotto e sostituisci tutto il codice all'interno del tuo file sidebar.php del tuo tema WordPress e sei pronto.

<!-- 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 -->

Nota: Se questa è la prima volta che aggiungi snippet di codice in WordPress, consulta la nostra guida su come copiare / incollare correttamente snippet di codice in WordPress, in modo da non rompere accidentalmente il tuo sito.

Se ti è piaciuto questo snippet di codice, considera di leggere i nostri altri articoli sul sito come: 10 migliori plugin WordPress per sviluppatori web e come creare un modulo multipagina in WordPress.

Commenti   Lascia una risposta

  1. cambia il tuo codice.

  2. Ciao Kevin,

    Grazie per il codice. Ho bisogno di aiuto. Voglio visualizzare la seconda sidebar sotto la prima. come posso fare?? Per favore aiutami!!!

  3. ciao Kevin

    Il dropdown non funziona in wordpress 3.8. qualche idea

  4. Crvenkoski Mihajlo 11 maggio 2013 alle 09:41

    Ciao Kevin.
    Sono un po' nuovo in questo e ho bisogno di un piccolo aiuto. Ho installato questo plugin ma ho problemi con il CSS, qualche consiglio?
    A proposito, questo plugin è fantastico!

  5. Se qualcuno ha problemi con la sidebar che non viene visualizzata, provi questo invece della parte 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(); ?>

  6. tutto funziona benissimo,
    ma sembra che tu non sappia quale sidebar è selezionata quando torni alla tua pagina. l'ho implementato male? o c'è un modo semplice per avere il dropdown pre-selezionato se viene scelta la sidebar di quella pagina...

    grazie

  7. Avviso: Indice non definito: _sidebar in /home/

    Sto ricevendo questo errore nella barra laterale in archive.php e nelle pagine, nei post senza barra laterale selezionata.

    Non supera il debug. Qualche idea?

  8. Ciao amici,

    Sto usando il codice in thesis. Tutto sembra andare bene tranne una cosa.
    Ho rinominato "Sidebar 01" in "Product 01" e quindi è stato modificato nell'area di modifica del post, ma nell'area dei widget mostra ancora Sidebar 01 e rispettivamente.. Qualcuno può aiutarmi in modo che anche il nome nell'area dei widget possa essere modificato?? Grazie e saluti.

  9. grazie per questo, mi ha salvato la giornata lol, un problema è che appare solo nel post o nella pagina e non nel post e nella pagina, l'ho risolto aggiungendo quanto segue alla funzione sidebar_init:

     add_meta_box("sidebar_meta", "Selezione barra laterale", "sidebar_link", "page", "side", "default");

    Mi piacerebbe tuttavia che fosse un po' più dinamico, invece di predefinire la quantità di barre laterali create, consentire all'amministratore di inserire una quantità di barre laterali da creare, quindi visualizzare quelle nel menu a discesa. Qualche idea su come fare? 

    grazie per un ottimo snippet.

    1. Sto pensando di trasformarlo in un plugin in modo che le persone possano avere un'interfaccia di amministrazione per creare nuove barre laterali.

    2. Daniel, potresti pubblicare uno snippet più grande di questo? Ho implementato il codice sopra nel mio tema, ma non ero sicuro di dove dovesse andare la tua aggiunta... fa parte del file sidebar.php o del file functions?

  10. Domanda...

    C'è bisogno di un qualche livello di sanificazione per aggiungere questo a un tema per motivi di sicurezza?

  11. Ciao, grazie per questo snippet. Come posso aggiungere la selezione alle categorie?

    1. Se ho capito bene, intendi assegnare le barre laterali in base alla categoria?

  12. Sono molto felice di questo post e molto utile specialmente per me. Spero che sia utile anche per altri utenti di WordPress. Ottimo lavoro da parte tua caro Kevin Chard. Grazie

    1. Nessun problema, sono felice di sapere che ti piace lo snippet.

  13. hmm non riesco a farlo funzionare. continuo a ricevere il seguente errore: “Undefined index: _sidebar in [THEME_PATH]/functions.php on line 97”

    la select box appare nella schermata di modifica della pagina, ma nessuna delle sidebar create nell'array appare nel menu a tendina. qualche idea su come rimediare?

    1. Ciao Chris,
      Assicurati che la tua sidebar sia vuota, usa il codice che ho postato sopra. Il _sidebar è dove vengono salvate le informazioni. Dove viene visualizzato l'errore? è nella pagina dell'editor o quando provi a salvare il tuo functions.php?

      1. Kevin,

        Grazie per la tua risposta. Quando visito la schermata "Modifica Pagina" dove è stata aggiunta la meta box, le sidebar che ho memorizzato nell'array "$dynamic_widget_areas" non vengono visualizzate nella casella di riepilogo "Selezione Sidebar" come opzione. Invece, ricevo i seguenti errori nel mio log di debug:

        “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”

        Inoltre, quando visito una pagina che dovrebbe visualizzare una sidebar, ricevo questo errore: 

        “Undefined index: _sidebar in [THEME_PATH]/sidebar.php on line 17”

        Non ho alterato il tuo codice sopra, e sì, li sto mettendo nei posti giusti. Qualsiasi aiuto è molto apprezzato!

        1. hhmmm Chris, è strano, non avrai per caso un plugin che potrebbe causare problemi con questo codice? o altro codice all'interno del functions.php? se hai ancora problemi, lo imposterò come plugin scaricabile per vedere se questo risolve le cose.

  14. Ciao di nuovo,

    Mi dispiace, stavo lavorando sul mio localhost, ho provato a caricarlo sul mio hosting e ha funzionato senza alcun problema. Hai qualche idea sul perché non funziona su Wampserver?

    E dove può l'admin di wordpress aggiungere una nuova sidebar? Solo da quell'array o c'è un'opzione "Aggiungi Nuova Sidebar" nella schermata di anteprima? Non ho visto un'opzione di aggiunta simile.

    Grazie ancora per i tuoi ottimi snippet.

    Hakan

    1. Ciao Hakan, sono contento di sentire che hai risolto le cose, anche se è molto strano che non funzioni localmente, ad essere sincero non ne sono sicuro. Per quanto riguarda l'aggiornamento, al momento devi ancora aggiornare l'array. Anche se, a causa del feedback che sto ricevendo, potrei sistemare le cose e rilasciarlo come plugin in futuro con un'interfaccia amministrativa.

      Grazie ancora Hakan, sono contento che ti piacciano gli snippet.

  15. Ciao Kevin,

    Mi dispiace ma il risultato è lo stesso. Nessun cambiamento. Nella mia area admin, ricevo:

    ‘; echo ”; echo ”; foreach ( $dynamic_widget_areas as $list ){ if($link == $list){ echo ”; }else{ echo ”; } } echo ‘
    ‘; ?>Seleziona la sidebar da usare in questa pagina.
    sotto la parte Selezione Sidebar sul lato destro e sul sito di anteprima, ricevo:

    ID); $link = $custom[“_sidebar”][0]; if($link != ”){ echo ”; if ( !function_exists(‘dynamic_sidebar’) || !dynamic_sidebar($link) ) : endif; echo ”; } ?>

  16. Antonin Januska 4 novembre 2011 alle 16:39

    Ottima idea. Ho dovuto creare pagine separate per i template della barra laterale, o semplicemente template separati per il mio sito web perché tendevo a usare molte barre laterali (barre laterali personalizzate per ogni pagina che creavo, in pratica). Penso che sia fantastico da usare per l'A/B testing e per il marketing avanzato (CTA specifici nella barra laterale collegati a pagine specifiche). Grazie! :)

    1. Ciao Antonin
      Sono contento che ti piaccia, ho pubblicato tempo fa solo la prima metà per creare la parte delle barre laterali usando l'array. Poi, mentre lavoravo a un tema, ho avuto bisogno di allegarle e mi è venuta questa idea.

  17. Ciao Kevin,
    Quando applico il tuo codice, vedo 

    “‘; echo ”; echo ”; foreach ( $dynamic_widget_areas as $list ){ if($link == $list){ echo ”; }else{ echo ”; } } echo ‘
    ‘; ?>
    Seleziona la barra laterale da usare in questa pagina.”

    nella barra laterale della mia pagina in "Selezione barra laterale"

    Hai qualche idea al riguardo?

    1. Ciao Hakan, vedi il codice all'interno della pagina?

    2. Ciao Hakan,
      Ho caricato la prima parte per funzionare come un plugin, quindi potrebbe essere più facile per te configurarlo.
      http://wpsnipp.com/wp-content/uploads/2011/11/sidebars.php_.zip
      Apri lo zip e carica questo file nella tua cartella plugin, quindi aggiungi il secondo codice sopra per sostituire il codice della tua barra laterale. Non dimenticare di attivare il plugin chiamato "attach sidebars". Spero che questo aiuti.

      1. Antonin Januska 4 novembre 2011 alle 16:42

        Hai pubblicato questo per WordPress? Se sì, inviami un link tramite Twitter (@antjanus), ne scriverò un articolo (e lo raccomanderò a tutti 🙂 ). 

        1. Come plugin è limitato, pensavo che il motivo per cui Hakan aveva un problema fosse solo la posizione nel file functions.php, quindi l'ho reso un plugin per risolvere il suo problema più velocemente. Ha bisogno di avere una qualche interfaccia in modo che le persone possano aggiungere nuove barre laterali prima che io possa rilasciarlo come plugin, poiché l'array non è pratico.

          1. Antonin Januska 10 novembre 2011 alle 17:33

            Buon punto. Fammi sapere quando l'hai fatto (o se lo fai alla fine) :)

Aggiungi un commento

Siamo lieti che tu abbia scelto di lasciare un commento. Tieni presente che tutti i commenti sono moderati secondo la nostra normativa sulla privacy e tutti i link sono nofollow. NON utilizzare parole chiave nel campo del nome. Avviamo una conversazione personale e significativa.

Checklist per il lancio di WordPress

La Guida Definitiva per il Lancio di WordPress

Abbiamo raccolto tutti gli elementi essenziali della checklist per il lancio del tuo prossimo sito web WordPress in un comodo ebook.
Sì, Inviami l'eBook Gratuito!