Eu quero modificar uma função em um plugin. É declarado no arquivo principal do plug-in assim:
class WCPGSK_Main {
...
public function wcpgsk_email_after_order_table($order) {
...
}
}
Adicione chamadas de lá assim:
add_action( 'woocommerce_email_after_order_table', array($this, 'wcpgsk_email_after_order_table') );
Eu acho que seria possível substituí-lo se tivesse acesso à classe em functions.php. Então eu seria capaz de escrever algo como isto:
$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') );
Meu pensamento para obter um acesso à classe no arquivo functions.php era incluir o arquivo em que a classe é declarada no functions.php:
require_once('/wp-content/plugins/woocommerce-poor-guys-swiss-knife/woocommerce-poor-guys-swiss-knife.php');
$wcpgsk = new WCPGSK_Main;
...
Mas isso não funciona porque o arquivo do plug-in é incluído quando o plug-in está sendo inicializado no WordPress, eu acho.
Existe uma maneira de reescrever a função sem tocar nos arquivos do plug-in?
Se o seu plug-in estiver registrado assim:
Em seguida, você poderá remover o filtro acessando o global:
Caso contrário, você precisará rastrear a
$wp_filter
global
chave de registro:Isso consome muitos recursos e realmente não deve ser feito, a menos que você não tenha outra escolha.
fonte
Esse plug-in torna sua função init
wcpgsk_init()
conectável, portanto, outra maneira de substituí-lo é defini-lo primeiro em um plug-in obrigatório (como é tarde demais nas "functions.php" do seu tema). Então você pode colocar sua substituição em "wp-content / mu-plugins / functions.php":Mas uma maneira ainda melhor de substituí-lo é instalar
runkit
( https://github.com/padraic/runkit ) e substituí-lo diretamente nas funções do seu tema: "functions.php":(Isso é uma piada, aliás.)
fonte