remove_action pada after_setup_theme tidak berfungsi dari tema anak

17

Saya mencoba untuk menghapus tindakan tema untuk tema elegan-tema menggunakan tema anak .. Ini berfungsi ketika saya menghapus tindakan setelah kode add_action di mana saja di dalam parent theme functions.php. Namun, itu tidak berfungsi ketika saya menambahkannya dari child theme functions.php.

remove_action ('after_setup_theme', 'et_pb_setup_theme' , 10);

Hapus tindakan memiliki prioritas yang sama dengan tindakan tambah. Bukankah seharusnya itu bekerja?

add_action( 'after_setup_theme', 'et_pb_setup_theme' ); //parent theme add_action
Sheriff merokok
sumber

Jawaban:

25

Seperti yang sudah ditunjukkan oleh @cybmeta, Anda terlalu dini dengan penghapusan Anda. Jadi, Anda harus menunda penghapusan yang sebenarnya, misalnya seperti:

add_action( 'after_setup_theme', 'wpdev_170663_remove_parent_theme_stuff', 0 );

function wpdev_170663_remove_parent_theme_stuff() {

    remove_action( 'after_setup_theme', 'et_pb_setup_theme' );
}
para pria
sumber
Bekerja! Saya telah mencoba sesuatu yang serupa, tetapi yang buruk! Karena saya meletakkan kondisi menggunakan has_action untuk memeriksa tindakan yang masih tidak ada di child functions.php, sebelum remove_action itu tidak berfungsi !! Terima kasih banyak! function etn(){ if(has_action('after_setup_theme', 'et_pb_setup_theme')){ remove_action ('after_setup_theme', 'et_pb_setup_theme' ); } } add_action ('after_setup_theme', 'etn', 9);
Smoking Sheriff
3

File functions.php dari tema anak dimuat tepat sebelum theme.fp tema induk, jadi ketika Anda menjalankan remove_actiondi tema anak, tindakan yang Anda coba untuk menghapus tidak ada karena itu ditambahkan kemudian.

cybmeta
sumber
1
..tapi bukankah prioritas 10 dan hook after_setup_theme harus mengurusnya? Bagaimana saya harus melakukan ini?
Smoking Sheriff
Tidak, argumen prioritas bukan untuk itu. Cukup Anda tidak dapat menghapus sesuatu yang tidak ada. Dengan kata lain, (diambil dari kodeks ) Anda tidak dapat berhasil menghapus tindakan sebelum telah ditambahkan.
cybmeta
1
Jadi, bagaimana mungkin untuk menghapus tindakan yang ditetapkan oleh tema induk?
Aerendir
1

Coba (cukup ganti nama):

add_action( 'init' , 'myyy_remove' , 15 );
function myyy_remove() {
        remove_action('ACTION_NAME', 'my_function_name_Something'   ,11);
        remove_action('ACTION_NAME', 'my_function_name_Another'     ,11);
}
T.Todua
sumber