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

如何在首页注册脚本?添加is_home() || is_front_page()后报错

问题分析与修正方案

错误原因

添加首页条件后出错,核心问题有两个:

  1. 逻辑运算符优先级混乱:原代码中&&优先级高于||,添加is_home() || is_front_page()后,首页会直接进入if分支,但此时页面中的$post->ID大概率不是WooCommerce产品ID,导致wc_get_product()返回false,后续调用$product->is_type()触发致命错误。
  2. 未校验产品对象有效性:直接调用$product的方法,没有先判断它是否为合法的产品对象。

修正后的代码

if ( 
    ( function_exists( 'is_product' ) && ( is_product() || is_shop() || is_product_category() ) ) 
    || is_home() || is_front_page()
) {
    // 确保$post对象及ID存在
    if ( isset( $post->ID ) ) {
        $product = wc_get_product( $post->ID );
        
        // 仅当产品对象有效时继续处理
        if ( $product ) {
            $enabled = apply_filters( 'qlwcajax_product_enabled', '__return_true', $product );
            
            if ( ( $product->is_type( 'simple' ) || $product->is_type( 'variable' ) ) && $enabled ) {
                wp_enqueue_script( 'woo-ajax-add-to-cart' );
            }
        }
    }

    // 如果你希望首页无论是否有单个产品都加载脚本(比如首页有产品列表),可以取消下面的注释
    // else {
    //     wp_enqueue_script( 'woo-ajax-add-to-cart' );
    // }
}

关键修改说明

  • 逻辑分组:用括号明确产品相关页面的判断逻辑,避免优先级问题导致的误触发;
  • 安全校验:增加isset( $post->ID )和$product有效性判断,杜绝因对象不存在引发的错误;
  • 灵活扩展:保留了全局加载脚本的分支,可根据首页是否有产品列表的需求自行调整。

内容的提问来源于stack exchange,提问作者Vyk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 21:35:35