Я пытаюсь изменить голову и ногу моих страниц WooCommerce. У меня есть if
заявление, которое должно быть нацелено на магазин и корзину WooCommerce, но это не так. Если я изменю PHP после if
утверждения, ничего не изменится. Но если я изменю PHP в else
заявлении, это работает:
Это не работает:
<?php if (function_exists('woocommerce')): ?>
<?php if (is_cart() || is_shop()): ?>
<?php get_template_part('inc/CHANGE'); ?>
<?php endif ?>
<?php else: ?>
<?php get_template_part('inc/page-header'); ?>
<?php endif ?>
Это работает:
<?php if (function_exists('woocommerce')): ?>
<?php if (is_cart() || is_shop()): ?>
<?php get_template_part('inc/page-header'); ?>
<?php endif ?>
<?php else: ?>
<?php get_template_part('inc/CHANGE'); ?>
<?php endif ?>
Я думаю, что функция WooCommerce может быть неправильно определена, потому что это также работает:
<?php if (is_cart() || is_shop()): ?>
<?php get_template_part('inc/header-shop'); ?>
<?php else: ?>
<?php get_template_part('inc/page-header'); ?>
<?php endif ?>
источник
if( function_exists( 'WC' ) )
, но точнее будет указать имя плагина в проверке класса, как вы и предлагали ;-)WC()
существует , я просто пытался найти более короткий путь, ссылаясь на нее ;-) Я думаю, это было бы более точно сif( function_exists( 'WC' ) && is_object( WC() ) && is_a( WC(), 'WooCommerce' ) )
;-). Играя вместе, мы могли бы также проверить на наличие констант (напримерWOOCOMMERCE_VERSION
) или действий (напримерdid_action( 'woocommerce_loaded' )
) ;-) @ialocincheck_for_woocommerce()
функцию и зарегистрировать его сadd_action('plugins_loaded', 'check_for_woocommerce');
Многие официальные плагины WooCommerce решают эту проблему, проверяя
WC_VERSION
константу, которую определяет WooCommerce, после загрузки всех плагинов. Упрощенный код:Дополнительным бонусом является то, что вы можете использовать PHP
version_compare()
для дальнейшей проверки, установлена ли достаточно новая версия WooCommerce (если ваш код требует определенных возможностей), так как константа WC_VERSION подходит для этого.источник
Чтобы улучшить ответы, мы используем это:
Это предотвращает две проблемы:
if ( in_array( 'woocommerce/woocommerce.php', apply_filters(...
не работает.if ( class_exists( 'WooCommerce' ) ) { .. }
не работает.источник
Я нашел это полезным из документации разработчика WooCommerce.
Вы можете просто позвонить
is_woocommerce_active()
функцию в вашем файле плагина.пример
is_woocommerce_active, определенный как ниже согласно документации woo
источник
Вы можете свернуть свой плагин в чек, чтобы увидеть, установлен ли WooCommerce и активен ли он:
источник