Pålitliga WordPress-handledningar, när du behöver dem som mest.
Nybörjarguide till WordPress
WPB Cup
25 miljoner+
Webbplatser som använder våra plugins
16+
År av WordPress-erfarenhet
3000+
WordPress-handledningar
av experter

Hur man lägger till menybeskrivningar i dina WordPress-teman

WordPress menysystem har en inbyggd funktion där du kan lägga till beskrivningar till menyalternativ. Den här funktionen är dock dold som standard. Även när den är aktiverad stöds inte visning av dem utan att lägga till lite kod. De flesta teman är inte designade med beskrivningar av menyalternativ i åtanke. I den här artikeln visar vi hur du aktiverar menybeskrivningar i WordPress och hur du lägger till menybeskrivningar i dina WordPress-teman.

Hur man lägger till menybeskrivningar i WordPress-teman

Notera: Den här handledningen kräver att du har god förståelse för HTML, CSS och WordPress temautveckling.

När och varför du skulle vilja lägga till menybeskrivningar?

Vissa användare tror att lägga till menybeskrivningar hjälper med SEO. Vi tror dock att huvudskälet till att du vill använda dem är att erbjuda en bättre användarupplevelse på din webbplats.

Beskrivningar kan användas för att berätta för besökare vad de kommer att hitta om de klickar på ett menyalternativ. En lockande beskrivning kommer att locka fler användare att klicka på menyer.

Menybeskrivningar

Steg 1: Aktivera menybeskrivningar

Gå till Utseende » Menyer. Klicka på knappen Skärmalternativ längst upp till höger på sidan. Markera rutan Beskrivningar.

Aktivera menybeskrivningar i WordPress

Detta aktiverar fältet för beskrivningar i dina menyobjekt. Som detta:

Beskrivningsfält tillagt till menyalternativ

Nu kan du lägga till menybeskrivningar till objekt i din WordPress-meny. Dessa beskrivningar kommer dock inte att visas i dina teman ännu. För att visa menybeskrivningar måste vi lägga till lite kod.

Steg 2: Lägg till walker-klassen:

Walker-klassen utökar den befintliga klassen i WordPress. Den lägger i princip bara till en kodrad för att visa beskrivningar av menyalternativ. Lägg till denna kod i ditt temas fil functions.php.

class Menu_With_Description extends Walker_Nav_Menu {
	function start_el(&$output, $item, $depth, $args) {
		global $wp_query;
		$indent = ( $depth ) ? str_repeat( "\t", $depth ) : '';
		
		$class_names = $value = '';

		$classes = empty( $item->classes ) ? array() : (array) $item->classes;

		$class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item ) );
		$class_names = ' class="' . esc_attr( $class_names ) . '"';

		$output .= $indent . '<li id="menu-item-'. $item->ID . '"' . $value . $class_names .'>';

		$attributes = ! empty( $item->attr_title ) ? ' title="' . esc_attr( $item->attr_title ) .'"' : '';
		$attributes .= ! empty( $item->target ) ? ' target="' . esc_attr( $item->target ) .'"' : '';
		$attributes .= ! empty( $item->xfn ) ? ' rel="' . esc_attr( $item->xfn ) .'"' : '';
		$attributes .= ! empty( $item->url ) ? ' href="' . esc_attr( $item->url ) .'"' : '';

		$item_output = $args->before;
		$item_output .= '<a'. $attributes .'>';
		$item_output .= $args->link_before . apply_filters( 'the_title', $item->title, $item->ID ) . $args->link_after;
		$item_output .= '<br /><span class="sub">' . $item->description . '</span>';
		$item_output .= '</a>';
		$item_output .= $args->after;

		$output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
	}
}

Steg 3. Aktivera Walker i wp_nav_menu

WordPress-teman använder funktionen wp_nav_menu() för att visa menyer. Vi har också publicerat en handledning för nybörjare om hur man lägger till anpassade navigeringsmenyer i WordPress-teman. De flesta WordPress-teman lägger till menyer i mallfilen header.php. Det är dock möjligt att ditt tema har använt någon annan mallfil för att visa menyer.

Vad vi behöver göra nu är att hitta funktionen wp_nav_menu() i ditt tema (mest troligt i header.php) och ändra den så här.

<?php $walker = new Menu_With_Description; ?>

<?php wp_nav_menu( array( 'theme_location' => 'primary', 'menu_class' => 'nav-menu', 'walker' => $walker ) ); ?>

I den första raden ställer vi in $walker att använda walker-klassen som vi definierade tidigare i functions.php. I den andra kodraden är det enda extra argumentet vi behöver lägga till våra befintliga wp_nav_menu-argument 'walker' => $walker.

Steg 4. Stylning av beskrivningarna

Walker-klassen vi lade till tidigare visar objektbeskrivningar på den här kodraden:

$item_output .= '<br /><span class="sub">' . $item->description . '</span>';

Ovanstående kod lägger till en radbrytning i menyalternativet genom att lägga till en
-tagg och omsluter sedan dina beskrivningar i ett span med klassen sub. Som detta:

<li id="menu-item-99" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="http://www.example.com/about/">About<br /><span class="sub">Who are we?</span></a></li>

För att ändra hur dina beskrivningar visas på din webbplats kan du lägga till CSS i ditt temas stilmall. Vi testade detta på Twenty Twelve och använde denna css.

.menu-item {
border-left: 1px solid #ccc;
}

span.sub { 
font-style:italic;
font-size:small;
}

Vi hoppas att du kommer att finna den här artikeln användbar och att den hjälper dig att skapa snygga menyer med menybeskrivningar i ditt tema. Frågor? Lämna dem i kommentarerna nedan.

Ytterligare resurser

Hur man stylar WordPress navigeringsmenyer

Hur man lägger till anpassade objekt i specifika WordPress-menyer

Bill Ericksons Menyer med beskrivningsklass

Upplysning: Vårt innehåll stöds av läsarna. Det innebär att om du klickar på några av våra länkar kan vi tjäna en provision. Se hur WPBeginner finansieras, varför det är viktigt och hur du kan stödja oss. Här är vår redaktionella process.

Det ultimata WordPress-verktyget

Få GRATIS tillgång till vår verktygslåda - en samling WordPress-relaterade produkter och resurser som alla proffs bör ha!

Läsarnas interaktioner

51 CommentsLeave a Reply

  1. I PHP 8.0 och högre kommer detta att orsaka ett kritiskt fel.

    Du behöver hitta den här raden:
    function start_el( $output, $item, $depth, $args ) {

    Att ändra den raden till följande bör få felet att försvinna:
    function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {

  2. För att lägga till menybeskrivningar i mina WordPress-teman gjorde jag steg 1 och 2 i den här bloggen men kunde inte följa steg 3 för att gå vidare och utföra den totala ändringen.

    • Om du inte hittar funktionen i ditt tema, rekommenderar vi att du kontaktar supporten för ditt specifika tema så bör de kunna hjälpa dig.

      Admin

  3. Hej,
    Hur inaktiverar jag produktkategoribeskrivningen i Max Mega Menu?
    Jag har redan gått till Mega Menu > Allmänna inställningar och ställt in menyobjektbeskrivningar till inaktiverade, men problemet kvarstår.

    • Du bör kontakta pluginets support så kan de hjälpa till med att inställningen inte fungerar korrekt

      Admin

  4. Kan detta fungera med WP_Bootstrap_Navwalker?

    eftersom jag har provat det och det förstör min webbplats....

  5. Hej.. Snälla hjälp..
    Hur lägger jag till titel kategori, utan att använda titel kategori beskrivning ?

  6. Hej alla,

    Några idéer om hur man tillåter HTML-taggar i beskrivningen?
    remove_filter(‘nav_menu_description’, ‘strip_tags’);
    Den här fungerar inte för mig.

    • @Iryna: Kan du posta din kod någonstans, t.ex. pastebin.com.
      Var du anropar remove_filter() avgör om det fungerar – det måste anropas efter add_filter()-anropet.
      Att anropa det precis före wp_nav_menu()-anropet kan fungera.

  7. Kan det redan finnas där redo att kopplas in? Hur kommer detta hack att fungera med temat "Twenty TwelveVersion: 1.5"
    ? Och precis som med pluginet wpml?

  8. Hej man, jag lade till walker-klassen i functions.php, men jag kan inte hitta wp_nav_menu i genesis-temat. Vad missar jag? Jag har ingen aning om vad jag ska göra härnäst?!?!

  9. Du förklarar väldigt bra – detaljerat och tydligt. 1 minut och menyalternativens beskrivningar är ok. Tack!

  10. Tack så mycket för den här handledningen. Den rekommenderades till mig och fungerade perfekt för att göra de ändringar jag ville göra. Men när jag gjorde dessa ändringar har jag tappat mina nedfällbara undermenyalternativ. Någon idé om vad som påverkade det i kodändringen?

    Tack för din tid och handledning

  11. Jag har implementerat menybeskrivningarna och det fungerade jättebra. Nu ber min kund om en radbrytning inom en av beskrivningarna. Jag har försökt att infoga en returtecken och en tagg i beskrivningsfältet via admin. Det visas inte på frontend. WP tar bort dessa ändringar. Finns det ett sätt att åtgärda detta?

  12. Bra handledning, killar, jag vill bara veta hur jag implementerar detta på en anpassad meny som visas med widgeten Anpassad meny?

  13. Tack! Har jobbat med WordPress i åratal och har aldrig ens hört talas om detta förut. Jag ville ta bort beskrivningarna eftersom de var mycket redundanta på webbplatsen jag arbetar med. Jag letade överallt efter var de kom ifrån.

    Åh glädje!

  14. fungerar!

    men för php 5.4 måste du matcha wp walker-argumenten för start_el-funktionen:

    function start_el( &$output, $object, $depth = 0, $args = array(), $current_object_id = 0 )

    och ersätt $item med $object.

  15. Perfekt. Detta var precis vad jag behövde för att avsluta en webbplats. Jag hade lite problem med CSS, men jag löste det till slut och fick det att fungera. Tack för de bra artiklarna.

  16. Detta fungerade perfekt för mig. Klassfunktionen är också perfekt. Tack så mycket!

  17. Jag behövde skapa samma sak och jag var helt vilse.

    Jag planerade att göra några dumma saker för att få detta gjort.

    Tack gode gud att jag hittade det här inlägget och sparade tid och stress!

    Jag älskar helt enkelt den här sidan, har lärt mig så mycket.

    Tack så mycket för att du visar de enklaste sakerna här.

    • Span-taggen kommer även på undermenyer.

      det visas inte där men det tar så mycket plats att det ser för konstigt ut.

      finns det någon lösning för samma sak??

  18. Detta är verkligen en bra handledning och jag undrade om detta skulle fungera på Thesis 1.8.5? Om inte, vore det bra om du kunde tillhandahålla en. Jag kommer definitivt att hjälpa dig att sprida den. Tummen upp!

  19. Jag följde din handledning och lade till beskrivning till min meny. Tack! Men när jag är i mobiläge konverteras menyn till en rullgardinsmeny och menyrubriken och beskrivningen är sammankopplade. Till exempel, om mitt menyalternativ är "om" och beskrivningen "mer om mig", visar mobilversionen "ommer om mig". Finns det ett sätt att fixa detta?

    • Jag hade samma problem. Här är vad jag gjorde.

      Jag ändrade detta:
      $description = ! empty( $item->description ) ? ‘<span>’.esc_attr( $item->description ).'</span>’ : ”;

      Till detta:
      $description = ! empty( $item->description ) ? ‘<br /><span>’.esc_attr( $item->description ).'</span>’ : ”;

      Inte säker på om det är den bästa lösningen, men det fungerade för mig.

      • Tack grabbar, jag stötte på vad SVET och DAVID gjorde med mobilmenyn.
        Koden verkar ha ändrat min ändring var helt enkelt att lägga till i en span med bindestreck som avdelare och i min desktop-fråga undertryckte jag den helt enkelt då den inte behövdes där.

        $item_output .= ‘ – ‘;

        Inom min Desktop Only Query ställer du in span till display none;
        @media only screen and (min-width: 740px) {
        header #submenu li span.dash { display:none; }

        Hoppas det hjälper, löste mitt problem fint.

  20. Tack för den fantastiska handledningen. Jag har gjort de stora stegen bra, som du kan se från
    http://ueab.ac.ke/demo/index

    Jag satt fast med stylingen - hur minskar jag utrymmet mellan huvudmenyetiketten och beskrivningen? Din hjälp uppskattas mycket.

  21. Bra inlägg. Jag har försökt att gräva i detta tidigare men de tidigare instruktionerna jag hittade var inte så lätta att följa. Jag kunde lägga in functions.php-koden, lista ut hur man ändrar walker-klassen i min header-fil (annorlunda för det tema jag använder, men rakt fram), och få igång det på ungefär 15 minuter från start till slut.

    En sak som du kanske vill lägga till är hur man inkluderar den högra kanten på det sista menyalternativet med egenskapen :last-child.

    .menu-item:last-child { border-right: 1px solid #ccc; }

  22. Istället för att utöka Walker_Nav_Menu vore det trevligt (och enklare) om ett filter tillhandahölls, t.ex.
    Om kärnkoden hade:
    $item_output .= apply_filters( ‘walker_nav_menu_description’, $item->description);

    Då skulle den anpassade filterfunktionen bara ha:
    return ” . $description . ”;

Lämna ett svar

Tack för att du väljer att lämna en kommentar. Tänk på att alla kommentarer modereras enligt vår kommentarspolicy, och din e-postadress kommer INTE att publiceras. Använd INTE nyckelord i namn fältet. Låt oss ha en personlig och meningsfull konversation.