Mostrare i widget di una sidebar dinamica specifica su una pagina specifica
Mi è stato affidato un sito WordPress a metà del suo completamento. È passato almeno un anno dall'ultima volta che ho usato WordPress e sto trovando molte cose diverse. Il modo in cui ero abituato a visualizzare contenuti diversi su pagine diverse era quello di creare template di pagina per ogni pagina che necessitava di contenuti unici.
Sto cercando di visualizzare una sidebar diversa su una pagina particolare rispetto al resto del sito. Quello che avrei fatto un anno fa sarebbe stato creare un template di pagina per questa pagina e creare un nuovo file sidebar per poi includerlo nel template della pagina. Ho scoperto che questo non funziona. I principali responsabili che posso vedere sono loop.php
e loop-page.php
, che non esistevano nel tema base che usavo tipicamente quando costruivo un sito tempo fa. Tuttavia, sembra che chi ci ha messo le mani prima di me abbia copiato il tema 'twenty ten' e vi abbia apportato modifiche con un nuovo nome.
Ho registrato una nuova sidebar dinamica nel file functions.php
del tema e posso vederla nella sezione Widget della Dashboard e aggiungere widget ad essa.
Non riesco assolutamente a farla visualizzare nella pagina in cui la voglio però. Ho provato quanto segue:
1.) Ho dato alla pagina un template personalizzato template_news.php
e ho inserito quanto segue dove dovrebbe essere chiamata la sidebar:
include ('sidebar-news.php');
Il file sidebar-news.php
contiene il codice che ho copiato da sidebar.php
con l'ID della sidebar "News" che ho elencato in 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; ?>
Il template della pagina è applicato alla pagina corretta.
2.) Sono andato in page.php
e ho cambiato:
<?php get_sidebar(); ?>
in:
<?php
if(is_page('18')) {
include ('sidebar-news.php');
}
else {
get_sidebar();
} ?>
Ho anche controllato più volte per assicurarmi che l'ID della pagina fosse corretto e ho provato a usare lo slug invece, ma senza successo.
3.) Ho provato il precedente in loop-page.php
4.) Ho inserito la seguente condizione in 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; ?>
Inoltre, dopo aver fatto alcune ricerche e scoperto che il modo corretto per estendere o modificare la funzionalità di un tema è creare un tema child, ho tentato di farlo, ma ha causato alcuni problemi che non ho il tempo di provare a risolvere.
Ho scoperto che viene chiamato e visualizzato il 'sidebar.php' predefinito nella pagina, tuttavia, anche se la mia condizione con l'ID della pagina è presente, non viene visualizzata la sidebar personalizzata con i widget.
Inoltre non riesco a trovare come viene chiamata la sidebar predefinita nella pagina perché rimuovere completamente get_sidebar();
dal mio template personalizzato template_news.php
, page.php
, o loop-page.php
non sembra fare nulla.
Per favore, qualcuno può spiegarmi come aggiungere questa sidebar alla pagina.

Penso che quello che ti serva sia semplicemente eseguire register_sidebar()
in un hook 'widgets_init'
. Il tema TwentyTen ha esempi per register_sidebar()
nel suo file functions.php
, ma ecco come potrebbe apparire:
add_action( 'widgets_init', 'twentyten_widgets_init' );
function twentyten_widgets_init() {
register_sidebar( array(
'name' => __( 'Sidebar Notizie', 'yoursite' ),
'id' => 'sidebar-news',
'description' => __( 'Area Sidebar Notizie', 'yoursite' ),
'before_widget' => '<li id="%1$s" class="widget-container %2$s">',
'after_widget' => '</li>',
'before_title' => '<h3 class="widget-title">',
'after_title' => '</h3>',
));
/*
* IL RESTO DEL CODICE DI REGISTRAZIONE DELLA SIDEBAR DA twentyten_widgets_init() VA QUI
*/
}
Inoltre, nel tuo template di pagina template_news.php
usa il seguente codice per richiamare la tua sidebar che caricherà il file sidebar-news.php
che hai creato sopra:
<?php get_sidebar( 'news' ); ?>
Non dovresti aver bisogno di nessuna delle altre cose che hai provato, e sicuramente non di alcuna dichiarazione include
.

L'ho già fatto. È stata la prima cosa che ho provato esattamente come hai descritto. Tuttavia non funziona. Il codice nel mio template personalizzato per il contenuto e la sidebar viene sovrascritto dalle impostazioni predefinite in loop.php
e loop-page.php
.

@jlego - Hmm. Ho testato la mia soluzione originale con TwentyEleven e l'ho appena ritestata con TwentyTen e funziona. loop.php
e loop-page.php
non hanno nulla a che fare con la generazione della sidebar, a meno che ovviamente l'altro sviluppatore non abbia fatto cose veramente strane. Potresti aggiornare la tua domanda e pubblicare anche quei due file insieme al contenuto del tuo file template_news.php
?

@jlego - Inoltre, se non hai PhpStorm + Zend Debugger nel tuo kit di strumenti, potresti considerare di procurartene una copia. Con questo potresti tracciare passo-passo il tuo sito e vedere esattamente perché funziona o non funziona.

Era davvero frustrante perché sapevo che avrebbe dovuto funzionare, e avevo controllato tutte le variabili per assicurarmi di aver impostato correttamente il template e di non avere errori nel mio codice. Si è scoperto che chiunque ci avesse messo mano prima di me aveva fatto apparire un blogroll sulla pagina impostando quella particolare pagina come pagina "articoli" nel pannello di amministrazione di WordPress. Quindi, quando ho provato a creare un template personalizzato, quell'impostazione sovrascriveva il mio template e diceva alla pagina di eseguire il codice in quei file. Grazie comunque per l'aiuto. Darò un'occhiata a PHPStorm e Zend Debugger.

Anche se questo non ha risolto il problema specifico che avevo, questo è il modo corretto per aggiungere una sidebar alla pagina. Credo che la soluzione effettiva al mio problema fosse limitata al mio caso specifico, quindi sto segnalando la tua risposta come soluzione a questa domanda in risposta al numero di visualizzazioni che ha avuto.

Per visualizzare un widget solo su pagine specifiche quando tutte le tue pagine hanno la stessa sidebar, puoi utilizzare uno di questi plugin:
Nasconde semplicemente i widget sulle pagine specificate. Aggiunge checkbox a ogni widget per mostrarlo o nasconderlo su ogni pagina del sito.
Widget Logic ti permette di controllare su quali pagine i widget appaiono utilizzando i tag condizionali di WP. Aggiunge anche un filtro 'widget_content'.

Anche un ottimo plugin per questo è https://wordpress.org/plugins/dynamic-widgets/
