为WooCommerce我的账户页面自定义端点填充产品
问题修复方案
1. 修正端点钩子名称(核心问题)
你的代码中注册的端点是narcx-products,但绑定内容的钩子名写错了,导致内容函数无法触发。将错误的钩子替换为正确名称:
原错误代码:
add_action( 'woocommerce_account_new-item_endpoint', 'add_new_item_content' );
修正为:
add_action( 'woocommerce_account_narcx-products_endpoint', 'add_new_item_content' );
2. 刷新固定链接规则
添加新的Rewrite端点后,必须刷新WordPress的固定链接规则:
- 进入WordPress后台 → 设置 → 固定链接
- 无需修改任何设置,直接点击「保存更改」按钮,系统会自动刷新规则
3. 移除账户数据信息(按需选择)
方式1:隐藏当前标签页的默认账户内容
如果希望在「NarcX Products」标签页中只显示产品,不加载默认的账户相关内容(如用户信息栏等),添加以下代码:
add_action('template_redirect', 'hide_account_default_content_for_narcx_tab'); function hide_account_default_content_for_narcx_tab() { if (is_wc_endpoint_url('narcx-products')) { remove_action('woocommerce_account_content', 'woocommerce_account_content'); } }
方式2:移除其他账户菜单选项
如果需要删除「我的账户」页面中其他默认菜单(如订单、地址、账户详情等),修改add_new_item_tab函数,只保留自定义标签:
function add_new_item_tab( $items ) { $items = array( 'narcx-products' => 'NarcX Products' ); return $items; }
完整修正后的代码
add_action( 'init', 'register_new_item_endpoint'); /** * Register New Endpoint. * * @return void. */ function register_new_item_endpoint() { add_rewrite_endpoint( 'narcx-products', EP_ROOT | EP_PAGES ); } add_filter( 'query_vars', 'new_item_query_vars' ); /** * Add new query var. * * @param array $vars vars. * * @return array An array of items. */ function new_item_query_vars( $vars ) { $vars[] = 'narcx-products'; return $vars; } add_filter( 'woocommerce_account_menu_items', 'add_new_item_tab' ); /** * Add New tab in my account page. * * @param array $items myaccount Items. * * @return array Items including New tab. */ function add_new_item_tab( $items ) { // 若需保留部分默认菜单,可调整此数组,例如保留退出登录: // $items = array( // 'narcx-products' => 'NarcX Products', // 'customer-logout' => $items['customer-logout'] // ); // 仅保留自定义标签的代码: $items = array( 'narcx-products' => 'NarcX Products' ); return $items; } // 修正后的钩子名称 add_action( 'woocommerce_account_narcx-products_endpoint', 'add_new_item_content' ); add_filter( 'widget_text', 'do_shortcode' ); /** * Add content to the new tab. * * @return string. */ function add_new_item_content() { echo do_shortcode('[products]'); } // 隐藏当前标签页的默认账户内容(可选) add_action('template_redirect', 'hide_account_default_content_for_narcx_tab'); function hide_account_default_content_for_narcx_tab() { if (is_wc_endpoint_url('narcx-products')) { remove_action('woocommerce_account_content', 'woocommerce_account_content'); } }
验证步骤
- 将修正后的代码替换主题
functions.php中的原有代码 - 刷新固定链接规则
- 登录前端「我的账户」页面,点击「NarcX Products」标签,即可看到产品列表
内容的提问来源于stack exchange,提问作者DynamicEm123
相关产品推荐
相关产品推荐

