求助:修改WooCommerce产品固定链接为查询参数形式
解决WooCommerce产品URL重写为查询参数的方案
方案1:利用WordPress重写规则+WooCommerce产品映射(推荐,保留全站功能)
直接通过PHP代码添加自定义重写规则,同时完成查询变量到产品的映射,无需额外插件:
- 添加核心代码
将以下代码放到主题的functions.php文件,或者独立的自定义插件中:
// 注册自定义查询变量 function register_artnr_var($vars) { $vars[] = 'artnr'; return $vars; } add_filter('query_vars', 'register_artnr_var'); // 添加URL重写规则 function add_artnr_rewrite_rule() { // 匹配 /artnr/数字/ 格式的URL add_rewrite_rule( '^artnr/([0-9]+)/?$', 'index.php?artnr=$matches[1]', 'top' ); } add_action('init', 'add_artnr_rewrite_rule'); // 处理请求,加载对应产品 function load_product_by_artnr() { global $wp_query; if (!isset($wp_query->query_vars['artnr']) || empty($wp_query->query_vars['artnr'])) return; $artnr = $wp_query->query_vars['artnr']; // 这里根据你的实际情况选择匹配逻辑: // 情况1:artnr是产品SKU $product_id = wc_get_product_id_by_sku($artnr); // 情况2:artnr是自定义字段(替换成你的字段名) // $product_id = get_posts(array( // 'post_type' => 'product', // 'meta_key' => 'artnr', // 'meta_value' => $artnr, // 'posts_per_page' => 1, // 'fields' => 'ids' // ))[0] ?? 0; if ($product_id) { // 重置查询参数,让WordPress加载对应产品页面 $wp_query->set('p', $product_id); $wp_query->set('post_type', 'product'); $wp_query->is_single = true; $wp_query->is_product = true; status_header(200); } else { // 无匹配产品时返回404 $wp_query->set_404(); status_header(404); } } add_action('template_redirect', 'load_product_by_artnr');
- 刷新重写规则
代码添加后,进入WordPress后台「设置」→「固定链接」,直接点击「保存更改」(无需修改任何设置),触发重写规则刷新。
方案2:.htaccess直接跳转(仅适用于artnr对应产品ID的场景)
如果你的artnr就是产品ID,可以在.htaccess的# BEGIN WordPress块内添加以下规则:
RewriteRule ^artnr/([0-9]+)/?$ /?p=$1&post_type=product [L,QSA]
注意:如果artnr是SKU或自定义字段,此方法无效,因为.htaccess无法直接查询数据库。
关键注意事项
- 不要修改WooCommerce核心文件,所有自定义代码放在主题
functions.php或独立插件中,避免更新丢失。 - 若有现有自定义PHP集成,先在测试环境验证代码兼容性。
- 方案1中需根据实际业务逻辑,选择SKU或自定义字段的匹配方式。
内容的提问来源于stack exchange,提问作者Alex Moura
相关产品推荐
相关产品推荐

