WordPress предоставляет набор основных функций, называемых подключаемыми функциями. Как следует из названия, мы можем подключить пользовательский код к этим функциям, чтобы переопределить и улучшить их функциональность в соответствии с нашими требованиями.
Реальная сила подключаемых функций заключается в возможности объявлять пользовательские функции и делать их подключаемыми для других разработчиков и дизайнеров. Это широко используемая техника для расширения функциональности и возможностей дочерних тем WordPress.
В этой статье мы рассмотрим концепцию подключаемых функций и их использование.
Использование подключаемых функций в ядре WordPress
Сменные функции в ядре WordPress находятся в файле pluggable.php внутри каталога wp-includes . Вы можете найти полный список подключаемых функций в разделе Подключаемые функции в Кодексе WordPress. Сначала я покажу вам список подключаемых функций, которые можно использовать практически на каждом сайте WordPress.
-
wp_logout
— используется для выхода пользователя из системы. Вы можете выполнять такие задачи, как удаление пользовательских переменных сеанса и запись времени сеанса пользователя в базу данных, написав специальную функциюwp_logout
. -
wp_mail
— самая популярная подключаемая функция из всех. Вы можете изменить эту функцию, чтобы использовать специальный шаблон электронной почты для ваших электронных писем или любых других свойств, связанных с отправкой электронной почты. -
wp_new_user_notification
— может использоваться для настройки формата электронной почты, отправляемой сразу после регистрации нового пользователя в системе. -
auth_redirect
— используется для перенаправления пользователя на страницу входа в систему, если пользователь еще не вошел в систему. Эту функцию можно использовать для отображения сообщения пользователю, в котором говорится, что пользователь должен пройти аутентификацию для доступа к запрашиваемой странице. -
wp_password_change_notification
— используется для отправки электронного письма приwp_password_change_notification
пароля. Вы можете добавить дополнительную информацию к этому письму, используя эту функцию.
Теперь давайте посмотрим, как мы можем подключить пользовательскую функцию к одной из вышеуказанных функций. Я буду использовать wp_logout
здесь. Сначала вы должны открыть файл pluggable.php и скопировать содержимое функции wp_logout
. Затем создайте новую функцию в вашем файле с тем же именем и включите код. Ниже приводится функция по умолчанию для wp_logout
:
01
02
03
04
05
06
07
08
09
10
11
|
if ( ! function_exists( ‘wp_logout’ ) ) {
/**
* Log the current user out.
*
* @since 2.5.0
*/
function wp_logout() {
wp_clear_auth_cookie();
do_action( ‘wp_logout’ );
}
}
|
Теперь давайте посмотрим на переопределенную версию функции wp_logout
:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
if ( ! function_exists( ‘wp_logout’ ) ) {
/**
* Log the current user out.
*
* @since 2.5.0
*/
function wp_logout() {
remove_sessions() ;
wp_clear_auth_cookie();
do_action( ‘wp_logout’ );
}
function remove_sessions() {
// Remove custom session and cookie information
}
}
|
Вы можете видеть, что я изменил функцию wp_logout
в своем плагине и добавил некоторый пользовательский код. Это процесс, которому нужно следовать, чтобы переопределить подключаемую функцию.
Важной вещью в приведенном выше коде является if ( ! function_exists( 'wp_logout' ) ) {
определенная вверху. Эта строка делает вашу функцию подключаемой, проверяя, существует ли функция с именем wp_logout
и загружает пользовательскую функцию. В противном случае он загрузит функцию по умолчанию в pluggable.php .
Вам может быть интересно, почему функция в плагине вызывается вместо функции по умолчанию, даже если обе функции имеют префикс с условием function_exists('wp_logout')
. Это связано с порядком выполнения действий WordPress, который я объясню позже.
Можно ли пропустить проверку function_exists
для пользовательских функций?
Да, это возможно. Но у вас будут проблемы в следующих двух сценариях, если вы пропустите проверку.
- Активация плагина — когда вы переопределяете подключаемую функцию внутри плагина без проверки и пытаетесь активировать эту функцию, она выдаст ошибку, в которой будет указано « Cannot redeclare wp_logout () ». Если вы удалите чек после активации, он будет работать правильно.
- Дублирующая функция в другом плагине. Существует вероятность того, что другой автор плагина переопределит ту же функцию без проверки условия. В таких случаях будет конфликт, так как обе функции будут иметь одинаковые имена и, следовательно, генерировать ошибку.
Риск здесь в том, что любой может переопределить вашу функцию без вашего ведома. Я думаю, что вы всегда должны иметь проверку состояния перед функцией, чтобы избежать конфликтов.
Теперь вы знаете, как работать с подключаемыми функциями. Итак, давайте посмотрим, где мы можем разместить подключаемые функции.
Процесс выполнения сменной функции
Я видел много разработчиков, включая подключаемые функции в файле functions.php темы и не получавших ожидаемых результатов. Вы должны хорошо знать порядок выполнения действий WordPress перед созданием подключаемых функций.
Вы можете найти полную процедуру выполнения в разделе Справочник действий в Кодексе WordPress. Я извлеку необходимые действия для моих объяснений на экране ниже.
На изображении выше показан общий процесс выполнения действий WordPress. Это может зависеть от типа функциональности, используемой в вашем плагине, и эти действия могут вызываться несколько раз во время запроса.
Вы должны четко видеть, что плагины «необходимо использовать» загружаются первыми, затем следуют активные плагины и подключаемые функции. Наконец тема загружена. Таким образом, в соответствии с процессом мы можем сделать следующие выводы о создании подключаемых функций.
- Все пользовательские подключаемые функции должны быть размещены внутри плагинов, так как плагины загружаются первыми.
- Если плагины не содержат подключаемых функций, будет использоваться основная функция по умолчанию.
- Вы не должны переопределять основные подключаемые функции в файлах тем, так как темы загружаются после подключаемых функций. Следовательно, будет использоваться функция по умолчанию.
Теперь вы знаете, где разместить свои подключаемые функции. Следующий вопрос — что произойдет, если два или более плагинов переопределяют одну и ту же функцию ядра Это вне вашего контроля, так как первый активированный плагин получит преимущество перед другими. Таким образом, если другой плагин активирован перед вашим плагином, ваша подключаемая функция не будет использоваться.
Вы можете просмотреть активный порядок плагинов, используя значение ключа active_plugins
в таблице параметров WordPress.
Важность подключаемых функций
Переопределение основных подключаемых функций позволяет нам расширить функциональность по умолчанию и, следовательно, очень полезно в определенных сценариях. Но реальная ценность подключаемых функций проявляется, когда вы создаете свои собственные подключаемые функции. Эти функции не будут иметь никакого отношения к основным функциям.
Как правило, новые подключаемые функции определены в ваших темах WordPress, чтобы расширить их функциональные возможности и позволить разработчикам дочерних тем переопределить их. Итак, давайте посмотрим, как мы можем определить настраиваемые подключаемые функции.
Создание пользовательских сменных функций
Сначала вам нужно будет создать функцию с проверкой существования, как мы делали с основными функциями. Следующий код показывает пример подключаемой функции для вашей темы:
1
2
3
4
5
|
if ( ! function_exists( ‘change_header’ ) ) {
function change_header() {
// Code for changing theme header
}
}
|
Ранее я упоминал не создавать подключаемые функции в файлах темы из-за зависимости от подключаемых функций по умолчанию. В этом сценарии мы создаем новые подключаемые функции и, следовательно, не будет никаких зависимостей. Таким образом, процесс выполнения действия не будет иметь эффекта вообще.
Когда использовать сменные функции?
Мы создаем дочерние темы, чтобы позволить разработчикам и дизайнерам расширить дизайн и функции родительской темы без изменения исходного кода оригинальной темы. Основная форма расширения может быть обеспечена путем дублирования CSS родительской темы внутри дочерней темы и выполнения необходимых настроек.
Помимо стилей CSS темы могут содержать полезные функции, такие как шорткоды, шаблоны страниц и пользовательские фильтры для предоставления элементов дизайна. Как разработчики тем, мы должны предоставить максимальные возможности для разработчиков дочерних тем. Мы можем эффективно использовать подключаемые функции, чтобы позволить разработчикам дочерних тем изменять эти функции.
Поэтому обязательно конвертируйте существующие функции темы в подключаемые функции, когда это необходимо для обеспечения максимальной расширяемости.
Резюме
Концепция подключаемых функций WordPress позволяет расширить функциональность ваших тем и плагинов. Обычно желательно переопределить подключаемые функции ядра WordPress в плагинах и собственные подключаемые функции в темах. Прежде чем создавать подключаемые функции, убедитесь, что вы правильно понимаете последовательность выполнения действий WordPress, чтобы избежать конфликтов.