php — если ( ! function_exists

спросил

Изменено 4 года, 6 месяцев назад

Просмотрено 1к раз

Я добавил if ( ! function_exists ( 'event_meta_box' ) ) { в мою дочернюю тему functions.php вместе с существующей функцией и моими изменениями.

При загрузке сайта получаю следующую ошибку Неустранимая ошибка: невозможно повторно объявить event_meta_box() (ранее объявленный в /home/user/public_html/folder/wp-content/themes/theme-child/functions.php:10) в /home/user/public_html/folder/wp-content /themes/theme/include/functions-new.php на линии 3920

Как это исправить?

3

Дочерняя тема functions.php фактически загружается сначала

(это преднамеренное и желаемое поведение. ) Таким образом, несмотря на function_exists проверьте в своей дочерней теме, это ничего не даст, так как кажется, что родительская тема не имеет эту оболочку и загружается второй, поэтому возникает фатальная ошибка.

Не существует простого способа переопределить функцию родительской темы (если она не сделала все свои функции подключаемыми по умолчанию — мои делают, но немногие!) Иногда функция родительской темы привязана к действию, и вы можете удалить функцию из хука (используя remove_action ), а затем добавьте свою собственную пользовательскую функцию (используя add_action ). В других случаях (еще реже) в существующем коде темы есть фильтр.

Другое, что вам придется проявить больше творчества, скопировав соответствующие шаблоны родительской темы в вашу дочернюю тему и изменив их/их, чтобы изменить вызываемую функцию на вашу пользовательскую или запускаемый хук — как дочернюю тему шаблонов используется вместо шаблонов родительской темы. Но помните, загружаются и дочерний, и родительский functions.php .

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя адрес электронной почты и пароль

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания, политикой конфиденциальности и политикой использования файлов cookie

. Разработка плагина

— Когда проверять, существует ли функция

спросил

Изменено 11 лет, 8 месяцев назад

Просмотрено 1к раз

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

 if(!function_exists('my_function')) {
    функция моя_функция () {
        // крутая функция
    }
}
 

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

Спасибо

  • разработка плагинов
  • функции
  • настройка

2

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

Там вы хотите потерпеть неудачу раньше, а не подкрадываться позже. Или предотвратить конфликт с помощью лучшего префикса, конечно 🙂

Единственная причина сделать это — создать подключаемую функцию , отдельную часть функциональности, которую можно реализовать другим способом с помощью дополнительного плагина. Вы можете увидеть это в основном коде WordPress: такие функции, как wp_mail(), являются подключаемыми, поэтому вы можете использовать полностью настраиваемую систему рассылки.

Вы также видите это в темах, которые, вероятно, получат дочерние темы. Темы по умолчанию, Twemty Eleven и Twenty Ten до нее, являются хорошими примерами этого. Дочерние темы могут определять функции с тем же именем, и они будут использоваться вместо них.

Лично мне не очень нравится такой подход с предоставлением хуков для другого кода. Они усложняют определение того, какой код будет вызываться (завершение кода моей IDE путается). Я стараюсь предоставлять все точки расширения через «классические» действия и фильтры.