Đăng ngày 28 Tháng ba, 2009 trong mục WP Tutorial | 23,865 lượt xem

Để 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 :D

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é! :D

Trang: 1 2 3

Đăng ký nhận bài viết qua email
digg delicious stumbleupon technorati Google live facebook Sphinn Mixx newsvine reddit yahoomyweb

22 phản hồi cho “Tùy biến Smilies trong WordPress mà không cần dùng đến plugin”

  1. 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 :wink:

  2. 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

  3. 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.

  4. 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 :D )

    global $wpsmiliestrans;
    $wpsmiliestrans = array("abc" => "xyz", ...);

  5. Test thử tất cả các smilies của YM xem nào

    :D :) :-) ) =)) :"> =D> :-" =p~ \:D/ O:-) ;;)

    ;) ) 8-> :-P :-> :-? :-? ? >:d< :-ss :-b :-( ( x(

  6. Hay lắm, em đang test thử, cám ơn bác.

  7. =))

  8. 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

  9. Cách này của bác lên 2.8 bị lỗi /wp-includes/formatting.php nhé

  10. 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 ?

  11. Hư hình rồi anh ơi, up lại đi ạ ^^!

Viết comment

Chức năng lọc comment của blog đang được kích hoạt vì thế những comment có từ ngữ thô tục hoặc có chứa một số link sẽ bị coi là spam. Vui lòng đừng bấm nút “Gửi Comment” hai lần, comment của bạn sẽ hiển thị sau khi đã qua kiểm duyệt.
Off Auto TELEX VNI VIQR VIQR*