我正在使用WordPro与UserPro,并希望我的菜单显示登录用户的名字,链接到用户个人资料页面。
问题是在我的菜单结构中,“配置文件”菜单选项应该包含一个子菜单,其中包含“编辑配置文件”,“提交”和“注销”。
这是我目前的代码:
/*earlier code, currently commented out, for function to
display username in menu using #profile_name# placeholder
function give_profile_name($atts){
echo userpro_profile_data('first_name', get_current_user_id());
}
add_shortcode('profile_name', 'give_profile_name');
add_filter( 'wp_nav_menu_objects', 'my_dynamic_menu_items' );
function my_dynamic_menu_items( $menu_items ) {
foreach ( $menu_items as $menu_item ) {
if ( '#profile_name#' == $menu_item->title ) {
global $shortcode_tags;
if ( isset( $shortcode_tags['profile_name'] ) ) {
// Or do_shortcode(), if you must.
$menu_item->title = call_user_func( $shortcode_tags['profile_name'] );
}
}
}
return $menu_items;
}
end of earlier code */
//currently in use, unlinked code
add_filter( 'wp_nav_menu_items', 'my_custom_menu_item');
function my_custom_menu_item($items)
{
if(is_user_logged_in())
{
$user=wp_get_current_user();
$name=$user->user_firstname;
$items .= '<li>'.$name.'';
}
return $items;
}
?>
我可以摆弄并尝试通过摆弄Firebug中的代码来添加菜单下的子菜单,但这意味着手动编辑functions.php中的所有链接,这将是乏味的。
我希望能够通过Wordpress菜单轻松添加,编辑,删除和重定向子菜单项。
请告知。
答案 0 :(得分:2)
好的,我找到了一个解决方案(它可以用于任何主题,任何插件,因为它只使用核心WordPress功能)。
在菜单中,将用户名称的菜单项命名为占位符(例如:#profile_name#,#user#,#random#等)
现在,将以下代码添加到您的子主题函数.php:
function give_profile_name($atts){
$user=wp_get_current_user();
$name=$user->user_firstname;
return $name;
}
add_shortcode('profile_name', 'give_profile_name');
add_filter( 'wp_nav_menu_objects', 'my_dynamic_menu_items' );
function my_dynamic_menu_items( $menu_items ) {
foreach ( $menu_items as $menu_item ) {
if ( '#profile_name#' == $menu_item->title ) {
global $shortcode_tags;
if ( isset( $shortcode_tags['profile_name'] ) ) {
// Or do_shortcode(), if you must.
$menu_item->title = call_user_func( $shortcode_tags['profile_name'] );
}
}
}
return $menu_items;
}
如果您使用自己的占位符,请记得将#profile_name#替换为上述代码中自定义占位符的名称。
如果我误用了“占位符”一词,我会道歉。