Правильный способ модификации плагина

14 июл. 2011 г., 15:31:07
Просмотры: 46.7K
Голосов: 23

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

1
Комментарии

Проверьте вариант "Расширение без модификации". Я считаю, что это практически лучшее решение. Подробности по ссылке - Правильный способ кастомизации плагина WordPress

Eugine Joseph Eugine Joseph
17 сент. 2015 г. 09:34:38
Все ответы на вопрос 6
1
11

«Правильный» способ, очевидно, зависит от плагина. Некоторые плагины легче редактировать, чем другие, но большинство плагинов можно фактически модифицировать с помощью других плагинов.

Например, если плагин имеет функцию, подключенную к WordPress через действие (action), то для вас не составит труда создать другой плагин, который отключит эту функцию с помощью remove_action, а затем добавит вашу заменяющую функцию. Такой метод позволит вам заменить отдельные функции в плагинах своими модифицированными версиями, не изменяя исходный плагин.

Тот же принцип, очевидно, работает и с фильтрами (filters).

19 июл. 2011 г. 10:33:35
Комментарии

"Так же хорош" как принятый ответ. Вместе они составляют победившую комбинацию

mayersdesign mayersdesign
28 апр. 2022 г. 23:07:21
2

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

Создание "дочернего плагина" — не такая простая задача. Концепция "дочерней темы" в основном относится к файлам шаблонов, которые используются, а не к функциям темы (и на самом деле, файлы functions.php из родительской и дочерней темы загружаются оба, что действительно вызывает проблемы при некорректном кодировании functions.php в любой из тем).

14 июл. 2011 г. 15:40:28
Комментарии

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

Mike Wheaton Mike Wheaton
14 июл. 2011 г. 15:57:10

Но форк — это, по сути, то, что вы уже делаете. По сути, у вас есть два варианта: форк или патч. @Chris_O предлагает хороший способ получать автоматические обновления из основного репозитория, сохраняя при этом ваш форкнутый плагин.

Chip Bennett Chip Bennett
14 июл. 2011 г. 16:08:23
2

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

<?php
/*
Plugin Name: Название плагина
Plugin URI: http://URI_страницы_с_описанием_плагина_и_обновлений
Description: Краткое описание плагина.
Version: Версия плагина, например: 1.0
Author: Имя автора плагина
Author URI: http://URI_автора_плагина
License: "Слаг" названия лицензии, например GPL2
*/
?>
14 июл. 2011 г. 15:36:48
Комментарии

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

Полагаю, я мог бы скачать плагин и использовать SVN для слияния изменений с моей кастомной версией.

Mike Wheaton Mike Wheaton
14 июл. 2011 г. 15:42:19

На странице плагина есть прямая ссылка на diff-файл в логе разработки. Например, вот diff, сгенерированный для W3 Total Cache

Chris_O Chris_O
14 июл. 2011 г. 15:49:13
0

Это относительно просто, если плагин находится под управлением системы контроля версий Git, благодаря её распределённой природе. Однако многие плагины WordPress (и все из официального репозитория) используют Subversion. Я использую vendor branches и svn_load_dirs.php, если мне действительно необходимо изменить плагин, но для этого требуется достаточно высокий уровень комфорта с Subversion.

Если плагин не предоставляет репозитория, я рекомендую преобразовать его в репозиторий Git самостоятельно и вручную применять новые версии.

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

17 июл. 2011 г. 15:23:02
0

Я согласен с ответом Анники Бэкстром, но хотел бы поделиться своим предпочтительным решением.

Так как большинство плагинов находятся под SVN, я использую инструмент git-svn для создания git-зеркала.

Затем я просто создаю ветку и фиксирую там свои изменения.

Когда плагин обновляется в основном репозитории, я просто забираю изменения из SVN-репозитория и мержу их в свою пользовательскую ветку.

19 июл. 2011 г. 18:43:50
2

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

if (! function_exists('function_name')) {
    function function_name() {
         //...
    }
}

Затем вы можете просто переопределить функцию самостоятельно (в файле functions.php, используя плагин Code Snippets или в своем собственном плагине).

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

28 апр. 2022 г. 18:19:51
Комментарии

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

johny why johny why
30 июл. 2024 г. 23:27:37

@johnywhy Да, верно. Конечно, при условии, что в обновлении не решат убрать возможность переопределения этой функции.

CubicInfinity CubicInfinity
1 авг. 2024 г. 18:08:21