Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to insert shortcode into wordpress menu

I have made a menu item with this code. The menu item shows up but the shortcode output is not there. Is there something I can add or a different method that will do this. I have added also in hopes this might help.

add_filter('wp_nav_items', 'do_shortcode', 7);

Or maybe someone knows this is not possible and can tell me.

/* Nav Menu */
function add_profile_link_to_nav(){ 
 if ( is_user_logged_in() ) { ?> 

<ul> 
  <li class="menu-item"id="one"> <a href="http://example.com/members/">All  Members</a>
  <ul class="sub-menu"> 
      <li class="menu-item"><?php echo custom_execute_shortcode(); ?> </li>
  </ul> 
 </li>
</ul>    <!--end menu--->
<?php } 
}
add_action( "wp_nav_items","add_profile_link_to_nav" );

function custom_execute_shortcode() {
$myfunction= '[my shortcode"]';
$myfunction_parsed = do_shortcode($myfunction);
return $myfunction_parsed;
}

Thanks

like image 413
xyz Avatar asked Jul 09 '12 21:07

xyz


People also ask

Can I add shortcode to WordPress menu?

You can't use shortcodes directly in the menu URL on the menu page, because the brackets get stripped out. But you can use placeholders like this: #profile_link# . With the following code in functions. php , you can create a custom menu item with the URL #profile_link# , and it will replace that with your shortcode.

How do I add a shortcode to a WordPress menu plugin?

Check the screen options, if you don't see the Shortcode box. Check the Shortcode option to see the new Shortcode box. Add your shortcode/HTML to the text area (not a link, in the screenshot). Optionally, add a title.

How to add shortcodes in WordPress posts and pages?

Let’s see how to easily add shortcodes in your WordPress posts and pages. First, you need to edit the post and page where you want to add the shortcode. After that, you need to click on the add block button to insert a shortcode block. After adding the shortcode block, you can simply enter your shortcode in the block settings.

How do I add a shortcode/HTML to my website?

Check the screen options, if you don't see the Shortcode box. Check the Shortcode option to see the new Shortcode box. Add your shortcode/HTML to the text area (not a link, in the screenshot). Optionally, add a title. The menu item is saved.

How do I add a shortcode to a menu item?

You can't use shortcodes directly in the menu URL on the menu page, because the brackets get stripped out. But you can use placeholders like this: #profile_link#. With the following code in functions.php, you can create a custom menu item with the URL #profile_link#, and it will replace that with your shortcode.

How to create a WordPress shortcode to output complete HTML content?

Old Method: If you want to use a shortcode that outputs not just the URL, but complete HTML sections, write FULL HTML OUTPUT in the Link Text option for that link and it will output the complete HTML without breaking your site. Old Method: The menu item is saved. Add the plugin’s folder in the WordPress’ plugin directory. Activate the plugin.


2 Answers

You can't use shortcodes directly in the menu URL on the menu page, because the brackets get stripped out. But you can use placeholders like this: #profile_link#.

With the following code in functions.php, you can create a custom menu item with the URL #profile_link#, and it will replace that with your shortcode.

/**
 * Filters all menu item URLs for a #placeholder#.
 *
 * @param WP_Post[] $menu_items All of the nave menu items, sorted for display.
 *
 * @return WP_Post[] The menu items with any placeholders properly filled in.
 */
function my_dynamic_menu_items( $menu_items ) {

    // A list of placeholders to replace.
    // You can add more placeholders to the list as needed.
    $placeholders = array(
        '#profile_link#' => array(
            'shortcode' => 'my_shortcode',
            'atts' => array(), // Shortcode attributes.
            'content' => '', // Content for the shortcode.
        ),
    );

    foreach ( $menu_items as $menu_item ) {

        if ( isset( $placeholders[ $menu_item->url ] ) ) {

            global $shortcode_tags;

            $placeholder = $placeholders[ $menu_item->url ];

            if ( isset( $shortcode_tags[ $placeholder['shortcode'] ] ) ) {

                $menu_item->url = call_user_func( 
                    $shortcode_tags[ $placeholder['shortcode'] ]
                    , $placeholder['atts']
                    , $placeholder['content']
                    , $placeholder['shortcode']
                );
            }
        }
    }

    return $menu_items;
}
add_filter( 'wp_nav_menu_objects', 'my_dynamic_menu_items' );

You just need to set 'shortcode' in the $placeholders array, and optionally 'atts' and 'content'.

For example, if your shortcode is like this:

[example id="5" other="test"]Shortcode content[/example]

You would update:

'#placeholder#' => array(
    'shortcode' => 'example';
    'atts' => array( 'id' => '5', 'other' => 'test' );
    'content' => 'Shortcode content';
),

Note that I don't use do_shortcode() because it is a resource intensive function and isn't the right tool for the job in this case.

like image 182
J.D. Avatar answered Sep 17 '22 19:09

J.D.


@Tim This code will work

put it in functions.php file

add_filter('wp_nav_menu_items', 'do_shortcode');
like image 25
usama sulaiman Avatar answered Sep 18 '22 19:09

usama sulaiman