Вы можете использовать class_exists
, чтобы проверить, активен ли плагин. Это необходимо сделать при использовании класса PHP плагина в вашей теме.
Если вы не используете class_exists
при использовании функций плагина в своей теме, вы получите сообщение об ошибке при загрузке страниц на сайте, если плагин деактивирован.
Давайте посмотрим на рабочий пример с использованием кода из очень популярного плагина WordPress Advanced Custom Fields (ACF).
Использование class_exists в вашей теме
Следующий код проверяет, активен ли плагин ACF. Используйте этот код с фрагментами кода, которые используют специальные функции ACF, такие как get_field();
.
Если вы этого не сделаете, ваш код вызовет ошибки, если будет добавлен в файл темы, когда плагин ACF не активен.
Следующий код проверяет, активен ли плагин ACF, ища класс acf
. Если класс acf
не существует, оператор return
немедленно завершает выполнение текущей функции.
if ( ! class_exists( 'acf' ) )
return;
Пример кода
Следующий код будет работать нормально, если вы создали поле в ACF с именем after_header
и активировали плагин.
add_action( 'genesis_before_loop', 'test_acf_function' );
function test_acf_function() {
echo get_field( 'after_header' );
}
Однако вот что происходит, когда вы деактивируете плагин ACF:
Fatal error: Call to undefined function get_field()
Вы получаете фатальную ошибку, потому что get_field
— это функция, закодированная в файлах ACF, поэтому она не будет работать при использовании в теме, когда плагин ACF неактивен.
Всегда добавляйте проверку для плагина при использовании функций плагина в вашей теме.
Вот обновленный код, который, как вы догадались, включает class_exists
.
add_action( 'genesis_before_loop', 'test_acf_function' );
function test_acf_function() {
if ( ! class_exists( 'acf' ) )
return;
echo get_field( 'after_header' );
}
Приведенный выше код проверяет, если class_exists
для плагина ACF, в противном случае возвращает false.
Другие методы
Другой метод с использованием тернарного оператора:
add_action( 'genesis_before_loop', 'test_acf_function' );
function test_acf_function() {
$output = class_exists( 'acf' ) ? get_field( 'after_header' ) : get_post_meta( get_the_ID(), 'after_header', true );
echo $output;
}
Приведенный выше код проверяет, существует ли класс acf
, что верно, когда подключаемый модуль ACF активен.
Если подключаемый модуль ACF активен, переменная $output
использует функцию ACF get_field('after_header')
в качестве своего значения.
В противном случае переменная $output
равна get_post_meta( get_the_ID(), 'after_header', true );
, что является функцией WordPress для настраиваемых (кастомных) полей и всегда работает в любой теме.
Если вы используете в своей теме функции WooCommerce, вам также необходимо убедиться, что плагин WooCommerce активен следующим образом:
if ( ! class_exists( 'WooCommerce' ) )
return;
Вы можете увидеть приведенный выше пример во многих новых темах, которые предназначены для работы с плагином WooCommerce из коробки и включают в себя специальную папку для woocommerce.