WooCommerce中已登录用户时修改账户菜单文字的实现方法
自定义WooCommerce二级菜单"My Account"文字(登录状态切换)
嘿,刚好能帮你搞定这个需求!不用新建菜单也不用装插件,咱们直接用子主题的代码就能实现。
核心思路是定位到你指定的二级菜单,遍历找到"My Account"菜单项,根据用户登录状态替换显示文字,具体代码如下,你直接复制到Storefront子主题的functions.php文件里就行:
function modify_my_account_menu_text( $items, $args ) { // 精准匹配目标菜单的标识(自动转成WordPress标准的slug格式) if ( 'desktop-secondary-top-right-en' === sanitize_title( $args->theme_location ) ) { // 遍历所有菜单项,找到我们要修改的"My Account" foreach ( $items as &$item ) { // 统一转小写比较,避免大小写不匹配的问题 if ( 'my account' === strtolower( $item->title ) ) { if ( is_user_logged_in() ) { // 这里替换成你想要的登录后显示的文字,比如"Your Account" $item->title = __( 'Your Account', 'storefront-child' ); } // 未登录状态保持原文字,所以不用额外处理 break; // 找到目标项就退出循环,节省资源 } } } return $items; } // 注册针对目标菜单的过滤器 $menu_filter = 'wp_nav_menu_' . sanitize_title( "Desktop secondary top right EN" ) . '_items'; add_filter( $menu_filter, 'modify_my_account_menu_text', 20, 2 );
几个关键细节说明:
- 菜单匹配:用
sanitize_title把你的菜单名转成WordPress标准的slug格式,确保只修改你指定的"Desktop secondary top right EN"菜单,不会影响其他菜单 - 文字匹配:用
strtolower统一转小写比较,不管你后台菜单里的"My Account"是大写开头还是全小写,都能精准匹配 - 翻译支持:用
__()函数包裹新文字,如果你需要做多语言,直接在子主题的语言文件里添加翻译即可;不需要翻译的话,直接写成$item->title = 'Your Account';就行 - 优先级:把过滤器优先级设为20,确保在其他可能的菜单修改逻辑之后执行,保证你的修改能生效
注意事项:
- 一定要放到子主题的
functions.php里,别改父主题的文件,不然WooCommerce或Storefront更新后你的修改就丢失了 - 确认后台菜单里的"My Account"文字和代码里的匹配逻辑一致,比如如果后台是"My Account"(首字母大写),代码里的
strtolower处理后是"my account",完全匹配
内容的提问来源于stack exchange,提问作者Louis
相关产品推荐
相关产品推荐

