Chcę zmodyfikować funkcję we wtyczce. Jest zadeklarowany w głównym pliku wtyczki w następujący sposób:
class WCPGSK_Main {
...
public function wcpgsk_email_after_order_table($order) {
...
}
}
Dodaj tak stamtąd:
add_action( 'woocommerce_email_after_order_table', array($this, 'wcpgsk_email_after_order_table') );
Myślę, że byłoby możliwe zastąpienie go, gdyby miał dostęp do klasy w functions.php. Wtedy mógłbym napisać coś takiego:
$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') );
Moim pomysłem na uzyskanie dostępu do klasy w pliku functions.php było dołączenie pliku, w którym klasa jest zadeklarowana w functions.php:
require_once('/wp-content/plugins/woocommerce-poor-guys-swiss-knife/woocommerce-poor-guys-swiss-knife.php');
$wcpgsk = new WCPGSK_Main;
...
Ale to nie działa, ponieważ plik wtyczki jest dołączany, gdy wtyczka jest inicjowana w WordPress, tak myślę.
Czy istnieje sposób na przepisanie funkcji bez dotykania plików wtyczki?
Jeśli Twoja wtyczka jest zarejestrowana w ten sposób:
Następnie powinieneś być w stanie usunąć filtr, uzyskując dostęp do globalnego:
W przeciwnym razie musisz zaindeksować
$wp_filter
global
klucz rejestracyjny:To wymaga dużych zasobów i naprawdę nie powinno się tego robić, chyba że nie masz innego wyjścia.
źródło
Ta wtyczka sprawia, że jej funkcja init jest
wcpgsk_init()
podłączalna, więc innym sposobem na przesłonięcie jej jest zdefiniowanie jej najpierw w obowiązkowej wtyczce (ponieważ jest za późno w „functions.php” motywu). Więc możesz umieścić swoje zastąpienie w „wp-content / mu-plugins / functions.php”:Ale jeszcze lepszym sposobem na zastąpienie go jest zainstalowanie
runkit
( https://github.com/padraic/runkit ), a następnie po prostu zastąpienie go bezpośrednio w „functions.php” motywu:(To żart, btw.)
źródło