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.
[convertkit form=7087807]
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ợ.