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

如何在YITH WooCommerce Compare插件外部调用$this->current_cat变量

如何在YITH WooCommerce Compare插件外部调用YITH_Woocompare_Frontend_Premium类的current_cat属性

要在类外部访问YITH_Woocompare_Frontend_Premium类的公共属性current_cat,核心是获取该类的实例——因为$this仅在类内部指向当前实例。具体实现步骤如下:

1. 获取类的单例实例

YITH系列插件的前端类通常采用单例模式,通过get_instance()方法返回类的唯一实例。你可以直接调用该方法获取实例,再访问current_cat属性:

// 获取YITH WooCompare前端类实例
$frontend_instance = YITH_Woocompare_Frontend_Premium::get_instance();
// 访问公共属性current_cat
$current_cat = $frontend_instance->current_cat;

2. 增加安全校验(避免报错)

为了防止类未加载或方法不存在导致的致命错误,建议添加前置判断:

if ( class_exists( 'YITH_Woocompare_Frontend_Premium' ) && method_exists( 'YITH_Woocompare_Frontend_Premium', 'get_instance' ) ) {
    $frontend_instance = YITH_Woocompare_Frontend_Premium::get_instance();
    $current_cat = $frontend_instance->current_cat;
    
    // 在此处使用$current_cat进行后续逻辑处理
}

3. 注意执行时机

确保代码在WordPress初始化完成后执行(比如挂载到wp_loaded或template_redirect钩子),避免因类未加载导致的错误:

add_action( 'wp_loaded', 'get_yith_compare_current_cat' );
function get_yith_compare_current_cat() {
    if ( class_exists( 'YITH_Woocompare_Frontend_Premium' ) && method_exists( 'YITH_Woocompare_Frontend_Premium', 'get_instance' ) ) {
        $frontend_instance = YITH_Woocompare_Frontend_Premium::get_instance();
        $current_cat = $frontend_instance->current_cat;
        // 处理逻辑
    }
}

与products_list调用方式的区别

你提到的products_list是从Cookie中直接读取,是因为该属性的数据被持久化存储在Cookie中;而current_cat是类运行时维护的公共属性,仅存在于类实例中,因此必须通过实例访问,无法直接从Cookie或全局变量读取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 23:02:16