Я пытаюсь изменить метод плагинов Wordpress без изменения самого кода ядра плагина. Мне нужно установить какой-нибудь флаг статуса в другой части сайта. Метод определяется в классе плагина следующим образом:
add_action('plugins_action_name', [$this, 'local_method_name']);
Метод плагина не предлагает никаких действий или фильтров для подключения.
Если это был не Wordpress, а обычный PHP Iнаписал бы свой собственный класс, который расширяет исходный класс плагинов, но имеет свой собственный метод с тем же именем - но в Wordpress это никуда не ведет, так как я просто перемещаю проблему из одного файла плагина в другой.
Есть ли способ вообще удалить действие плагинов? А потом пересмотреть мою собственную версию? Так как add_action был вызван с $this
- как бы я удалил его в некоторых файлах functions.php?
Спасибо
ОБНОВЛЕНИЕ
Действительно, я хочу узнать, какобрабатывать разные сценарии. Не ожидая, что один размер подойдет для всех решений, но мне нужно знать, как избежать изменений ядра, поскольку каждое изменение ядра усложняет мой процесс развертывания / обновления в геометрической прогрессии.
Конечно, я добавлю еще некоторые детали. Мой примерный плагин - WooCommerce Germanized Pro, который поставляется с методом WC_GZDP_Download_Handler :: download (), который мне нужно было изменить, чтобы установить своего рода флаг «Склад загрузил счет-фактуру» для каждого заказа. Позже он используется для выделения новых заказов, фильтрации заказов, которые были переданы на выполнение и т. Д. Похоже, что существует класс Invoice Helper, который на самом деле имеет шаблон синглтона.
Моя модификация в классе загрузки:тривиально:
public static function download( $pdf, $force = false ) {
... /* original code above, now my modifications */
if ($check_some_codition) {
$invoice = $pdf->get_invoice();
update_post_meta($invoice->get_id(), 'some-flag', 'some-value');
}
/* then resume original function (return the file to the browser) */
self::out( $filename, $file, $force );
}