remove_action trên after_setup_theme không hoạt động từ chủ đề con


17

Tôi đang cố gắng loại bỏ một hành động chủ đề cho một chủ đề thanh lịch bằng cách sử dụng một chủ đề con .. Điều này hoạt động khi tôi xóa hành động sau mã add_action ở bất cứ đâu trong hàm chủ đề cha.php. Tuy nhiên, nó không hoạt động khi tôi thêm nó từ các hàm theme theme.php.

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

Hành động xóa có cùng mức độ ưu tiên 10 như hành động thêm. Nó có nên hoạt động không?

add_action( 'after_setup_theme', 'et_pb_setup_theme' ); //parent theme add_action

Câu trả lời:


25

Như @cybmeta đã chỉ ra, bạn còn quá sớm với việc loại bỏ. Vì vậy, bạn phải trì hoãn việc loại bỏ thực tế, ví dụ như vậy:

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' );
}

Đã làm việc! Tôi đã cố gắng một cái gì đó tương tự, nhưng xấu của tôi! Vì tôi đặt một điều kiện bằng cách sử dụng has_action để kiểm tra một hành động vẫn không tồn tại trong các hàm con.php , trước khi remove_action nó không hoạt động !! Cảm ơn rất nhiều! 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);
Cảnh sát trưởng hút thuốc

3

Tệp tin.php của các chủ đề con được tải ngay trước chủ đề cha mẹ là tệp.php, vì vậy khi bạn chạy remove_actiontrong chủ đề con, hành động bạn đang cố gắng loại bỏ không tồn tại, nó sẽ được thêm vào sau.


1
..nhưng không ưu tiên 10 và hook after_setup_theme có nên xử lý vấn đề đó không? Làm thế nào tôi nên làm điều này anyway?
Cảnh sát trưởng hút thuốc

Không, đối số ưu tiên không dành cho điều đó. Đơn giản là bạn không thể loại bỏ thứ gì đó không tồn tại. Nói cách khác, (lấy từ codex ), bạn không thể xóa thành công hành động trước khi nó được thêm vào.
cybmeta

1
Vì vậy, làm thế nào có thể loại bỏ một hành động được thiết lập bởi chủ đề gốc?
Aerendir

1

Hãy thử (chỉ thay đổi tên):

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);
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.