Проверка, активен ли WooCommerce и какая версия используется - PullRequest
1 голос
/ 13 мая 2019

Мне нужно проверить, активен ли 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 Ответ

0 голосов
/ 13 мая 2019

Вы также можете попробовать использовать следующее (которое используется для сторонних плагинов 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();
    }
}

Для новых методов объекта CRUD WooCommerce 3 вы также можете использовать method_exists(), например, например:

$order_id = method_exists( $order, 'get_id' ) ? $order->get_id() : $order->id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...