如何从Astra主题调用公共函数init_quick_view实现指定分类启用Quickview
你触发的报错是因为$this变量仅可在类的内部上下文使用,你在全局运行的functions.php中直接调用$this时,没有对应的类实例关联,因此会抛出对象上下文错误。
Astra的Quickview初始化方法init_quick_view属于Astra_Ext_WooCommerce_Markup类的公共方法,你可以通过该类内置的单例方法get_instance()获取有效实例,再调用对应方法。
完整实现方案如下:
实现步骤
- 首先移除Astra默认全局注册的Quickview初始化钩子,避免全局逻辑和你的自定义逻辑冲突
- 自定义钩子回调,在商品循环中加入分类判断,仅在符合条件时调用Quickview初始化方法
完整代码
// 移除Astra默认全局Quickview初始化逻辑 add_action( 'wp', 'remove_astra_default_quickview' ); function remove_astra_default_quickview() { remove_action( 'woocommerce_shop_loop', array( Astra_Ext_WooCommerce_Markup::get_instance(), 'init_quick_view' ), 999 ); } // 仅指定商品分类启用Quickview add_action( 'woocommerce_shop_loop', 'custom_astra_quickview_by_category', 999 ); function custom_astra_quickview_by_category() { // 此处替换为你要启用Quickview的商品分类,支持填分类别名、ID、名称 $enabled_categories = [ 'clothing', 'digital', 15 ]; global $product; if ( ! is_a( $product, 'WC_Product' ) ) { return; } // 判断当前商品是否属于允许的分类 if ( has_term( $enabled_categories, 'product_cat', $product->get_id() ) ) { $astra_woo_instance = Astra_Ext_WooCommerce_Markup::get_instance(); $astra_woo_instance->init_quick_view(); } }
注意事项
- 代码请添加到你当前使用的子主题functions.php文件末尾,不要直接修改Astra父主题源码,避免主题更新后代码被覆盖
- 如果需要反向实现「仅排除指定分类」,只需将判断条件改为
!has_term( $enabled_categories, 'product_cat', $product->get_id() )即可
内容的提问来源于stack exchange,提问作者jlock
相关产品推荐
相关产品推荐

