Như chia sẻ ở bài viết trước, bạn có thể loại bỏ action hoăc filter có sẵn bằng hàm remove_action() hoặc remove_filter(). Ví dụ như dưới đây
Một plugin nào đó gán action và filter như sau:
add_action('save_post', 'my_action_callback');
add_filter('the_content', 'my_filter_callback');
Code language: PHP (php)
Vì lý do nào đó, bạn muốn loại bỏ action và filter trên. Bạn có thể sử dụng đoạn mã này:
remove_action('save_post', 'my_action_callback');
remove_filter('the_content', 'my_filter_callback');
Code language: PHP (php)
Quá dễ dàng!
Nhưng vấn đề sẽ không đơn giản như thế nếu action / filter được gán bên trong class riêng biệt của plugin. Chẳng hạn như đoạn code sau:
class Thuan_Bui_Class {
function __construct() {
add_action( 'save_post', array( $this, 'my_action_callback' ));
}
function my_action_callback(){
//do something
}
}
$some_plugin_class = new Thuan_Bui_Class();
Code language: PHP (php)
Bạn không thể loại bỏ action my_action_callback 1 cách đơn giản như trên được nữa. Dưới đây là giải pháp.
Mục Lục
Cách dùng remove_action() nếu action hook được gán trong lớp (class)
Do action được gán trong class, bạn cần phải sử dụng đối tượng (class object) để truy xuất hook bên trong nó. Cách sử dụng như sau:
global $some_plugin_class; //lấy quyền truy xuất class object
remove_action('save_post', array($some_plugin_class, 'my_action_callback')); //loại bỏ action hook
Code language: PHP (php)
Cách dùng remove_action() nếu chưa có đối tượng
Vì lý do nào đó mà chưa có đối tượng nào được khai báo, bạn có thể sử dụng trực tiếp tên của class cho hàm remove_action() như sau
remove_action('save_post', array('Thuan_Bui_Class', 'my_action_callback')); //remove static class hook
Code language: PHP (php)
Chú ý: tham số priorities phải giống nhau
Nếu action / filter được thêm vào cùng tham số priority, bạn cần phải dùng tham số giống hệt khi dùng hàm remove_action() / remove_filter()
Ví dụ:
class Thuan_Bui_Class {
function __construct() {
add_action( 'save_post', array( $this, 'my_action_callback' ), 57);
}
function my_action_callback(){
//do something
}
}
$some_plugin_class = new Thuan_Bui_Class();
Code language: PHP (php)
Bạn cần dùng tham số priority “57” khi muốn loại bỏ action bằng hàm remove_action()
global $some_plugin_class; //get access to the class object instance
remove_action('save_post', array($some_plugin_class, 'my_action_callback'), 57); //remove class hook using the same priorit
Code language: PHP (php)
Vậy là xong!
[convertkit form=7087807]
Lưu ý: Nếu bạn cần hỗ trợ kỹ thuật, vui lòng gửi câu hỏi trực tiếp ở phần Thảo luận bên dưới, mình sẽ trả lời sớm. Đừng vào hỏi trong fanpage Yêu Chạy Bộ, sẽ không có phản hồi đâu!