如何在首页注册脚本?添加is_home() || is_front_page()后报错
问题分析与修正方案
错误原因
添加首页条件后出错,核心问题有两个:
- 逻辑运算符优先级混乱:原代码中
&&优先级高于||,添加is_home() || is_front_page()后,首页会直接进入if分支,但此时页面中的$post->ID大概率不是WooCommerce产品ID,导致wc_get_product()返回false,后续调用$product->is_type()触发致命错误。 - 未校验产品对象有效性:直接调用
$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
相关产品推荐
相关产品推荐

