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
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.
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.
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.
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.
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.
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.
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.
@Tim This code will work
put it in functions.php file
add_filter('wp_nav_menu_items', 'do_shortcode');
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With