Un menu di navigazione superiore per Thematic completamente configurabile

Partendo da un articolo pubblicato da Justin Tadlock su come impiegare i link di WordPress per personalizzare il menu di navigazione superiore, ho cercato di estendere il suo codice per realizzare un sistema che consenta in maniera abbastanza semplice di controllare completamente il menu di Thematic.

Thematic incorpora infatti un menu di navigazione a discesa (jQuery Superfish) posizionato sotto la testata che mostra, di default, le nostre pagine (e le relative sotto-pagine nella tendina).

Le modalità per personalizzare il menu sono diverse ma richiedono tutte un certo intervento a livello di codice. Ad esempio su Cozmos Labs è stato pubblicato un articolo, tradotto in italiano da Danny, su come aggiungere un menu a cascata delle categorie.

Ian Stewart propone anche una soluzione pragmatica di completa personalizzazione attraverso l’inserimento delle singole voci di menu direttamente in functions.php. Questa soluzione di hard-coding tuttavia impone una modifica al file functions.php ogni volta che si debba modificare il menu.

La soluzione che vi propongo consente invece, una volta implementata, di modificare il menu superiore semplicemente intervendo sui “Link” presenti nella pagina di amministrazione di WordPress.

La soluzione

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
41
42
43
<?php
// Funzione per la creazione di un menu personalizzabile in Thematic per WordPress (http://themeshaper.com/thematic-for-wordpress/)
// Autore: Matteo Stagi
// basata sull'articolo di Justin Tadlock (http://justintadlock.com/archives/2009/01/06/easy-navigation-menus-in-wordpress)
// URL: http://www.matteostagi.it/2009/menu-di-navigazione-configurabile-per-thematic
// Rilasciata sotto Licenza Creative Commons Attribuzione 2.5 (http://creativecommons.org/licenses/by/2.5/deed.it)
 
 
function stagi_bookmark_menu($menu) {
	$menu = false;
	$page_uri = str_replace("/", "", $_SERVER['REQUEST_URI']);
	$class = "page_item";
	$totalbookmarksnumber = count(get_bookmarks());
 
	$bookmarks = get_bookmarks(array('category_name' => 'menuLink', 'orderby' => 'rating'));
 
	$menu = '<div class="menu"><ul>';
	foreach($bookmarks as $bookmark) :
 
		$class = " ".strtolower(str_replace(" ","-",$bookmark->link_name));
 
		$menu .= '<li class="' . $class . '"><a href="' . $bookmark->link_url . '" title="' . $bookmark->link_description . '" rel="' . $bookmark->link_rel . '">' . $bookmark->link_name . '</a>';
		$subbookmarks = get_bookmarks(array('category_name' => $bookmark->link_name, 'orderby' => 'rating'));
 
		if (count($subbookmarks)==$totalbookmarksnumber) {
        $menu .='</li>';
		} else {
        $menu .='<ul>';
		foreach($subbookmarks as $subbookmark) :
			$subclass = " ".strtolower(str_replace(" ","-",$subbookmark->link_name));
			$menu .= '<li class="' . $subclass . '"><a href="' . $subbookmark->link_url . '" title="' . $subbookmark->link_description . '" rel="' . $subbookmark->link_rel . '">' . $subbookmark->link_name . '</a></li>';
		endforeach;
		$menu .= '</ul></li>';
    	}
 
	endforeach;
	$menu .= '</ul></div>';
 
	return $menu;
}
add_filter('wp_page_menu', 'stagi_bookmark_menu');
 
?>

Come funziona

Una volta inserita la funzione nel file functions.php del proprio child theme sarà possibile impostare il proprio menu agendo sui Link presenti nella pagina di amministrazione:

  1. Creare una categoria di link denominata “menuLink”
  2. Inserire i link nella categoria “menuLink”

L’ordine con cui appaiono le voci nel menu può essere modificata agendo sul “punteggio” del link (opzione disponibile al momento della crazione o modifica del link)

E’ possibile creare sottovoci a tendina semplicemente:

  1. aggiungendo una ulteriore categoria con il nome della voce per cui vogliamo avere le sottovoci.
  2. Inserire i link e attribuirli a questa categoria

Note

La funzione get_bookmarks, qualora venga indicata una categoria che non esiste, anzichè restituire un false o un array vuoto, restituisce tutti i bookmarks come se non fosse stata specificata la categoria.

Per questo motivo, per verificare se esistono delle sottovoci, ho dovuto conteggiare alla linea 13 il numero totale di link presenti e confrontarlo di volta in volta con il numero di link nella ‘presunta’ sottocategoria.

Visto che la documenzione di thematic è principalmente in inglese this article is also available in (my poor) english.

Termini collegati: , , Scrivi il tuo commento all'articolo

2 Commenti

  1. Pubblicato 2 aprile 2009 alle 04:00 | Link Permanente

    Bell’ articolo Matteo, complimenti! Ho aggiunto il link alla tua pagina dal mio articolo sullo stesso argomento.

  2. Pubblicato 7 agosto 2009 alle 05:16 | Link Permanente

    Complimenti!
    Articolo chiaro e ben scritto.
    Ma soprattutto, il codice è pulito come piace a me e soprattutto una soluzione smart
    e senza “chiodi”.

    Ciao. gigi

Scrivi un Commento

Il tuo indirizzo Email non verra' mai pubblicato e/o condiviso. I Campi obbligatori sono contrassegnati con *

*
*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="">