Come applicare una classe alla seconda parola nella voce di elenco del menu?
1 risposta
- voti
Puoifiltrareil titolo
di ogni voce delmenu dinavigazione. Sfortunatamente,ilfiltro si chiama 'the_title'
: se aggiungiamo solo un semplicefiltro,potremmo catturare anche le stringhe al difuori deimenu dinavigazione.
Quindi abbiamobisogno di una secondafunzioneper attivareilfiltro deltitolo delmenu dinavigazione quandoinizia la classe delmenue disattivarlo quandofinisce.
Cominciamo con la secondafunzione:
add_filter ('wp_nav_menu_args','wpse_14037_filter_switch');
add_filter ('wp_nav_menu','wpse_14037_filter_switch');
/**
* Attivae disattiva la registrazione delfiltro deltitolo.
*
* @parammisto $input Array o stringa,lopassiamo semplicemente attraverso.
* @returnmisto
*/
funzione wpse_14037_filter_switch ($input)
{
$func='wp_nav_menu_args'==current_filter ()? 'add_filter': 'remove_filter';
$func ('the_title','wpse_14037_filter_title');
restituire $input;
}
'wp_nav_menu_args'
viene chiamatomoltoprestoin wp_nav_menu ()
. Quando wpse_14037_filter_switch ()
èin esecuzionein questo contesto ( current_filter
) attiviamoilfiltro deltitolo on .
'wp_nav_menu'
viene chiamato dopo chetuttiglielementi sono stati renderizzati. Ora disattiviamoilfiltro deltitolo disattivato .
Ora abbiamobisogno di wpse_14037_filter_title ()
che abbiamo appena registrato:
/** * Aggiunge un & lt; span class="partNUMBER" > a ciascunaparola deltitolo di una voce dimenu. * * @param string $title * @return stringa */ funzione wpse_14037_filter_title ($title) { $titolo=taglio ($titolo); $parti=esplode ('',$titolo); $ out=array (); $i=1; foreach ($parti come $parte) { $ out []='& lt; span class="parte'. $i ++. '" >' . $part. "& lt;/span >"; } returnjoin ('',$ out); }
Ho deciso di rendere lafunzionepiùgenerica di quanto volevi. Altrepersonepotrebbero voler dare uno stile allaterzaparola ... o alla 15.
Perindirizzare la secondaparolaneltuofoglio di stile usa lanuova classe:
/* Iltuomenupotrebbe avere la classe "menu". */
.menu .part2
{
colore: # 005;
}
You can filter the title
of each nav menu item. Unfortunately, the filter is named 'the_title'
– if we just add a simple filter for it, we may catch strings outside of nav menus too.
So we need a second function to switch our nav menu title filter on when the menu class starts and off when it ends.
Let’s start with the second function:
add_filter( 'wp_nav_menu_args', 'wpse_14037_filter_switch' );
add_filter( 'wp_nav_menu', 'wpse_14037_filter_switch' );
/**
* Switches the registration of out title filter on and off.
*
* @param mixed $input Array or string, we just pass it through.
* @return mixed
*/
function wpse_14037_filter_switch( $input )
{
$func = 'wp_nav_menu_args' == current_filter() ? 'add_filter' : 'remove_filter';
$func( 'the_title', 'wpse_14037_filter_title' );
return $input;
}
'wp_nav_menu_args'
is called in wp_nav_menu()
very early. When wpse_14037_filter_switch()
is running in this context (current_filter
) we turn the title filter on.
'wp_nav_menu'
is called after all item are rendered. Now we turn the title filter off.
Now we need the wpse_14037_filter_title()
we just registered:
/**
* Adds a <span class="partNUMBER"> to each word of a menu item title.
*
* @param string $title
* @return string
*/
function wpse_14037_filter_title( $title )
{
$title = trim( $title );
$parts = explode( ' ', $title );
$out = array ();
$i = 1;
foreach ( $parts as $part )
{
$out[] = '<span class="part' . $i++ . '">' . $part . '</span>';
}
return join( ' ', $out );
}
I decided to make the function more generic than you wanted it. Other people may want to style the third word … or the 15th.
To address the second word in your stylesheet just use the new class:
/* Your menu may have the class 'menu'. */
.menu .part2
{
color: #005;
}
Voglio applicare una classe a unaparolanelmiomenu.Adesempio,supponiamo di avere una voce dielenconelmiomenu chiamata "Ilmio articolo".Vorrei applicare una classe allaparola "Item"in modo dapoterlamodellare come voglio.
Devo aggiungere uno span alla voce dell'elencoe quindi aggiungere la classe almio CSSin questomodo?