Chuyên mục
WordPress

Loại bỏ action hook hoặc filter hook gán sẵn trong class

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

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

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 Bln_Class {
function __construct() {
add_action( 'save_post', array( $this, 'my_action_callback' ));
}
function my_action_callback(){
}

}
$some_plugin_class = new Bln_Class();

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.

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; 
remove_action('save_post', array($some_plugin_class, 'my_action_callback'));

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('Bln_Class', 'my_action_callback'));

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 Bln_Class {

function __construct() {
add_action( 'save_post', array( $this, 'my_action_callback' ), 57);
}

function my_action_callback(){

}

}

$some_plugin_class = new Bln_Class();

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; 
remove_action('save_post', array($some_plugin_class, 'my_action_callback'), 57);

Vậy là xong!


Nhớ chia sẻ bài viết cho bạn bè nếu các bạn thấy bài viết này hữu ích cho mọi người nhé!

Nguồn : thuanbui.me