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

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 hookCode 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 hookCode 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 prioritCode language: PHP (php)

Vậy là xong!

Nếu bài viết của mình mang đến thông tin, kiến thức hữu ích cho bạn, đừng ngại mời mình ly bia để có thêm động lực chia sẻ nhiều hơn nữa. Cám ơn bạn!

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 mò vào hỏi trong fanpage Yêu Chạy Bộ, sẽ không có phản hồi đâu!

Bởi Thuận Bùi

Runner at Yêu Chạy Bộ. Blogger at Ba Lô & Dép Lào. Web Developer at TB's Blog.
Follow me: Facebook / Instagram

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *