Какой самый простой способ переопределить хук плагинов Wordpress, созданный с помощью $ this? - PullRequest
0 голосов
/ 30 сентября 2019

Я пытаюсь изменить метод плагинов 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 );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...