You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WooCommerce首页可变产品标题随变体切换不生效问题求助

解决WooCommerce首页可变产品标题随变体切换的问题

你的代码之所以在首页不生效,核心原因是开头的is_product()判断——这个条件只允许代码在单个产品详情页执行,而首页(即使你把产品页面设为首页)并不满足这个条件。下面是修改后的完整代码,我会逐一说明调整点:

add_filter( 'wp_footer','custom_product_title_script' ); 
function custom_product_title_script(){ 
    global $post; 

    // 调整触发条件:允许在产品详情页或首页执行
    if( ! ( is_product() || is_front_page() ) ) return; 

    // 针对首页获取正确的产品对象
    if( is_front_page() ){
        // 获取首页设置的页面ID(因为你把产品页设为首页)
        $front_page_id = get_option( 'page_on_front' );
        $product = wc_get_product( $front_page_id );
    } else {
        $product = wc_get_product( $post->ID );
    }

    // 仅针对可变产品
    if( ! $product->is_type( 'variable' ) ) return; 

    // 你设置的目标属性(保持不变)
    $attributes = array('pa_color'); 
    $data = array(); // 初始化数据数组,避免未定义警告

    // 遍历变体获取属性数据(逻辑保持不变)
    foreach($product->get_visible_children( ) as $variation_id ) { 
        foreach($product->get_available_variation( $variation_id )['attributes'] as $key => $value_id ){ 
            $taxonomy = str_replace( 'attribute_', '', $key ); 
            if( in_array( $taxonomy, $attributes) ){ 
                $data[ $variation_id ][$taxonomy] = get_term_by( 'slug', $value_id, $taxonomy )->name; 
            } 
        } 
    } 
    ?> 
    <script type="text/javascript"> 
    (function($){ 
        var variationsData = <?php echo json_encode($data); ?>, 
            // 适配首页的标题选择器:如果首页标题类不同,需要修改这里
            productTitle = $('.product_title').text(), 
            color = 'pa_color'; 

        // 优化标题更新函数:确保只修改当前产品的标题
        function update_the_title( productTitle, variationsData, color ){ 
            var selectedVarId = $('input.variation_id').val();
            if( selectedVarId && variationsData[selectedVarId] ){
                $('.product_title').text(productTitle + ' - ' + variationsData[selectedVarId][color]);
            } else {
                $('.product_title').text(productTitle);
            }
        } 

        // 页面加载完成后触发一次
        $(document).ready(function(){
            setTimeout(function(){ 
                update_the_title( productTitle, variationsData, color ); 
            }, 300); 
        });

        // 绑定变体选择事件:针对变体选择框而非所有select
        $('.variations select').on('change blur', function(){ 
            update_the_title( productTitle, variationsData, color ); 
        }); 
    })(jQuery); 
    </script> 
    <?php 
}

关键修改说明:

  1. 放宽触发条件:把if( ! is_product() ) return;改成if( ! ( is_product() || is_front_page() ) ) return;,让代码同时在产品详情页和首页执行。
  2. 首页产品对象获取:首页环境下,通过get_option('page_on_front')拿到你设置为首页的产品页面ID,再获取对应的产品对象,避免依赖$post->ID(首页的全局$post可能不是产品本身)。
  3. 事件绑定优化:把原代码的$('select').blur()改成$('.variations select').on('change blur'),避免影响页面上其他无关的下拉框,同时增加change事件(用户选择变体时更及时触发)。
  4. 标题更新逻辑优化:简化了遍历逻辑,直接通过选中的变体ID匹配数据,效率更高。

额外注意事项:

  • 检查选择器:如果首页的产品标题类不是.product_title(比如有些主题用.woocommerce-loop-product__title),需要修改脚本里的$('.product_title')为对应的类名。
  • 清除缓存:修改代码后,记得清除WordPress缓存、WooCommerce缓存以及浏览器缓存,确保新代码生效。
  • 多产品场景:如果首页有多个可变产品,你需要进一步调整代码,给每个产品添加独立的标识(比如产品ID作为前缀),避免标题混淆。

内容的提问来源于stack exchange,提问作者Tijilal R.S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:56:04