Вы можете использовать class_exists, чтобы проверить, активен ли плагин. Это необходимо сделать при использовании класса PHP плагина в вашей теме.

Официальная документация PHP — class_exists

Если вы не используете 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.

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вы можете использовать эти HTML теги:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>