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

如何从Astra主题调用公共函数init_quick_view实现指定分类启用Quickview

你触发的报错是因为$this变量仅可在类的内部上下文使用,你在全局运行的functions.php中直接调用$this时,没有对应的类实例关联,因此会抛出对象上下文错误。

Astra的Quickview初始化方法init_quick_view属于Astra_Ext_WooCommerce_Markup类的公共方法,你可以通过该类内置的单例方法get_instance()获取有效实例,再调用对应方法。

完整实现方案如下:

实现步骤

  1. 首先移除Astra默认全局注册的Quickview初始化钩子,避免全局逻辑和你的自定义逻辑冲突
  2. 自定义钩子回调,在商品循环中加入分类判断,仅在符合条件时调用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:48:04