Saya ingin memodifikasi fungsi dalam sebuah plugin. Ini dinyatakan dalam file utama plugin seperti ini:
class WCPGSK_Main {
...
public function wcpgsk_email_after_order_table($order) {
...
}
}
Tambahkan dipanggil dari sana seperti ini:
add_action( 'woocommerce_email_after_order_table', array($this, 'wcpgsk_email_after_order_table') );
Saya kira akan mungkin untuk menggantinya jika memiliki akses ke kelas di functions.php. Maka saya akan dapat menulis sesuatu seperti ini:
$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') );
Pemikiran saya untuk mendapatkan akses ke kelas dalam file functions.php adalah untuk memasukkan file di mana kelas dideklarasikan dalam functions.php:
require_once('/wp-content/plugins/woocommerce-poor-guys-swiss-knife/woocommerce-poor-guys-swiss-knife.php');
$wcpgsk = new WCPGSK_Main;
...
Tapi ini tidak berfungsi karena file plugin dimasukkan ketika plugin diinisialisasi di WordPress, saya kira.
Apakah ada cara untuk menulis ulang fungsi tanpa menyentuh file plugin?
Jika plugin Anda terdaftar seperti ini:
Maka Anda harus dapat menghapus filter dengan mengakses global:
Jika tidak, Anda harus merangkak
$wp_filter
global
untuk kunci pendaftaran:Ini adalah sumber daya yang intensif dan harus benar-benar tidak dilakukan kecuali Anda tidak punya pilihan lain.
sumber
Plugin itu membuat fungsi
wcpgsk_init()
initnya dapat digunakan, jadi cara lain untuk menimpanya adalah dengan mendefinisikannya terlebih dahulu di plugin yang harus digunakan (karena sudah terlambat di "fungsi.php" tema Anda). Jadi Anda bisa meletakkan override Anda di "wp-content / mu-plugins / functions.php":Tetapi cara yang lebih baik untuk menimpanya adalah dengan menginstal
runkit
( https://github.com/padraic/runkit ) dan kemudian langsung menggantinya di "functions.php" tema Anda:(Itu lelucon, btw.)
sumber