如何在WordPress中配置重写规则处理产品详情页URL参数
解决WordPress重写规则导致页面跳首页的问题
问题出在哪
你之前写的重写规则是针对product-detail/MH-TOOL-152这种路径式URL的,但实际二维码跳转的是product-detail?model=MH-TOOL-152&isToolId=1这种带查询参数的URL,规则完全不匹配,WordPress找不到对应的页面,就直接跳首页了。另外,你没注册model这个自定义查询变量,就算规则匹配上,WordPress也识别不了这个参数。
正确配置步骤
1. 让WordPress识别model参数
添加这段代码,把model加入WordPress的查询变量白名单:
function mywebsite_register_query_vars( $vars ) { $vars[] = 'model'; return $vars; } add_filter( 'query_vars', 'mywebsite_register_query_vars' );
2. 配置正确的重写规则
根据实际需求,我们适配二维码的带参URL,同时顺便兼容路径式URL方便后续扩展:
function mywebsite_rewrite_rule() { // 兼容路径形式的URL:product-detail/model/产品型号 add_rewrite_rule( '^product-detail/model/([^/]+)/?', 'index.php?pagename=product-detail&model=$matches[1]', 'top' ); } add_action( 'init', 'mywebsite_rewrite_rule' );
3. 确保product-detail页面存在
去WordPress后台创建一个名为product-detail的页面,在页面内容里添加你需要加载的短代码(比如[product_detail])。
4. 在短代码中获取model参数并查询产品
修改短代码函数,通过model参数查询对应SKU的产品并输出详情:
function product_detail_shortcode() { $model = get_query_var('model'); if ( empty($model) ) { return '产品型号参数缺失'; } // 以WooCommerce为例,通过SKU查询产品 $product_id = wc_get_product_id_by_sku( $model ); $product = $product_id ? wc_get_product($product_id) : null; // 输出产品详情内容 ob_start(); if ( $product ) { echo '<h2>' . $product->get_name() . '</h2>'; echo $product->get_description(); } else { echo '未找到对应产品'; } return ob_get_clean(); } add_shortcode( 'product_detail', 'product_detail_shortcode' );
5. 刷新重写规则
这一步别遗漏:
- 进入WordPress后台的设置→固定链接
- 无需修改任何设置,直接点击保存更改,WordPress会自动刷新重写规则
测试验证
现在访问二维码跳转的URLhttps://mywebsite.com/product-detail?model=MH-TOOL-152&isToolId=1,应该能正常加载product-detail页面并显示对应产品内容;测试路径式URLhttps://mywebsite.com/product-detail/model/MH-TOOL-152,也能正常打开。
内容的提问来源于stack exchange,提问作者Never Stop Learning
相关产品推荐
相关产品推荐

