Mostrare i widget di una sidebar dinamica specifica su una pagina specifica

16 set 2011, 08:14:05
Visualizzazioni: 34.7K
Voti: 1

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.

1
Commenti

Un altro Plugin è Widget Display Options

User User
4 mag 2013 17:34:35
Tutte le risposte alla domanda 2
6

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.

16 set 2011 09:35:58
Commenti

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.

biggles biggles
16 set 2011 18:03:56

@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?

MikeSchinkel MikeSchinkel
16 set 2011 18:27:23

@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.

MikeSchinkel MikeSchinkel
16 set 2011 18:32:07

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.

biggles biggles
17 set 2011 06:38:53

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.

biggles biggles
4 set 2013 00:49:51

@jlego - Wow, grazie per essere tornato dopo così tanto tempo. Comunque, mi dispiace di non essere stato in grado di aiutarti con il tuo caso d'uso specifico.

MikeSchinkel MikeSchinkel
5 set 2013 17:34:12
Mostra i restanti 1 commenti
1

Per visualizzare un widget solo su pagine specifiche quando tutte le tue pagine hanno la stessa sidebar, puoi utilizzare uno di questi plugin:

Display Widgets

Nasconde semplicemente i widget sulle pagine specificate. Aggiunge checkbox a ogni widget per mostrarlo o nasconderlo su ogni pagina del sito.

Widget Logic

Widget Logic ti permette di controllare su quali pagine i widget appaiono utilizzando i tag condizionali di WP. Aggiunge anche un filtro 'widget_content'.

16 set 2011 19:08:56
Commenti

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

NickFMC NickFMC
16 gen 2015 04:15:36