Я хочу изменить функцию в плагине. Он объявлен в основном файле плагина следующим образом:
class WCPGSK_Main {
...
public function wcpgsk_email_after_order_table($order) {
...
}
}
Добавьте вызванный оттуда как это:
add_action( 'woocommerce_email_after_order_table', array($this, 'wcpgsk_email_after_order_table') );
Я думаю, что было бы возможно заменить его, если бы имел доступ к классу в functions.php. Тогда я мог бы написать что-то вроде этого:
$wcpgsk = new WCPGSK_Main;
remove_action( 'woocommerce_email_after_order_table', array($wcpgsk, 'wcpgsk_email_after_order_table') );
function customized_wcpgsk_email_after_order_table($order) {
...
}
add_action( 'woocommerce_email_after_order_table', array($wcpgsk, 'customized_wcpgsk_email_after_order_table') );
Моя мысль получить доступ к классу в файле functions.php состояла в том, чтобы включить файл, в котором класс объявлен в functions.php:
require_once('/wp-content/plugins/woocommerce-poor-guys-swiss-knife/woocommerce-poor-guys-swiss-knife.php');
$wcpgsk = new WCPGSK_Main;
...
Но это не работает, потому что файл плагина включается, когда плагин инициализируется в WordPress, я думаю.
Есть ли способ переписать функцию, не трогая файлы плагина?
Если ваш плагин зарегистрирован так:
Тогда вы сможете удалить фильтр, получив доступ к глобальному:
В противном случае вам нужно будет сканировать
$wp_filter
global
регистрационный ключ:Это ресурсоемкий процесс, и его не следует делать, если у вас нет другого выбора.
источник
Этот плагин делает свою функцию инициализации
wcpgsk_init()
подключаемой, поэтому другой способ переопределить его - сначала определить его в плагине, который необходимо использовать (так как это слишком поздно в "functions.php" вашей темы). Таким образом, вы можете поместить свое переопределение в «wp-content / mu-plugins / functions.php»:Но еще лучший способ переопределить это - установить
runkit
( https://github.com/padraic/runkit ), а затем просто заменить его прямо в "functions.php" вашей темы:(Это шутка, кстати.)
источник