Miglior modo per creare sidebar multiple

1 lug 2016, 09:17:10
Visualizzazioni: 19.1K
Voti: 6

Sono ben consapevole di come creare sidebar multiple. Ma credo che il mio metodo non sia il modo corretto per aggiungere più sidebar.

Ecco come aggiungo sidebar multiple

Se voglio semplicemente creare una sidebar, uso il file sidebar.php. MA se voglio usare un'altra sidebar, devo creare un altro file php come sidebar-new.php. Poi lo richiamo con:

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

Ciò significa che se voglio creare 4 sidebar, devo fare 4 file php!

MA ho visto molti temi (nel mercato WordPress) che offrono molte sidebar ma contengono solo un file php per la sidebar (sidebar.php)! Come fanno? Ho imparato a creare sidebar da Google in precedenza, ma nelle ricerche trovo solo i risultati che sto usando ora (creare file multipli per sidebar multiple).

Quindi, come posso creare sidebar multiple senza creare file php multipli!!???

1
Commenti

Guarderei alla creazione di una classe OOP per la sidebar e poi chiamerei la classe invece di get_sidebar. In questo modo, puoi passare valori diversi alla classe secondo necessità. Non vedo davvero altre soluzioni senza finire in un gran pasticcio

Pieter Goosen Pieter Goosen
1 lug 2016 10:15:19
Tutte le risposte alla domanda 3
13

Definire una nuova sidebar nel tuo file functions.php

<?php

if ( function_exists('register_sidebar') ) {

   register_sidebar(array(
   'before_widget' => '<li id="%1$s" class="widget %2$s">',
   'after_widget' => '</li>',
   'before_title' => '<h2 class="widgettitle">',
   'after_title' => '</h2>'
   ));

}?>

Una volta definite queste funzioni, noterai che una nuova sidebar apparirà nella Dashboard di WordPress sotto la voce Aspetto > Widget. È qui che puoi trascinare e rilasciare tutti i tuoi widget nelle varie sidebar.

<?php

if ( function_exists('register_sidebar') ) {

   register_sidebar(array(
   'name' => 'sidebar 1',
   'before_widget' => '<div id="%1$s" class="widget %2$s">',
   'after_widget' => '</div>',
   'before_title' => '<h2>',
   'after_title' => '</h2>'
    ));

   register_sidebar(array(
   'name' => 'footer sidebar 1',
   'before_widget' => '<div id="%1$s" class="widget %2$s">',
   'after_widget' => '</div>',
   'before_title' => '<h2>',
   'after_title' => '</h2>'
   ));

}?>

Aggiungere una nuova sidebar al tuo template

All'interno del tuo file sidebar.php, modifica la chiamata alla tua sidebar esistente per includere il nome che hai definito nel file functions.php in precedenza.

<?php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('sidebar 1') ) : ?>

   <h2>Articoli per mese</h2>
   <ul>
      <?php wp_get_archives('title_li=&type=monthly'); ?>
   </ul>
   <h2>Categorie</h2>
   <ul>
      <?php wp_list_categories('show_count=0&title_li='); ?>
   </ul>

<?php endif; ?>

Per aggiungere la tua nuova sidebar, puoi sia copiare il codice sopra che semplicemente copiare le seguenti righe. Aggiungi queste righe dove vuoi che appaiano i tuoi nuovi widget. In questo esempio puoi vedere dal nome che sto posizionando la mia nel footer del mio sito. Come prima, non dimenticare di specificare il nome corretto della sidebar. Nel codice sopra, l'html che appare tra le istruzioni php è ciò che apparirà quando non ci sono widget aggiunti alla tua sidebar. Questo codice 'predefinito' può ovviamente essere modificato per adattarsi al tuo tema. Nel codice seguente, poiché non c'è html aggiuntivo, nulla verrà visualizzato a meno che un widget non sia stato aggiunto alla sidebar nella tua Dashboard di WordPress.

<?php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('footer sidebar 1') ) : ?>
<?php endif; ?>
1 lug 2016 11:43:55
Commenti

Ok, sono un po' confuso qui! Primo, perché non hai usato l'id per registrare la sidebar? E come posso chiamare la sidebar nella mia homepage? Così get_sidebar();?

Rishabh Rishabh
1 lug 2016 12:59:10

L'ID non viene utilizzato perché la sidebar viene chiamata attraverso l'area widget e puoi chiamarla nella homepage semplicemente usando il nome dell'area widget nella tua homepage.

Owais Alam Owais Alam
1 lug 2016 13:02:00

Ma perché non riesco a vedere nessuna sidebar (che ho appena registrato) in Aspetto -> Widget?

Rishabh Rishabh
1 lug 2016 13:07:05

Hai applicato il codice sopra? Ci sono diversi modi per aggiungere una sidebar nei file del tuo tema.

Owais Alam Owais Alam
1 lug 2016 13:10:15

Il primo codice l'ho scritto in functions.php, il secondo codice l'ho digitato in functions.php (e poi anche in home.php) e l'ultimo codice l'ho inserito in sidebar.php. Cos'altro devo fare e dove?

Rishabh Rishabh
1 lug 2016 13:16:54

quindi che risposta ottieni nella tua area di amministrazione?

Owais Alam Owais Alam
1 lug 2016 13:19:09

Quel codice non ha alcun effetto nell'area di amministrazione! Hai testato questo metodo?

Rishabh Rishabh
1 lug 2016 13:21:14

Un'altra cosa! Quando ho inserito l'ID nella funzione della sidebar registrata, ha iniziato a comparire in Aspetto -> Widget

Rishabh Rishabh
1 lug 2016 13:23:00

Devi creare una sidebar e inserire il nome della sidebar nella funzione e poi chiamarla attraverso l'area widget. Sì, ho creato questo codice e l'ho utilizzato nel mio progetto.

Owais Alam Owais Alam
1 lug 2016 13:41:11

registrare la sidebar nel widget e chiamarla attraverso l'area widget nella tua homepage è chiaro?

Owais Alam Owais Alam
1 lug 2016 13:42:44

dovrei chiamarla come get_sidebar(); o in modo diverso? Se c'è un modo diverso di chiamarla, mostramelo

Rishabh Rishabh
1 lug 2016 13:45:49

chiamandola così e controlla il risultato <div class="third"> <?php if ( ! dynamic_sidebar('nome della tua sidebar')) : ?> <h2>Nome della tua sidebar</h2> <?php endif; ?> </div>

Owais Alam Owais Alam
1 lug 2016 13:50:01

No no no! sembra che tu stia capendo tutto male.. Stai suggerendomi di chiamare con questa funzione get_sidebar();. Se sì, allora chiamerà entrambe le sidebar contemporaneamente. E se volessi mostrare un widget nel footer e un altro widget nell'header? Questo caso non sembra possibile con il tuo codice e questa era la mia domanda effettiva!

Rishabh Rishabh
1 lug 2016 13:56:20
Mostra i restanti 8 commenti
4

Puoi differenziare tra le sidebar all'interno di sidebar.php. Non so quale sia il tuo scopo, ma supponiamo che tu voglia sidebar diverse per singoli articoli/pagine e altre pagine.

Nel tuo functions.php registreresti due sidebar con ID singular e default nel modo consueto utilizzando register_sidebar.

Poi in sidebar.php includeresti qualcosa come:

if (is_singular()) {
    dynamic_sidebar('singular');
} else {
    dynamic_sidebar('default');
}

Ovviamente, ci sono molti modi per variare questo approccio. Puoi mostrare sidebar diverse in base alla categoria o forse nessuna sidebar su un template di pagina speciale chiamato 'one-column'.

1 lug 2016 10:35:14
Commenti

Ho provato la tua soluzione e il risultato è esattamente quello che mi aspettavo. Mostra solo 1 sidebar! Quello che volevo sapere in realtà è un modo per aggiungere più sidebars in una pagina e posizionarle dove preferisco.

Rishabh Rishabh
1 lug 2016 11:01:40

Intendi che vuoi fare più chiamate a get_sidebar da index.php per avere sidebars in posizioni diverse?

cjbj cjbj
1 lug 2016 11:06:00

Sì, perché se voglio mostrare 2 sidebars diverse, una nel footer e l'altra in un'altra posizione come l'header, OPPURE entrambe le sidebars nel footer in una singola pagina, come potrei farlo?

Rishabh Rishabh
1 lug 2016 11:09:09

Corretto. Questo significa che devi passare un'informazione da index.php (il punto della chiamata) a sidebar.php. È una questione complessa con diverse soluzioni. Puoi leggere di più qui: http://wordpress.stackexchange.com/questions/228223/check-if-partial-file-is-called-from-within-header-php-or-footer-php?lq=1

cjbj cjbj
1 lug 2016 11:18:42
1

Puoi creare più sidebar utilizzando VC o l'editor di WordPress tramite https://codecanyon.net/item/custom-sidebar-visual-editor-wordpress-plugin/17329853

31 ago 2017 21:38:21
Commenti

Grazie per il suggerimento, ma volevo farlo da solo. Intendo senza l'aiuto di un plugin. Ma la tua risposta potrebbe essere utile per i visitatori futuri :)

Rishabh Rishabh
1 set 2017 08:53:50