Để sử dụng smilies, bạn phải bật tùy chọn Convert emoticons like :-) and :-P to graphics on display nằm trong "Settings > Writing" để WordPress tự động chuyển các ký tự đặc biệt thành icon.
Thực chất tùy chọn trên là kết quả của hàm convert_smilies() nằm trong file /wp-includes/formatting.php. WordPress dùng hàm này làm bộ lọc (filter) cho nội dung bài viết, trích đoạn (excerpt) và comment. Tôi biết được điều này là vì tôi thấy 3 câu lệnh sau nằm trong file /wp-includes/default-filters.php
106 | add_filter('the_content', 'convert_smilies'); |
112 | add_filter('the_excerpt', 'convert_smilies'); |
121 | add_filter('comment_text', 'convert_smilies', 20); |
Nếu không ngại đọc code PHP thì bạn hãy chịu khó xem qua nội dung của hàm convert_smilies() và bạn sẽ thấy nhiệm vụ của nó khá đơn giản: nó sẽ rà soát trong nội dung bài viết các ký tự đặc biệt, nếu phát hiện thấy các ký tự như :-) :-P thì nó sẽ trả lại code HTML (thẻ IMG) tương ứng để hiển thị smilies dưới dạng icon.
Đến đây thì tôi nghĩ chắc hẳn bạn sẽ thắc mắc: làm thế nào để WordPress biết được ứng với ký tự đặc biệt nào sẽ có icon tương ứng? Một lần nữa tôi biết được là nhờ hàm smilies_init() trong file /wp-includes/functions.php
Hàm smilies_init() được gọi mỗi khi WordPress khởi tạo
186 | add_action('init', 'smilies_init', 5); |
nó có nhiệm vụ tạo ra 3 biến kiểu array sau:
- $wpsmiliestrans chứa các ánh xạ (map) của từng ký tự đặc biệt sang tên file icon
- $wp_smiliessearch chứa các ký tự đặc biệt
- $wp_smiliesreplace chứa code HTML tương ứng với ký tự đặc biệt
Trong đó $wpsmiliestrans là biến quan trọng nhất, nó giúp cho WordPress lấy được tên file icon tương ứng với ký tự đặc biệt, chúng ta sẽ bàn về biến này sau.
Tóm lại, việc tổ chức và hiển thị smilies trong WordPress được thực hiện bởi 2 hàm thôi các bạn ạ. Một hàm để khởi tạo và hàm còn lại để "search & replace". Sau khi đã hiểu được nguyên lý của nó rồi thì công việc còn lại của chúng ta rất đơn giản, mời bạn sang trang 3 để xem tiếp cách "hack" smilies nhé!












UNITED STATES và đang sừ dụng không?
22 phản hồi cho “Tùy biến Smilies trong WordPress mà không cần dùng đến plugin”
Bài khá lý thú, tuy nhiên nếu bác trình bày thêm cách để xuất hiện một list emotion trên phần new post và cả trên comment tương tự thế này nữa thì tuyệt
Có chứ bác, nhưng em để dành cho bài kế tiếp
Bổ sung: hình như nếu bác dùng emotion yahoo nhưng cái kiểu gõ như trong YM là không được, một số sẽ bị lỗi do sử dụng các ký tự mà wordpress có thể bỏ qua, bác có thể thống kê được các ký tự đó không. Thanks
Bác nói rất đúng =D>
Có một số smilies của yahoo không hiển thị được do có chứa ký tự \ "
Nguyên nhân là do trong WordPress có một hàm tên là wptexturize(), nó có nhiệm vụ thay thế những ký tự trên thành mã html đặc biệt (htmlspecialchars) chính vì vậy mà WordPress không thể hiện được các smilies đó.
Để khắc phục, bác chỉ việc thêm 3 câu lệnh sau vào file functions.php trong theme của bác:
Bác làm thử xem có được không nhé!
Rất hay, có thể xem bác là guru của wordpress được rồi đấy, sẽ thử ngay
Thêm vào chỗ nào vậy bác
Vào file funtions.php của theme, chỗ nào cũng được miễn nằm trong khối
< ?php .... ?>Cám ơn bác.
Tặng thêm cho mọi người một site cung cấp Emotitions nữa nè: http://emo.huhiho.com/
Trang này có nhiều bộ Emo đẹp và hot do Redphoenix89 sưu tầm.
Bài viết rất hay
. Giúp tớ hiểu thêm khá rõ về mấy hàm "core" của WP.
Có điều, tớ thấy phương pháp thao tác trực tiếp với các file gốc của WP ko phải là ý tưởng tốt lắm. Nếu có thể, chúng ta tách nó ra thành 1 plugin hoặc 1 function trong theme chẳng hạn. Liệu có thể khai báo trực tiếp trong file functions.php của theme dạng này được ko (tớ chưa thử, mới chỉ là ý nghĩ vậy
)
global $wpsmiliestrans;
$wpsmiliestrans = array("abc" => "xyz", ...);
Cám ơn cậu về ý tưởng đó nhé! =D>
Mình sẽ xem lại, hy vọng là nó chạy được, khi đó khỏi phải sửa trực tiếp file trong core của WordPress.
Test thử tất cả các smilies của YM xem nào
Hay lắm, em đang test thử, cám ơn bác.
=))
Bác viết nhầm rồi bác ơi, phải dán mấy cái text kia trong file wp-includes/fuctions.php chứ hok phải là wp-config.php. Em đang dùng wp 2.7.1
Em không nhầm đâu bác ạ, nếu bác sửa file /wp-includes/functions.php thì mỗi khi bác update version mới của WordPress, nếu file đó nằm trong danh sách file được cập nhật (overwrite) thì mọi sự thay đổi của bác sẽ bị mất.
Em chọn file wp-config.php là có nguyên do đấy bác, bởi file đó chứa thông tin của database nên sau khi install blog xong, WordPress sẽ không đụng tới file đó nữa, bác cứ yên tâm mà sửa nó nhưng nhớ backup trước để phòng sự cố.
Em thử trong file config những lúc đó thì blog không hiển thị, còn nếu chinhe trong fuction thì lại chạy ngon ơ, bác có thể xem demo ở blog em:
http://vnghost.byethost22.com
Mà cái này em dùng thêm plugin customs smile mới hiển thị ở comments, em mò mãi mới biết cái đó nó nằm trong file fuction, chớ config thì hok thấy mấy cái dòng mà bác chỉ dẫn nó ở đâu.
Cách này của bác lên 2.8 bị lỗi /wp-includes/formatting.php nhé
Vâng, cám ơn bác, em sẽ tìm cách update cho nó chạy tốt với WP 2.8
Bác Hiếu up lại file đính kèm giùm cái, bác upgrade wp nó xóa rồi sao ấy ?
Hư hình rồi anh ơi, up lại đi ạ ^^!