как вставить шорткод в меню wordpress
Я сделал пункт меню с этим кодом. Появляется пункт меню, но вывод шорткода отсутствует. Есть ли что-то, что я могу добавить, или другой метод, который сделает это. Я добавил в надежде что это может помочь.
add_filter('wp_nav_items', 'do_shortcode', 7);
или может кто-то знает, что это невозможно и может сказать мне.
/* 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;
}
спасибо
2 ответов
вы не можете использовать шорткоды непосредственно в URL меню на странице меню, потому что скобки удаляются. Но вы можете использовать заполнители следующим образом:#profile_link#
.
со следующим кодом в functions.php
, вы можете создать пользовательский пункт меню с URL #profile_link#
, и он заменит это вашим шорткодом.
/**
* 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' );
вам просто нужно установить 'shortcode'
на $placeholders
массив, а также дополнительно 'atts'
и 'content'
.
например, если ваш шорткод вот так:
[example id="5" other="test"]Shortcode content[/example]
игры:
'#placeholder#' => array(
'shortcode' => 'example';
'atts' => array( 'id' => '5', 'other' => 'test' );
'content' => 'Shortcode content';
),
обратите внимание, что я не используйте do_shortcode()
потому что это ресурсоемкая функция и не является правильным инструментом для работы в этом случае.
@Tim Этот код будет работать
положите его в функции.файл php
add_filter('wp_nav_menu_items', 'do_shortcode');