Đăng ký nhận RSS Feed

<?php echo 'Welcome to my blog!' ?>

one true brace

viết về những thứ tớ quan tâm, thế là đủ

Một plugin đơn giản cho WordPress

Như bạn có thể thấy, các permalink đến các bài viết trong blog tớ đều ở dạng ten-bai-viet thay vì ?p=xxx như mặc định của WordPress. Để làm được điều này khá đơn giản, chỉ cần host bạn đang dùng hỗ trợ .htaccess, mod_rewrite và bạn thay đổi Customize Permalink Structure trong mục Options > Permalinks là xong.

Ở mỗi bài viết, nếu bạn không trực tiếp sửa đổi permalink thông qua tùy chọn Post Slug, mặc định WordPress sẽ chuyển tiêu đề bài viết thành dạng có dấu gạch ngang, ví dụ Welcome to my blog sẽ biến thành welcome-to-my-blog một cách tự động. Tuy nhiên, điều này chỉ tiện với các tiêu đề tiếng Anh, bởi nếu bạn dùng tiêu đề tiếng Việt, các nguyên âm mang dấu sẽ bị đổi thành dạng %xx rất khó chịu.

Đây cũng chính là ý tưởng để tớ viết một plugin nho nhỏ cho WordPress, tạm đặt tên là Nicer permalinks for Vietnamese. Nhiệm vụ của plugin này rất đơn giản, nó sẽ biến tiêu đề ở dạng tiếng Việt có dấu thành dạng không dấu trong các permalink một cách tự động.

Mò mẫm một chút, tớ tìm thấy một hàm của WordPress mang tên sanitize_title_with_dashes; hàm này chịu trách nhiệm chuyển đổi tiêu đề thành permalink có dấu ngạch ngang phân cách các từ. Mặc định hàm này được hook vào filter sanitize_title:

add_filter('sanitize_title', 'sanitize_title_with_dashes');

Biết được điều này coi như xong 90% công việc. Phần việc còn lại chỉ là viết một hàm chuyển tiếng Việt có dấu thành không dấu, sau đó thực thi nó ngay trước hàm sanitize_title_with_dashes:

function qad_remove_accents($string) {
  $trans = array(
    'à'=>'a','á'=>'a','ả'=>'a','ã'=>'a','ạ'=>'a',
    'ă'=>'a','ằ'=>'a','ắ'=>'a','ẳ'=>'a','ẵ'=>'a','ặ'=>'a',
    'â'=>'a','ầ'=>'a','ấ'=>'a','ẩ'=>'a','ẫ'=>'a','ậ'=>'a',
    'À'=>'a','Á'=>'a','Ả'=>'a','Ã'=>'a','Ạ'=>'a',
    'Ă'=>'a','Ằ'=>'a','Ắ'=>'a','Ẳ'=>'a','Ẵ'=>'a','Ặ'=>'a',
    'Â'=>'a','Ầ'=>'a','Ấ'=>'a','Ẩ'=>'a','Ẫ'=>'a','Ậ'=>'a',
    'đ'=>'d','Đ'=>'d',
    'è'=>'e','é'=>'e','ẻ'=>'e','ẽ'=>'e','ẹ'=>'e',
    'ê'=>'e','ề'=>'e','ế'=>'e','ể'=>'e','ễ'=>'e','ệ'=>'e',
    'È'=>'e','É'=>'e','Ẻ'=>'e','Ẽ'=>'e','Ẹ'=>'e',
    'Ê'=>'e','Ề'=>'e','Ế'=>'e','Ể'=>'e','Ễ'=>'e','Ệ'=>'e',
    'ì'=>'i','í'=>'i','ỉ'=>'i','ĩ'=>'i','ị'=>'i',
    'Ì'=>'i','Í'=>'i','Ỉ'=>'i','Ĩ'=>'i','Ị'=>'i',
    'ò'=>'o','ó'=>'o','ỏ'=>'o','õ'=>'o','ọ'=>'o',
    'ô'=>'o','ồ'=>'o','ố'=>'o','ổ'=>'o','ỗ'=>'o','ộ'=>'o',
    'ơ'=>'o','ờ'=>'o','ớ'=>'o','ở'=>'o','ỡ'=>'o','ợ'=>'o',
    'Ò'=>'o','Ó'=>'o','Ỏ'=>'o','Õ'=>'o','Ọ'=>'o',
    'Ô'=>'o','Ồ'=>'o','Ố'=>'o','Ổ'=>'o','Ỗ'=>'o','Ộ'=>'o',
    'Ơ'=>'o','Ờ'=>'o','Ớ'=>'o','Ở'=>'o','Ỡ'=>'o','Ợ'=>'o',
    'ù'=>'u','ú'=>'u','ủ'=>'u','ũ'=>'u','ụ'=>'u',
    'ư'=>'u','ừ'=>'u','ứ'=>'u','ử'=>'u','ữ'=>'u','ự'=>'u',
    'Ù'=>'u','Ú'=>'u','Ủ'=>'u','Ũ'=>'u','Ụ'=>'u',
    'Ư'=>'u','Ừ'=>'u','Ứ'=>'u','Ử'=>'u','Ữ'=>'u','Ự'=>'u',
    'ỳ'=>'y','ý'=>'y','ỷ'=>'y','ỹ'=>'y','ỵ'=>'y',
    'Y'=>'y','Ỳ'=>'y','Ý'=>'y','Ỷ'=>'y','Ỹ'=>'y','Ỵ'=>'y'
  );
  return strtr($string, $trans);
}

add_filter('sanitize_title', 'qad_remove_accents', 1);

Hàm remove_accents được tớ gán cho prefix qad_ để tránh “đụng” với các plugin khác.

Tham số 1 trong hàm add_filter nhằm chỉ ra mức độ ưu tiên khi thực thi. Mặc định nếu bỏ qua tham số này, hàm có mức độ ưu tiên 10.

Chỉ đơn giản như vậy và tớ đã xong plugin “đầu tay” của mình! (nói vui vậy thôi chứ tớ cũng đã viết khoảng 3-4 plugin cho WordPress rồi)

Bài viết được gửi hôm 30.10.07 · Mang các từ khóa , ,

Cake 1.1 hay 1.2?
Hồi kết của Yahoo! 360 &rarr

Bài viết liên quan:


Gửi phản hồi




Gõ tiếng Việt: Tự động TELEX VNI Off


Đăng ký nhận email dù không gửi phản hồi