389 1671634     [javascript protected email address]

Rendere non cliccabile un elemento del menu di WordPress

Condividi questo post:

Nell’articolo precedente abbiamo visto come assegnare la classe “current” o “active” all’elemento selezionato in un menu tramite la funzione wp_nav_menu.

L’articolo è utile e si collega a questo in quanto contiene un esempio basilare di come è possibile inserire il codice del menu in una variabile per modificarne il contenuto html.

In questo nuovo articolo invece andiamo a scoprire una funzione di PHP davvero eccezionale, preg_replace, di non facile utilizzo, che ci consentirà di “convertire” qualsiasi elemento  configurato per non avere alcun link, in un elemento non-cliccabile, trasformandolo quindi da <a> a <p> o <span>.

Supponiamo quindi di avere un menu di questo tipo:

  • Servizi
  • – Manutenzione
  • – Assistenza

il codice sarà più o meno questo:

<ul>
	<li><a>Servizi</a></li>
	<ul>
		<li><a href="/manutenzione">Manutenzione</a></li>
		<li><a href="/assistenza">Assistenza</a></li>
	</ul>
</ul>

Come vedete tutti gli elementi sono dentro ad un tag <a>, ma noi vogliamo fare in modo che la voce principale “Servizi”, diventi un elemento che abbia la sola funzione di Titolo o di semplice testo, e che non abbia gli effetti css applicati agli altri link <a>.

Per ottenere questo risultato è necessario anzitutto modificare l’elemento “Servizi” all’interno del menu, andando a togliere qualsiasi link.


Lasciando il campo vuoto infatti, WordPress genererà quell’elemento senza nessun “href” all’interno, proprio come nell’esempio HTML sopra-riportato.
Potremmo così intercettare tutti gli elementi senza un link e convertirli in altri elementi, ad esempio:

<a>Servizi</a>

può diventare:

<p>Servizi</p>

Per farlo dobbiamo anzitutto inserire il nostro menu dentro a una variabile ed in seguito utilizzare la funzione preg_replace per fare la sostituzione.

Se prima ad esempio utilizzavate il classico:

wp_nav_menu(array ('theme_location'=> 'main-menu', + eventuali altri parametri originali);

Ora dovete fare in modo che tutto il codice del menu venga inserito in una variabile.

$menu = wp_nav_menu(array ('theme_location'=> 'main-menu', + eventuali altri parametri originali, 'echo'=> false));

echo preg_replace('(<a>(.*)<\/a>)', '<p>$1</p>', $menu);

La prima riga inserisce il menu in una variabile, grazie al parametro ‘echo’ impostato su false.
La seconda riga fa una sostituzione di tutti i link <a> trasformandoli in <p>. Ovviamente ciò accade solo quando trova degli elementi <a> senza href, mentre tutte le altre voci rimangono invariate e cliccabili.

Se voleste un tag <span> al posto di <p>, vi basterà modificare l’argomento sostitutivo nel preg_replace, ad esempio:

echo preg_replace('(<a>(.*)<\/a>)', '<span>$1</span>', $menu);

Spero sia di aiuto a molti di quelli che sviluppano da sé i propri temi WordPress ma si scontrano spesso con la logica del CMS.

Post che potrebbero interessarti

Vuoi risolvere un problema? Chiamaci al 389 1671634
o mandaci una mail a [javascript protected email address]

Ti risponderò personalmente per qualsiasi necessità o emergenza, anche tramite un messaggio Whatsapp! Invia una mail