Chuyên mục
Wordpress

Hướng dẫn loại bỏ filter / action ra khỏi Hook đã được gán sẵn trong theme / plugin

Làm sao để vô hiệu hoá một hàm filter hook đã được gắn sẵn trong theme / plugin?

Có thể bạn đã biết đến hàm remove_filter để loại bỏ filter có sẵn ra khỏi hook:

remove_filter( $tag, $function, $priority);Code language: PHP (php)
  • $ tag – Là tên của một ‘filter hook’ của WP
  • $function – Tên Filter mà bạn muốn loại bỏ khỏi hệ thống.
  • $priority – Độ ưu tiên của Filter

Tuy nhiên, không phải cứ dùng trực tiếp hàm trong file functions.php của child theme này là có thể loại bỏ được filter đã được gán sẵn vào hook trong parent theme / plugin.

Lý do vì theo cấu trúc của WordPress các hàm của child theme được ưu tiên tải trước tiên, sau đó mới đến parent theme. Do đó khi bạn dùng hàm remove_filter trong child theme, bạn đang loại bỏ 1 filter chưa tồn tại, vì nó chưa đến thứ tự được tải. Đó là lý do hàm remove_filter của bạn không hoạt động.

Để hàm remove_filter hoạt động chính xác, bạn cần phải đặt nó trong hook after_setup_theme như sau

//Remove a function from the parent theme
function remove_parent_filters(){ //Have to do it after theme setup, because child theme functions are loaded first
	remove_filter('init', 'function_to_be_removed');
}
add_action( 'after_setup_theme', 'remove_parent_filters' );Code language: JavaScript (javascript)

Hook after_setup_theme được dùng khi tải trang, sau khi theme đã được tải hoàn tất. Do đó khi đặt gán remove_filter trong vào hook after_setup_theme, nó sẽ hoạt động chính xác: loại bỏ filter đã được gán sẵn trong parent theme.

Chẳng hạn khi dùng theme Astra, nó sử dụng hàm add_filter sau để tuỳ biến cách hiển thị tình trạng kho hàng:

add_filter( 'woocommerce_get_stock_html', 'astra_woo_product_in_stock', 10, 2 );Code language: JavaScript (javascript)

Mình không muốn Astra thay đổi cách hiển thị mặc định của Woocoomerce, nên sẽ loại bỏ filter astra_woo_product_in_stock với đoạn code sau:

function remove_parent_filters(){ 
	remove_filter( 'woocommerce_get_stock_html', 'astra_woo_product_in_stock', 10, 2 );
}
add_action( 'after_setup_theme', 'remove_parent_filters' );Code language: JavaScript (javascript)

Bạn có thể đặt đoạn code này vào file functions.php của child theme, hoặc sử dụng plugin Code Snippets.

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

2 trả lời trong “Hướng dẫn loại bỏ filter / action ra khỏi Hook đã được gán sẵn trong theme / plugin”

Chào a Thuận, cho em hỏi là em đang sử dụng theme Flatsome và muốn loại bỏ nút filter button. Em dùng hàm remove_action( ‘flatsome_category_title’, ‘flatsome_add_category_filter_button’ ); nhưng không được. Vậy phải làm thế nào ạ?

Anh không dùng Flatsome nên rất tiếc không biết, không hỗ trợ được nhé. Em cần liên hệ bên nhà phát triển theme Flatsome để kêu nó hỗ trợ.

Trả lời Long Hủy

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 *