Your cart is currently empty!
Recently I’m implementing schema.org markup structure for my website and and into all of our premium theme to provide our customer for great website experience with SEO ready template. So if you wanted to know how to add schema markup for navigation menu in WordPress website without any plugin then here are very simple steps for you. I’m using WordPress Walker navigation PHP code to implement this so it can help you to better understand.
Before you add schema markup for navigation menu make sure you takes the backup of website and theme data. To prevent any trouble later.
Add Schema Markup for Navigation Menu
First a simple HTML code helps you to understand how toย add schema markup for navigation menu and how it works.
<nav itemscope itemtype="http://schema.org/SiteNavigationElement"> <ul> <li> <a href="https://www.insertcart.com/" itemprop="url"><span itemprop="name">Home</span></a> </li> <li> <a href="https://www.insertcart.com/category/wordpress/" itemprop="url"><span itemprop="name">Tutorials</span></a> </li> <li> <a href="https://www.insertcart.com/pricing/" itemprop="url"><span itemprop="name">Pricing</span></a> </li> <li> <a href="https://www.insertcart.com/contact-us/" itemprop="url"><span itemprop="name">Contact Us</span></a> </li> </ul> </nav>
Above code is for html now moving on WordPress PHP code. First we need to add navigation walker function to theme function.php also readย How to Add Icon Navigation Menu
/** * Custom walker class. */ class bigrush_Walker_Nav_Menu extends Walker_Nav_Menu { /** * Starts the list before the elements are added. * * Adds classes to the unordered list sub-menus. * * @param string $output Passed by reference. Used to append additional content. * @param int $depth Depth of menu item. Used for padding. * @param array $args An array of arguments. @see wp_nav_menu() */ function start_lvl( &$output, $depth = 0, $args = array() ) { // Depth-dependent classes. $indent = ( $depth > 0 ? str_repeat( "\t", $depth ) : โ ); // code indent $display_depth = ( $depth + 1); // because it counts the first submenu as 0 $classes = array( โsub-menuโ, ( $display_depth % 2 ? โmenu-oddโ : โmenu-evenโ ), ( $display_depth >=2 ? โsub-sub-menuโ : โ ), โmenu-depth-โ . $display_depth ); $class_names = implode( โ โ, $classes ); // Build HTML for output. $output .= "\n" . $indent . โ<ul class="โ . $class_names . โ">โ . "\n"; } /** * Start the element output. * * Adds main/sub-classes to the list items and links. * * @param string $output Passed by reference. Used to append additional content. * @param object $item Menu item data object. * @param int $depth Depth of menu item. Used for padding. * @param array $args An array of arguments. @see wp_nav_menu() * @param int $id Current item ID. */ function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) { global $wp_query; $indent = ( $depth > 0 ? str_repeat( "\t", $depth ) : โ ); // code indent // Depth-dependent classes. $depth_classes = array( ( $depth == 0 ? โmain-menu-itemโ : โsub-menu-itemโ ), ( $depth >=2 ? โsub-sub-menu-itemโ : โ ), ( $depth % 2 ? โmenu-item-oddโ : โmenu-item-evenโ ), โmenu-item-depth-โ . $depth ); $depth_class_names = esc_attr( implode( โ โ, $depth_classes ) ); // Passed classes. $classes = empty( $item->classes ) ? array() : (array) $item->classes; $class_names = esc_attr( implode( โ โ, apply_filters( โnav_menu_css_classโ, array_filter( $classes ), $item ) ) ); // Build HTML. $output .= $indent . โ<li id="nav-menu-item-โ. $item->ID . โ" class="โ . $depth_class_names . โ โ . $class_names . โ">โ; // Link attributes. $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 ) .โ"โ : โ; $attributes .= โ itemprop="url" class=" menu-link โ . ( $depth > 0 ? โsub-menu-linkโ : โmain-menu-linkโ ) . โ"โ; // Build HTML output and pass through the proper filter. $item_output = sprintf( โ%1$s<a%2$s><span itemprop="name">%3$s%4$s%5$s</span></a>%6$sโ, $args->before, $attributes, $args->link_before, apply_filters( โthe_titleโ, $item->title, $item->ID ), $args->link_after, $args->after ); $output .= apply_filters( โwalker_nav_menu_start_elโ, $item_output, $item, $depth, $args ); } }
Now search for wp_nav_menu your main navigation for WordPress some times located in header.php file code will be something like this.
<?php wp_nav_menu(); ?>
Now replace this code with below this will call your walker from function.php to theme and Important to add schema markup for navigation menu.
<?php wp_nav_menu( array( 'walker' => new insertcart_Walker_Nav_Menu() ) ); ?>
That’s all we have done editing now you SIteNavigationElement should work fine check into google testing tool. If wanted to SEO optimized theme please Browser our Themes Storeย
Comments
10 responses to “How to Add Schema Markup for Navigation Menu”
Is there any way for adding itemprop=”url” to menu without adding walker ?
You can check here https://developer.wordpress.org/reference/functions/wp_nav_menu/
I’ve implemented schema using your example on my theme that i’ve developed.
Example here: http://framework.wecodeart.com/lorem-ipsum-demo-post/
So far i have no errors when tested with Google Tool. Thanks for the tutorial.That’s good
Could you tell me how to make this a plugin as the site is not installed with child theme, hence changing header.php, functions.php etc is futile.
actually plugin are already available but some times doesn’t works that the reason I put as code not as plugin.
forgot to subscribe
I’m going to use your example to implement these on my website. Hope all goes well! ๐ Thank you for the example. I ran into this after doing quite a bit of research.
Umm.. says “error on line 24: syntax error, unexpected ‘โ’ (T_STRING)”
Had the same problem. Cause was a Copy&Paste Error to my editor regarding the ‘ characters in the code. I needed to replace all occurrences of ยด and ` with the character ‘.
Grabber Pro
Original price was: $59.$39Current price is: $39.Insertcart Custom WooCommerce Checkbox Ultimate
Original price was: $39.$19Current price is: $19.Android App for Your Website
Original price was: $49.$35Current price is: $35.Abnomize Pro
Original price was: $30.$24Current price is: $24.Medical Portfolio Pro
Original price was: $31.$24Current price is: $24.
Latest Posts
- How to Handle Sudden Traffic Spike in Website – Do Node Balancer Really Help
- How to Use AWS SES Email from Localhost or Website: Complete Configuration in PHP
- How to Upload Images and PDFs in Android Apps Using Retrofit
- [Fix] File Permission Issue in Apache Website WordPress Not Writable to 775
- Best PHP ini Settings for WordPress & WooCommerce: Official Recommendations
Leave a Reply