Ich möchte eine Funktion in einem Plugin ändern. Es wird in der Hauptdatei des Plugins wie folgt deklariert:
class WCPGSK_Main {
...
public function wcpgsk_email_after_order_table($order) {
...
}
}
Add von dort wie folgt aufgerufen:
add_action( 'woocommerce_email_after_order_table', array($this, 'wcpgsk_email_after_order_table') );
Ich denke, es wäre möglich, es zu ersetzen, wenn man Zugriff auf die Klasse in functions.php hätte. Dann könnte ich so etwas schreiben:
$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') );
Mein Gedanke, einen Zugriff auf die Klasse in der Datei functions.php zu erhalten, war, die Datei einzuschließen, in der die Klasse in functions.php deklariert ist:
require_once('/wp-content/plugins/woocommerce-poor-guys-swiss-knife/woocommerce-poor-guys-swiss-knife.php');
$wcpgsk = new WCPGSK_Main;
...
Dies funktioniert jedoch nicht, da die Datei des Plugins enthalten ist, wenn das Plugin in WordPress initialisiert wird.
Gibt es eine Möglichkeit, die Funktion neu zu schreiben, ohne die Dateien des Plugins zu berühren?
Wenn Ihr Plugin wie folgt registriert ist:
Dann sollten Sie in der Lage sein, den Filter zu entfernen, indem Sie auf die globale Datei zugreifen:
Andernfalls müssen Sie
$wp_filter
global
den Registrierungsschlüssel crawlen:Dies ist ressourcenintensiv und sollte nur durchgeführt werden, wenn Sie keine andere Wahl haben.
quelle
Dieses Plugin macht seine Init-Funktion
wcpgsk_init()
steckbar. Eine andere Möglichkeit, es zu überschreiben, besteht darin, es zuerst in einem Plugin zu definieren, das unbedingt verwendet werden muss (da es in der "functions.php" Ihres Themas zu spät ist). Sie können Ihren Override also in "wp-content / mu-plugins / functions.php" einfügen:Eine noch bessere Möglichkeit, es zu überschreiben, besteht darin, es zu installieren
runkit
( https://github.com/padraic/runkit ) und es dann direkt in der "functions.php" Ihres Themas zu ersetzen:(Das ist übrigens ein Witz.)
quelle