如何为WooCommerce动态生成的自定义端点设置菜单指向?
解决WooCommerce账户菜单指向动态生成URL的问题
一、移除原有静态端点配置
原来的代码是创建固定端点的,现在要改成动态跳转,先删除这些冗余代码:
// 删掉以下代码块 function AddCustomTabEndpoint() { add_rewrite_endpoint('Device-Profile', EP_ROOT | EP_PAGES ); } add_action('init','AddCustomTabEndpoint' ); function CustomTabQueryVars( $vars ) { $vars[] = 'Device-Profile'; return $vars; } add_filter('query_vars','CustomTabQueryVars', 0 ); function MyCustomTabContent() { echo "<h3>Device-Profile</h3><p>Lorem Ipsum is simply dummy text of the printing and typesetting industry.</p>"; } add_action('woocommerce_account_Device-Profile_endpoint','MyCustomTabContent');
二、修改账户菜单项的动态链接
保留添加菜单项的逻辑,通过过滤器动态设置链接。假设用户提交表单后,动态ID(如12345)被存在用户元数据device_profile_id中:
function AddCustomTabMyAccount( $items ) { // 添加菜单项到账户菜单 $items['device-profile'] = 'Device Profile'; return $items; } add_filter('woocommerce_account_menu_items','AddCustomTabMyAccount'); // 动态生成菜单项链接 function CustomTabDynamicUrl( $url, $endpoint, $value, $user ) { if ( $endpoint === 'device-profile' ) { // 从用户元数据中获取已生成的设备ID $device_id = get_user_meta( $user->ID, 'device_profile_id', true ); if ( $device_id ) { // 拼接目标动态URL $url = home_url( "/page_is_built/{$device_id}/" ); } else { // 若用户未提交表单,跳转到表单页面(替换为你的表单实际URL) $url = home_url( "/submit-device-profile/" ); } } return $url; } add_filter('woocommerce_get_endpoint_url', 'CustomTabDynamicUrl', 10, 4);
三、添加动态URL的重写规则
让WordPress能识别/page_is_built/12345/这类URL,需要注册重写规则:
function AddDeviceProfileRewriteRule() { add_rewrite_rule( '^page_is_built/([0-9]+)/?$', 'index.php?device_profile_id=$matches[1]', 'top' ); } add_action('init', 'AddDeviceProfileRewriteRule'); // 注册自定义查询变量 function RegisterDeviceProfileQueryVar( $vars ) { $vars[] = 'device_profile_id'; return $vars; } add_filter('query_vars', 'RegisterDeviceProfileQueryVar');
四、处理动态页面内容
通过钩子输出对应设备的页面内容,也可以创建独立模板文件(如page-device-profile.php)实现:
function RenderDeviceProfilePage() { global $wp_query; if ( isset( $wp_query->query_vars['device_profile_id'] ) ) { $device_id = $wp_query->query_vars['device_profile_id']; // 根据设备ID获取数据并输出内容 echo "<h3>设备档案 #{$device_id}</h3>"; echo "<p>这里展示该设备的详细信息</p>"; } else { // 无有效ID时的提示 echo "<h3>无效的设备ID</h3>"; echo "<p>请先提交设备信息生成档案</p>"; } } add_action('template_redirect', 'RenderDeviceProfilePage');
最后一步:刷新重写规则
完成配置后,进入WordPress后台「设置」→「固定链接」页面,点击「保存更改」,刷新重写规则使新配置生效。
内容的提问来源于stack exchange,提问作者Aaron Busch
相关产品推荐
相关产品推荐

