Tuy nhiên, không phải cứ sử dụng hàm trực tiếp trong hàm tệp. php của chủ đề con này có thể loại bỏ bộ lọc đã được gán sẵn vào hook trong chủ đề / plugin gốc
Lý do là vì theo cấu trúc của WordPress, các chức năng của chủ đề con được ưu tiên tải trước tiên, sau đó mới đến chủ đề gốc. Do đó khi bạn sử dụng hàm remove_filter trong chủ đề con, bạn đang loại bỏ 1 bộ lọc không tồn tại vì nó chưa tải xuống thứ tự. Đó 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 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' ];
Hook after_setup_theme được sử dụng khi tải trang, sau khi chủ đề đã được tải xuống hoàn tất. Do đó khi gán remove_filter trong hook after_setup_theme, nó sẽ hoạt động chính xác. loại bỏ bộ lọc đã được gán sẵn trong chủ đề gốc
Không giới hạn khi sử dụng chủ đề Astra, nó sử dụng hàm add_filter sau để tùy biến cách hiển thị trạng thái kho hàng
add_filter[ 'woocommerce_get_stock_html', 'astra_woo_product_in_stock', 10, 2 ];
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ỏ bộ lọc astra_woo_product_in_stock với đoạn mã 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' ];
You can set this đoạn code into file functions. php của chủ đề con hoặc sử dụng plugin Code Snippets
Because is done
FacebookTweetEmailIn
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. Thank you
MỜI BIA
Bài viết liên quan
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 hỏi trong fanpage Yêu Chạy Bộ, sẽ không có phản hồi đâu
Trong bài này chúng ta sẽ tìm hiểu hook là gì, action là gì và filter là gì trong WordPress, đây là ba khái niệm bạn sẽ gặp rất nhiều trong quá trình học lập trình WordPress nâng cao như làm theme và plugin
Bài viết này đã được đăng tại freetuts. net , không được sao chép dưới mọi hình thức.
Bạn đã từng nghe về khái niệm thiết lập hướng sự kiện trong các Framework như Zend, Laravel, Phalcon rồi phải không? . Vậy thì trong WordPress có tồn tại khái niệm này không?
Thực ra WordPress chỉ là một phần mềm chạy trên web nền nên sự kiện của nó chính là các điểm nhấn trong quá trình biên dịch mã nguồn và bạn muốn có thể truy cập vào các điểm nhấn đó thì phải sử dụng các API của móc
Hãy đọc bài viết WordPress API nếu bạn chưa biết về nó
Bài viết này đã được đăng tại [free tuts. net]
1. Hooks là gì?
Trong WordPress, hooks là danh sách các điểm nhấn [điểm móc] nằm trong hệ thống mã nguồn của WordPress, tại đây bạn có thể bổ sung các đoạn mã thông qua hai hàm add_action và add_filter mà WordPress đã cung cấp sẵn. Chúng ta có hai nhóm móc chính đó là bộ lọc và hành động
- Bộ lọc là các điểm móc liên quan đến xử lý nội dung
- Hành động là các điểm móc liên quan đến xử lý hành động
Ví dụ
[1] Bạn muốn kiểm tra loại bỏ các đường liên kết mà người quản trị đã cố gắng thêm vào khi sửa bài viết thì sẽ sử dụng hook có tên là save_post và nó thuộc nhóm hành động
add_action['save_post', 'function_name', 10, 2];
[2] Bạn muốn khi hiển thị nội dung bài viết ra bên ngoài giao diện người dùng thì thêm một dòng chữ ở vị trí cuối cùng của nội dung thì có thể sử dụng hook có tên là the_content và bộ lọc thuộc nhóm của nó
add_filter[ 'the_content', 'function_name', 1 ];
Mỗi hook sẽ có các tham số truyền vào nhau, nên để chắc chắn thì trước khi sử dụng hook nào các bạn hãy lên trang codex để tham khảo nhé. Ví dụ với hook the_title thì sẽ có hai tham số truyền vào đó là
add_action['save_post', 'function_name', 10, 2];2 và
add_filter[ 'the_content', 'function_name', 1 ];0
Trường hợp trang codex không giải thích rõ về tham số thì bạn hãy tự mình debug bằng cách truyền tham số vào hàm
add_filter[ 'the_content', 'function_name', 1 ];1 và kết hợp với hàm var_dump để vào xem nội dung của tham số đó
Trước khi tìm hiểu rõ hơn về action và filter, bạn tạo cho mình hai tệp
add_filter[ 'the_content', 'function_name', 1 ];2 và
add_filter[ 'the_content', 'function_name', 1 ];3 nằm trong thư mục bao gồm của plugin có tên là wp-learn. Cấu trúc này mình đã tạo trong bài viết các bước tạo plugin WordPress, bạn có thể đọc nó nếu chưa biết
Tiếp theo bạn tạo tệp là
add_filter[ 'the_content', 'function_name', 1 ];4 và bổ sung hai đoạn mã yêu cầu hai tệp đó vào như sau
add_filter[ 'woocommerce_get_stock_html', 'astra_woo_product_in_stock', 10, 2 ];
0Xem bài yêu cầu trong PHP nếu chưa biết hàm này
2. Lọc WordPress là gì?
Trong bộ lọc WordPress, các hook được ví như một bộ lọc vì các hook này liên quan đến xử lý nội dung dữ liệu. WordPress có rất nhiều loại bộ lọc và bạn có thể xem tại đây
Đặc điểm chung của bộ lọc này là mỗi hook sẽ trả về một nội dung nào đó và bạn sử dụng hàm add_filter để bổ sung .
Hàm add_filter[ 'the_content', 'function_name', 1 ];
5 có cấu trúc như sau
add_filter[ 'woocommerce_get_stock_html', 'astra_woo_product_in_stock', 10, 2 ];
2in which
- thẻ $. is name of filter hook
- $function_to_add là hàm gọi lại muốn bổ sung vào
add_filter[ 'the_content', 'function_name', 1 ];
6 - $priority là mức độ ưu tiên của hàm gọi lại, mức độ ưu tiên ngày càng cao thì hàm gọi lại đó sẽ được gọi trước. default value is 10
- $accepted_args là tổng số tham số tham gia vào hàm gọi lại và không được thông qua quá tổng số hook. default value is 1
Ví dụ. Giả sử mình muốn khi đưa ra tiêu đề của các bài viết thì bổ sung thêm từ
add_filter[ 'the_content', 'function_name', 1 ];7 ở đầu thì làm như sau
You open file
add_filter[ 'the_content', 'function_name', 1 ];2 up and code as after
add_filter[ 'woocommerce_get_stock_html', 'astra_woo_product_in_stock', 10, 2 ];
6in which
- the_title là hook filter dùng để lấy tiêu đề bài viết
- add_string_to_title là tên của hàm muốn bổ sung vào hook
add_filter[ 'the_content', 'function_name', 1 ];
9
Hook
add_filter[ 'the_content', 'function_name', 1 ];9 sẽ truyền tiêu đề của bài viết vào hàm
add_filter[ 'woocommerce_get_stock_html', 'astra_woo_product_in_stock', 10, 2 ];
01 và thực thi nó, sau đó lấy kết quả của hàm này trả về làm đề mớiLuồng xử lý như sau. Gả hàm
add_filter[ 'the_content', 'function_name', 1 ];9 có nội dung như 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' ];
1Lúc này ta sử dụng hàm
add_filter[ 'the_content', 'function_name', 1 ];5 để bổ sung hàm gọi lại
add_filter[ 'woocommerce_get_stock_html', 'astra_woo_product_in_stock', 10, 2 ];
01 vào add_filter[ 'the_content', 'function_name', 1 ];9 thì nó sẽ hoạt động ở dạng như 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' ];
5Do đó thực chất khi bạn bổ sung một hành động nào đó vào bộ lọc thì tức là bạn bổ sung một đoạn mã xử lý trước khi bộ lọc đó trả về kết quả
3. Action WordPress là gì?
Action hooks là danh sách các hook liên quan đến xử lý sự kiện. Ví dụ khi bạn lưu một bài viết thì ta có hook save_post, khi người dùng bình luận thì có hook comment_post
Tất cả các hook đều quan trọng vì nó giúp chúng ta có thể thâm nhập vào hệ thống lõi mà không cần phải phá mã nguồn của WordPress. Ví dụ bạn muốn khi người dùng bình luận thì gửi email thông báo thì bạn sẽ viết một hàm gửi thư và đưa nó vào hook comment_post
Ta sử dụng hàm
add_filter[ 'woocommerce_get_stock_html', 'astra_woo_product_in_stock', 10, 2 ];
06 để bổ sung hành động vào Action Hook. Hàm này có các tham số như saufunction remove_parent_filters[]{
remove_filter[ 'woocommerce_get_stock_html', 'astra_woo_product_in_stock', 10, 2 ];
}
add_action[ 'after_setup_theme', 'remove_parent_filters' ];
7in which
- thẻ $. is name of filter hook
- $function_to_add là hàm gọi lại muốn bổ sung vào
add_filter[ 'the_content', 'function_name', 1 ];
6 - $priority là mức độ ưu tiên của hàm gọi lại, mức độ ưu tiên ngày càng cao thì hàm gọi lại đó sẽ được gọi trước. default value is 10
- $accepted_args là tổng số tham số tham gia vào hàm gọi lại và không được thông qua quá tổng số hook. default value is 1
Ví du. Khi lưu bài viết nếu bài viết ở trạng thái công khai thì hãy gửi email đến cho admin
Action hook lưu bài viết là
add_filter[ 'woocommerce_get_stock_html', 'astra_woo_product_in_stock', 10, 2 ];
08, hook này có ba tham số truyền vào đó là- $id. id bài viết đang lưu hoặc mới bổ sung
- $bài đăng. toàn bộ nội dung như tiêu đề, nội dung của bài viết
- $is_update. if TRUE tức hành động lưu bài đăng này là cập nhật hành động, đảo ngược lại là hành động chèn
Ok bây giờ bạn mở tệp
add_filter[ 'the_content', 'function_name', 1 ];3 lên và đặt mã như sau
add_action['save_post', 'function_name', 10, 2];1
Too menus must don't you. ]
4. Lời kết
Tóm lại, qua bài này bạn đã học được những kiến thức như sau
- Hook WordPress chính là những điểm móc nằm trong hệ thống WordPress mà qua đó ta có thể xâm nhập vào mà không cần phải thay đổi core
- Filter WordPress là những hook được sử dụng để xử lý dữ liệu nội dung trong WordPress
- Action WordPress là những hook được sử dụng để xử lý hành động trong WordPress
Bài này tương đối khó hiểu, vì đây chính là nội dung quan trọng và quan trọng nhất mà bạn phải biết khi lập trình WordPress. Bạn phải hiểu nguyên lý hoạt động của nó thì sau này mới xây dựng được plugin và theme theo ý mình được