WordPress - переопределение функции в плагине - PullRequest
12 голосов
/ 21 сентября 2011

В течение некоторого времени я задавался вопросом, как лучше всего модифицировать плагин, созданный пользователем WordPress?

Например, есть пара строк кода, которые я хочу изменить в плагине Contact Form 7 . Функция называется function wpcf7_ajax_json_echo () и находится в:

wp-content > plugins > contact-form-7 > includes > controller.php

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

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

Кто-нибудь знает самый чистый способ для меня изменить несколько строк в этой функции через мой файл functions.php?

Спасибо!

Ответы [ 3 ]

7 голосов
/ 21 сентября 2011

Я не рекомендую менять ядро ​​. Тем не менее, вы немного рассол.

Вы можете:

  • Обновить код функции прямо в плагине
  • Скопируйте текущий код функции из плагина и переопределите его в functions.php

В конце концов, вы все еще сталкиваетесь с той же проблемой - будущая совместимость .

Или:

  • Обновление перезапишет изменения вашего плагина.
  • Ваша функция перезаписывает изменения плагина.

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

6 голосов
/ 21 сентября 2011

Вы можете использовать SVN, если хотите поддерживать прямую совместимость (и на вашем хосте есть SVN), при этом вы можете сохранять свои собственные изменения.

Каждый плагин, который находится в каталоге плагинов, должен иметь SVNрепо (так каталог узнает, есть ли обновления). Вот репозиторий CF7.

Извлеките транк из вашего каталога / plugins / в папке, такой как / custom-contact-form-7 / .Измените файл wp-contact-form-7.php , чтобы дать ему уникальное имя, и внесите необходимые изменения, чтобы настроить его.

Чтобы получать новые обновления, вы можете простоsvn up чтобы получить их, и они сольются с вашими изменениями.Хотя иногда вам может понадобиться устранить конфликты слияний.

Контроль версий с Subversion - это место, где все начинают изучать SVN, если вам это нужно.Есть также Github репо сейчас, если вы хотите это раскошелиться.

0 голосов
/ 04 марта 2013

Я определенно думаю, что вы должны добавить свои обновления в functions.php или в пользовательский плагин. Сейчас это хлопотно, но НАМНОГО меньше хлопот при каждом обновлении плагина.

Вы всегда должны ссылаться на изменения, внесенные в обновления, несмотря ни на что. Даже если вы сможете расширить функциональность, не копируя этот файл, вам придется хотя бы проверить и убедиться, что ваши изменения по-прежнему работают. И сравнение WinDiff / BBEdit сделает это быстро.

Итак, мое первое предложение - переопределить эту функцию.

Второе предложение: Я заметил, что есть некоторые расширения ( a , b , c ) для этого плагина; возможно, вы сможете узнать, как они сделали свои расширения и использовать эти детали, чтобы сделать свои собственные. Ну, это все равно что предложить вам построить новый дом, чтобы починить капающий кран, но это идея.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...