Правильный способ изменить плагин

15

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

Майк Уитон
источник
1
Установите флажок «Расширить без изменений» . Я считаю, что это практически лучшее решение. Проверьте эту ссылку для подробностей - Правильный способ настроить плагин WordPress
Юджин Джозеф

Ответы:

7

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

Создать «Плагин для ребенка» действительно непросто. Понятие «Child Theme» действительно относится к файлам шаблонов , которые привыкают, в большей степени , чем функции Theme (и в самом деле, functions.phpфайл от обоих родителей и ребенка загружаются, что делает причиной проблем неправильно закодированных functions.phpфайлов либо ребенок или родитель Theme).

Чип Беннетт
источник
Типы изменений, которые я делаю, зависят от конкретного сайта, и поэтому я не думаю, что разветвление или отправка исправлений будет уместным. Я определенно буду помнить об этом для более общих улучшений плагинов.
Майк Уитон
Но разветвление - это в основном то, что вы уже делаете . В основном, это ваши варианты: форк или патч. @Chris_O дает хороший способ получать автоматические обновления из апстрима, поддерживая свой раздвоенный плагин.
Чип Беннетт
7

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

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

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

эфирное масло
источник
4

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

<?php
/*
Plugin Name: Name Of The Plugin
Plugin URI: http://URI_Of_Page_Describing_Plugin_and_Updates
Description: A brief description of the Plugin.
Version: The Plugin's Version Number, e.g.: 1.0
Author: Name Of The Plugin Author
Author URI: http://URI_Of_The_Plugin_Author
License: A "Slug" license name e.g. GPL2
*/
?>
Chris_O
источник
Это все еще требует прохождения новых версий плагина, чтобы найти изменения (я полагаю, инструмент сравнения версий поможет) и затем скопировать эти изменения в мой пользовательский плагин. Я полагаю, я мог бы скачать плагин и использовать SVN, чтобы объединить изменения с моей пользовательской версией.
Майк Уитон
2
Существует прямая ссылка на файл diff на ссылку журнала разработки на странице плагинов. Например, здесь diff генерируется из W3 Total Cache
Chris_O
3

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

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

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

Анника Бэкстрем
источник
3

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

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

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

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

scribu
источник