如何在WooCommerce中通过SKU直接跳转至指定商品变体页面
实现WooCommerce变体SKU的URL跳转与自动选中
原代码仅支持简单产品,要实现变体SKU的跳转并自动选中对应变体,需要分两步处理:后端跳转时携带变体ID参数,前端自动触发变体选择逻辑。
后端跳转代码(替换原有函数)
将原有代码替换为以下PHP代码,它会识别SKU对应的变体,跳转到父产品页面并携带变体ID参数:
add_action('template_redirect', 'sku_url_redirect_variation_support'); function sku_url_redirect_variation_support() { if (!isset($_GET['sku'])) return; $sku = wc_clean($_GET['sku']); $product_id = (int) wc_get_product_id_by_sku($sku); if (!$product_id) return; $product = wc_get_product($product_id); // 如果是变体产品,获取父产品链接并添加变体ID参数 if ($product->is_type('variation')) { $parent_id = $product->get_parent_id(); $parent_permalink = get_permalink($parent_id); $redirect_url = add_query_arg('variation_id', $product_id, $parent_permalink); } else { // 普通产品直接跳转 $redirect_url = get_permalink($product_id); } wp_safe_redirect($redirect_url); exit; }
前端自动选中变体的JS代码
添加以下JS代码,用于在父产品页面加载时,根据URL中的variation_id参数自动选中对应的变体选项:
add_action('wp_footer', 'auto_select_variation_from_url'); function auto_select_variation_from_url() { if (!isset($_GET['variation_id'])) return; ?> <script> jQuery(document).ready(function($) { var variationId = <?php echo esc_js($_GET['variation_id']); ?>; var $variationForm = $('form.variations_form'); if (!$variationForm.length) return; // 获取变体对应的属性值 $.getJSON($variationForm.attr('data-product_variations'), function(variations) { var targetVariation = variations.find(function(variation) { return variation.variation_id === variationId; }); if (!targetVariation) return; // 遍历所有属性,设置对应的选择框值 $.each(targetVariation.attributes, function(key, value) { var $select = $variationForm.find('select[name="' + key + '"]'); $select.val(value).trigger('change'); }); }); }); </script> <?php }
代码说明
- 后端部分:通过SKU找到产品后,判断是否为变体,若是则跳转至父产品页面并附加
variation_id参数;普通产品则保持原有逻辑。 - 前端部分:页面加载时读取URL中的
variation_id,通过产品的变体JSON数据找到对应属性值,自动选中下拉框并触发变化事件,让WooCommerce加载对应变体的信息。
内容的提问来源于stack exchange,提问作者micha
相关产品推荐
相关产品推荐

