实际上,我所需要的只是更改菜单中的一个特定按钮,因此用户登录时会有所不同-在这种情况下,菜单按钮将是“成员配置文件”按钮,而不是“登录”按钮
是的,您只能使用一个菜单,假设它的slug是“my\\u menu”,请不要添加到它的成员配置文件或登录url,而是使用wp_nav_menu_{$menu_slug}_items 过滤器:
// \'my_menu\' in filter name is the slug of the menu
add_filter(\'wp_nav_menu_my_menu_items\', \'menu_add_admin_buttons\', 20, 2);
function menu_add_admin_buttons( $items, $args ) {
$btn_format = \'<li><a href="%s">%s</a></li>\';
if ( is_user_logged_in() ) {
$btn = sprintf($btn_format, admin_url(\'profile.php\'), __(\'Your Profile\') );
} else {
$btn = sprintf($btn_format, wp_login_url(), __(\'Log In\') );
}
return $items . $btn;
}
$items 是当前菜单项的当前html,该字符串包含一系列
<li><a ... </a></li>.
菜单的slug等于sanitize_title($menu_name) i、 e.它删除所有特殊字符,将重音字符转换为非重音字符,并将空格转换为-.
E、 g.如果名称为“Main Menu”,则slug为“Main Menu”。
菜单的名称是创建菜单时在wp后端写入的名称,请参见下图。

当然可以使用sanitize_title 从名称创建过滤器,例如。
$menu_filter = \'wp_nav_menu_\' . sanitize_title("Main Menu") . \'_items\';
add_filter($menu_filter, \'menu_add_admin_buttons\', 20, 2);