Как использовать функции, найденные в pluggable.php, с моими файлами плагина

Вопрос или проблема

Я создаю плагин и мне нужно было использовать get_user_by() и wp_check_password() и некоторые классные функции из wordpress pluggable.php, но всегда выдается ошибка неопределенной функции.

Но если я включаю файл непосредственно в файл моего плагина, как здесь

include (ABSPATH . 'wp_includes/pluggable.php')

Я могу использовать эти функции в моем плагине, но я читал, что не рекомендуется напрямую включать такие файлы, поэтому я хочу узнать, как сделать это без конфликтов.
Я также пробовал создать функцию, как эта

add_action('plugins_loaded', 'show');
function show() {
$user = get_user_by('ID', 1);
return $user;
}

Но это не работает.

Нет, вам не следует явно подключать pluggable.php в своем плагине. Их основная идея заключается в том, что они могут быть переопределены плагинами, и если вы загрузите их до плагина, который хочет переопределить одну из функций, это не удастся. Последовательность загрузки следующая (см. wp-settings.php):

  • загрузка активных плагинов
  • require pluggable.php
  • do_action('plugins_loaded');

поэтому функции pluggable доступны начиная с действия plugins_loaded. Это покроет почти все хуки WordPress, которые вы, вероятно, захотите использовать:

  • Если вы хотите, чтобы ваш плагин что-то делал во время загрузки, используя функцию pluggable, то поместите логику в обработчик plugins_loaded
  • иначе поместите логику в соответствующий обработчик действия или фильтр

и все будет работать хорошо.


И, кстати, ваш пример у меня работает хорошо. Я поместил этот скрипт в мою папку mu-plugins (которая загружается до плагинов) и

  • Я не получаю ошибок от вызова get_user_by
  • Ваша версия не делает ничего заметного, поэтому я добавил вызов error_log()
    error_log( print_r( $user, true ) );
    

    и я вижу, что мой пользователь 1 корректно записывается в журнал ошибок сервера.

Ответ или решение

Создание плагинов для WordPress — это сложный, но увлекательный процесс, требующий глубокого понимания архитектуры WordPress, в частности, как работают pluggable функции. Эти функции, такие как get_user_by() и wp_check_password(), предоставляют важные возможности для работы с данными пользователей и управления безопасностью паролей. Однако, из-за их природы, они могут вызывать недоразумения, особенно для начинающих разработчиков. Рассмотрим, как корректно использовать эти функции в своих плагинах, избегая распространенных ошибок и коллизий.

Теория

Pluggable функции в файле pluggable.php позволяют разработчикам переопределять некоторые основные функции WordPress. Это делается для повышения гибкости и расширяемости платформы. Эти функции загружаются после загрузки всех активных плагинов, что позволяет плагинам изменять их поведение или заменять на свои собственные реализации. Использовать include или require для загрузки pluggable.php вручную крайне не рекомендуется, поскольку это нарушает ожидаемую последовательность загрузки и может привести к конфликтам и неработоспособности других плагинов.

Пример

Рассмотрим ситуации, когда возникает ошибка "undefined function". Это случается, если вы пытаетесь использовать pluggable функцию до того, как она будет доступна в контексте вашей логики — например, до выполнения необходимого действия или фильтра. Ваш пример с функцией show() показывает стремление использовать get_user_by() сразу при инициализации плагина, что может быть проблематично, если это делается до того, как pluggable функции станут доступны.

Однако, если ваш код действительно вызывает do_action('plugins_loaded'), функция show() должна работать корректно, как только все плагины загружены. Добавление error_log() внутри функции show() может помочь убедиться, что она действительно вызывается, и предоставить дополнительную отладочную информацию.

add_action('plugins_loaded', 'show');
function show() {
    $user = get_user_by('ID', 1);
    error_log(print_r($user, true));  // Для проверки правильности выполнения
    return $user;
}

Применение

  1. Понимание последовательности загрузки: Знайте, что pluggable функции становятся доступны после загрузки всех плагинов. Это значит, что основная логика вашего плагина, зависящая от этих функций, должна выполняться в рамках нужных хуков, либо позже.

  2. Используйте правильные хуки: Если ваша функция логики функционирует до того, как pluggable функции загружены, вы должны либо изменить хук, в котором вызываете эту логику, либо убедиться, что она выполняется после plugins_loaded.

  3. Отладка и логгирование: Убедитесь, что ваши функции отрабатывают так, как предполагается. Используйте error_log() для записи видимых данных в журнал, чтобы убедиться, что ваши функции вызываются и выполняются корректно.

  4. Избегайте переопределения функций напрямую: Никогда не переопределяйте pluggable функции путем изменения самого файла pluggable.php. Вместо этого, если необходимо, создайте свой собственный функционал, который будет вызываться через нужные фильтры или хуки.

Общие советы

  • Отслеживайте обновления WordPress: Убедитесь, что знаете, как обновление WordPress может повлиять на pluggable функции и вызывает ли оно необходимость обновления вашего плагина.

  • Документация и сообщество: Регулярно читайте официальную документацию WordPress и коммуницируйте с сообществом разработчиков. Это поможет вам оставаться в курсе лучших практик и получать помощь при возникновении проблем.

  • Тестируйте плагин в разных условиях: Используйте окружение для тестирования, чтобы проверить функциональность вашего плагина в разнообразных сценариях, чтобы предупредить потенциальные проблемы до их появления на живых сайтах пользователей.

Итак, следуя этим подходам и рекомендациям, вы сможете эффективно и безопасно использовать pluggable функции в собственных плагинах WordPress, избегая распространенных ошибок и повышая совместимость вашего кода с другими плагинами.

Оцените материал
Добавить комментарий

Капча загружается...