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

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

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

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

Лучшим способом будет просто клонировать его, изменить название плагина в заголовке и изменить имя директории. Таким образом, у вас также может быть оригинальная версия установленной, но не активированной, и вы по-прежнему будете получать уведомления о выходе обновлений.
<?php
/*
Plugin Name: Название плагина
Plugin URI: http://URI_страницы_с_описанием_плагина_и_обновлений
Description: Краткое описание плагина.
Version: Версия плагина, например: 1.0
Author: Имя автора плагина
Author URI: http://URI_автора_плагина
License: "Слаг" названия лицензии, например GPL2
*/
?>

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

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

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

Я согласен с ответом Анники Бэкстром, но хотел бы поделиться своим предпочтительным решением.
Так как большинство плагинов находятся под SVN, я использую инструмент git-svn для создания git-зеркала.
Затем я просто создаю ветку и фиксирую там свои изменения.
Когда плагин обновляется в основном репозитории, я просто забираю изменения из SVN-репозитория и мержу их в свою пользовательскую ветку.

Если это еще не было упомянуто, вы можете заменить любую функцию, которая была сделана заменяемой (pluggable). Заменяемые функции выглядят следующим образом:
if (! function_exists('function_name')) {
function function_name() {
//...
}
}
Затем вы можете просто переопределить функцию самостоятельно (в файле functions.php, используя плагин Code Snippets или в своем собственном плагине).
К сожалению, большинство плагинов не делают свои функции заменяемыми; в лучшем случае, только некоторые из их функций являются заменяемыми.

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