Archivi tag: Wordpress

Custom Sidebars in WordPress & Articoli singoli

Ci sono decine di plugin che permettono di gestire le sidebar di WordPress, in maniera dinamica associandole alle categorie, o alle pagine , altri tramite logica configurabile, altri banalmente tramite un custom tag nella pagina.

Il problema fondamentale è che nei template standard non c’e’ supporto per le sidebar sulla visualizzazione di un singolo articolo.

Per sbloccare questa cosa bisogna apportare delle modifiche ai files del nostro tema.

Innanzitutto bisogna abilitare la sidebar nella pagina singola.

Apriamo il file single.php e aggiungiamo la funzione get_sidebar() prima della get_footer()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
/**
* The Template for displaying all single posts.
*
* @package WordPress
* @subpackage Twenty_Eleven
* @since Twenty Eleven 1.0
*/


get_header(); ?>

<div id="primary">

<div id="content" role="main">

<?php while ( have_posts() ) : the_post(); ?>

<nav id="nav-single">

<h3 class="assistive-text"><?php _e( 'Post navigation', 'twentyeleven' ); ?></h3>

<span class="nav-previous"><?php previous_post_link( '%link', __( '<span class="meta-nav">&larr;</span> Previous', 'twentyeleven' ) ); ?></span>

<span class="nav-next"><?php next_post_link( '%link', __( 'Next <span class="meta-nav">&rarr;</span>', 'twentyeleven' ) ); ?></span>

</nav><!-- #nav-single -->

<?php get_template_part( 'content', 'single' ); ?>

<?php comments_template( '', true ); ?>

<?php endwhile; // end of the loop. ?>

</div><!-- #content -->

</div><!-- #primary -->

<?php get_sidebar(); ?>

<?php get_footer(); ?>

Ora anche gli articoli quando visualizzati da soli (quindi non in modalità archivio, ricerca o homepage), avranno accesso alle sidebar.

Bisogna a questo punto aggiungere una funzione di decorazione del dom di pagina affinche vengano impostate le classi giuste del css altrimenti la sidebar verrà mostrata sotto l’articolo.

Apriamo quindi il file functions.php del nostro tema e in coda, aggiungiamo questa funzione:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
add_filter('body_class', 'fix_body_class_for_sidebar', 20, 2);

function fix_body_class_for_sidebar($wp_classes, $extra_classes) {

if( is_single() || is_page() ){

if (in_array('singular',$wp_classes)){

foreach($wp_classes as $key => $value) {

if ($value == 'singular')

unset($wp_classes[$key]);

}

}

}

return array_merge($wp_classes, (array) $extra_classes);

}

Fatto questo, il gioco è fatto.

Consiglio di usare poi, Content Aware Sidebar o Dynamics Sidebar come plugin per la gestione delle sidebar.