Wie wende ich eine Klasse auf das zweite Wort im Menülistenelement an?
1 Antworten
- Stimmen
Sie können den title
jedes Navigationsmenüelementsfiltern. Leider heißt der Filter 'the_title'
. Wenn wirnureinen einfachen Filter hinzufügen,werdenmöglicherweise auch Zeichenfolgen außerhalb der Navigationsmenüs abgefangen.
Wirbenötigen alsoeine zweite Funktion,um unseren Titelfilterfür das Navigationsmenüeinzuschalten,wenn die Menüklassebeginnt,und aus,wenn sieendet.
Beginnen wirmit der zweiten Funktion:
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'
wird sehrfrühin wp_nav_menu()
aufgerufen. Wennin diesem Kontext wpse_14037_filter_switch()
ausgeführt wird (current_filter
),aktivieren wir den Titelfilter auf .
'wp_nav_menu'
wird aufgerufen,nachdem alle Elementegerendert wurden. Jetzt schalten wir den Titelfilter aus .
Jetztbrauchen wir den wpse_14037_filter_title()
,den wirgerade registriert haben:
/**
* 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 );
}
Ich habebeschlossen,die Funktion allgemeiner zugestalten,als Siees wollten. Anderemöchten vielleicht das dritte Wort oder das 15. Wort stylen.
Um das zweite Wortin Ihrem Stylesheet zu adressieren,verwenden Sieeinfach dieneue Klasse:
/* Your menu may have the class 'menu'. */
.menu .part2
{
color: #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;
}
Ichmöchteeine Klasse aufein Wortin meinem Menü anwenden.Angenommen,ich habeein Listenelementin meinem Menümit dem Namen "Mein Element".Ichmöchteeine Klasse auf das Wort "Item" anwenden,damitiches sogestalten kann,wieichmöchte.
Mussich dem Listenelementeinen Bereich hinzufügen und dann die Klasse wiefolgt zumeinem CSS hinzufügen?