Je souhaite modifier une fonction dans un plugin. Il est déclaré dans le fichier principal du plugin comme ceci:
class WCPGSK_Main {
...
public function wcpgsk_email_after_order_table($order) {
...
}
}
Ajoutez appelé à partir de là comme ceci:
add_action( 'woocommerce_email_after_order_table', array($this, 'wcpgsk_email_after_order_table') );
Je suppose qu'il serait possible de le remplacer s'il avait un accès à la classe dans functions.php. Ensuite, je serais en mesure d'écrire quelque chose comme ça:
$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') );
Ma pensée pour obtenir un accès à la classe dans le fichier functions.php était d'inclure le fichier où la classe est déclarée dans functions.php:
require_once('/wp-content/plugins/woocommerce-poor-guys-swiss-knife/woocommerce-poor-guys-swiss-knife.php');
$wcpgsk = new WCPGSK_Main;
...
Mais cela ne fonctionne pas parce que le fichier du plugin est inclus lorsque le plugin est initialisé dans WordPress, je suppose.
Existe-t-il un moyen de réécrire la fonction sans toucher aux fichiers du plugin?
Si votre plugin est enregistré comme ceci:
Ensuite, vous devriez pouvoir supprimer le filtre en accédant au global:
Sinon, vous devrez explorer la
$wp_filter
global
clé d'enregistrement:Cela demande beaucoup de ressources et ne devrait vraiment pas être fait à moins que vous n'ayez pas d'autre choix.
la source
Ce plugin rend sa fonction init
wcpgsk_init()
enfichable, donc une autre façon de le remplacer est de le définir d'abord dans un plugin indispensable (car il est trop tard dans le "functions.php" de votre thème). Vous pouvez donc mettre votre priorité dans "wp-content / mu-plugins / functions.php":Mais un meilleur moyen de le remplacer est d'installer
runkit
( https://github.com/padraic/runkit ) et de le remplacer directement dans le "functions.php" de votre thème:(C'est une blague, au fait.)
la source