检查 WooCommerce 是不是处于活动状态以及使用的版本

Posted

技术标签:

【中文标题】检查 WooCommerce 是不是处于活动状态以及使用的版本【英文标题】:Checking if WooCommerce is active and what version is used检查 WooCommerce 是否处于活动状态以及使用的版本 【发布时间】:2019-09-30 14:11:48 【问题描述】:

我需要检查 WooCommerce 是否处于活动状态并检查其版本号以使其在新旧版本中的工作方式不同。

我发现WC_VERSION 存储版本号,所以如果存在,也意味着WooCommerce 处于活动状态。问题是它只能在插件加载后返回任何东西。我想检查版本,然后在一般范围内使用 woocommerce_ver_check function 之外。我可以不使用全局变量吗?

我想做这样的事情,但woocommerce_ver_check() 始终为空,因为它在加载 WooCommerce 之后执行,这与未分配给任何钩子的其余代码不同:

// Check WooCommerce version.
add_action('plugins_loaded', 'woocommerce_ver_check');
function woocommerce_ver_check() 
    if (defined('WC_VERSION')) return WC_VERSION; 


// Only if WooCommerce is active.
if (! woocommerce_ver_check() == null  ) 
    if ( version_compare( WC_VERSION, '3.0', '>=' ) ) 
        // new version code
     else 
        // old version code
    

【问题讨论】:

我认为您需要更好地解释您想要实现的目标,以及为什么您拥有的功能不适合。 我在故障排除方面取得了一些进展,并对原始帖子的内容进行了大修。希望现在更清楚了。 【参考方案1】:

您也可以尝试使用以下(用于 WooCommerce 第三方插件):

if ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) 
    if ( version_compare( WC_VERSION, '3.0', '<' ) ) 
        // Old version code (example)
        $product_id = $cart_item['data']->id
     else 
        // New version code (example)
        $product_id = $cart_item['data']->get_id();
    

对于新的 WooCommerce 3 CRUD 对象方法,您还可以使用 method_exists(),例如:

$order_id = method_exists( $order, 'get_id' ) ? $order->get_id() : $order->id;

【讨论】:

我最初使用的是相同的,但是当我在我的测试站点上从 GitHub 安装 WooCommerce 并且它的路径为 woocommerce-2.6.0/woocommerce.php 时,它不能正确处理这种情况。部分匹配很容易失败,因为某些插件首先在其 slug 中使用“woocommerce” @RyszardJędraszyk 这是不诚实的……对不起,但这在正常的 WooCommerce 安装中不会失败,并且它被许多官方 WoCommerce 第三方插件使用。您描述的案例不是正常行为,它与黑客案例更相关,因为人们不会从 github 下载 Woocommerce。此外,in_array() 不会与其他在其 slug 中首先使用“woocommerce”的插件匹配...... 我的意思是,如果我以某种方式尝试在 slug 之后添加通配符,它​​将失败。你是对的,我有时希望事情太完美,而我应该简单地将文件夹名称更改为“woocommerce”以进行 GitHub 安装( woocommerce 文档说它可以工作 docs.woocommerce.com/document/…@LoicTheAztec

以上是关于检查 WooCommerce 是不是处于活动状态以及使用的版本的主要内容,如果未能解决你的问题,请参考以下文章

检查蓝牙是不是在 Android 上处于活动状态?

检查窗口是不是处于活动状态

有没有办法检查一个对象的所有孩子是不是都处于活动状态?

使用 Session ID 检查会话是不是处于活动状态 - Laravel

如何在android中检查3g是不是处于活动状态

Laravel - 检查帐户是不是处于活动状态