如何在WooCommerce我的账户左侧菜单添加自定义链接?
没问题!要在WooCommerce我的账户左侧菜单添加自定义页面,注册自定义端点是最稳妥的解决方案,我给你一步步拆解实操步骤:
这是官方推荐的方式,能完美融入账户页面的路由体系,还能保留默认的菜单激活状态。
1. 注册新端点
首先用woocommerce_get_query_vars钩子注册你的自定义端点,把这段代码加到子主题的functions.php里,或者用自定义代码插件:
add_filter( 'woocommerce_get_query_vars', 'add_custom_account_endpoint' ); function add_custom_account_endpoint( $query_vars ) { // 这里的'my-custom-page'是端点名称,可自定义 $query_vars['my-custom-page'] = 'my-custom-page'; return $query_vars; }
重要操作:注册完端点后,一定要去WordPress后台的「设置→固定链接」页面,随便选一个选项点击保存(不用修改设置),让WordPress刷新路由规则,识别新的端点。
2. 添加菜单链接到账户侧边栏
用woocommerce_account_menu_items钩子把新页面的菜单项插入到左侧菜单里,还能控制它的位置:
add_filter( 'woocommerce_account_menu_items', 'add_custom_account_menu_item', 10, 1 ); function add_custom_account_menu_item( $items ) { // 把自定义菜单项插入到「订单」之后(数组索引2的位置) $new_items = array_slice( $items, 0, 2, true ) + array( 'my-custom-page' => '我的自定义页面' ) + // 这里的文本是菜单显示名称 array_slice( $items, 2, null, true ); return $new_items; }
这里的键名my-custom-page必须和第一步注册的端点名称完全一致,不然菜单无法正确跳转。
3. 关联你的自定义页面内容
有两种方式可以展示页面内容,按需选择:
方式A:用模板文件渲染内容(推荐)
在你的主题(或子主题)目录下,新建woocommerce/myaccount文件夹(如果没有的话),然后创建my-custom-page.php文件,写入你想要的内容:
<?php /** * WooCommerce 自定义账户页面模板 */ defined( 'ABSPATH' ) || exit; // 触发自定义钩子,方便后续扩展 do_action( 'woocommerce_account_my-custom-page_endpoint' ); // 这里写你的自定义内容 echo '<h2>我的专属自定义页面</h2>'; echo '<p>这是我为账户页面添加的自定义内容,完美融入WooCommerce风格!</p>'; ?>
这种方式能完全继承账户页面的样式,体验和原生页面一致。
方式B:跳转到已有的自定义页面
如果你已经创建了独立的WordPress页面,想让端点直接跳转过去,可以用template_redirect钩子实现:
add_action( 'template_redirect', 'redirect_custom_endpoint_to_page' ); function redirect_custom_endpoint_to_page() { global $wp; // 检查是否访问了自定义端点 if ( isset( $wp->query_vars['my-custom-page'] ) ) { // 替换成你的自定义页面ID,可在页面编辑页查看 $target_page_id = 123; wp_redirect( get_permalink( $target_page_id ) ); exit; } }
如果不想折腾端点,也可以直接在菜单里插入外部链接,但这种方式的URL不会是账户页面的子路径,且默认没有激活状态样式:
add_filter( 'woocommerce_account_menu_items', 'add_custom_external_menu_item' ); function add_custom_external_menu_item( $items ) { // 替换成你的自定义页面URL $custom_page_url = esc_url( get_permalink( 123 ) ); $items['custom-external-link'] = "<a href='{$custom_page_url}'>我的自定义页面</a>"; return $items; }
如果需要激活状态,可以额外加CSS来匹配当前页面的URL,给菜单项加is-active类。
- 之前用钩子没成功?大概率是没刷新固定链接!注册端点后必须去固定链接页面保存一次,否则WordPress无法识别新路由。
- 确保钩子优先级正确:
woocommerce_account_menu_items用默认的10优先级就足够,不要设得过高或过低。 - 代码要放在子主题
functions.php或自定义代码插件里,绝对不要直接修改WooCommerce核心文件,不然更新后会丢失修改。
内容的提问来源于stack exchange,提问作者Victor

