Theo mặc định bình thường WordPress rất “ngu” phần Tiếng Việt. Do đó, Permalink được tạo ra thường chứa các kí tự tiếng Việt kiểu nửa ta nữa tây rất khó chịu. Đã vậy nó còn mã hóa thành vào chục cái dấu % nữa chứ. Nhân vừa tiến hành việc này tôi gửi đến cái hướng dẫn sửa liên kết bài viết (Permalink) trong wordpress để nó hiểu tiếng Việt của ta tốt hơn. Tôi hi vọng bài này giúp được những bạn xài WordPress bớt đi chút khó khăn khi cứ phải ngồi chỉnh sửa cái Permalink mỗi khi viết bài.Lục tung cái code của WordPress (hiện www.nhanweb.com đang sử dụng phiên bản 2.8.2) tôi tìm được cái hàm sanitize_title_with_dashes() nằm trong file wp-includes/formatting.php . Đây là file write lại cái Permalink của WordPress. Cũng chính vì ở đây việc xử lý tiếng Việt còn hạn chế nên cái Permalink của chúng ta nhìn không đẹp mặt lắm. Tôi thử sửa cái hàm đó lại như sau:
function sanitize_title_with_dashes($title) { $url_pattern = array('`&(amp;|#)?[a-z0-9]+;`i', '`[^a-z0-9]`i'); $title = htmlentities($title, ENT_COMPAT, 'utf-8'); $title = preg_replace( '`&([a-z]+)(acute|uml|circ|grave|ring|cedil|slash|tilde|caron|lig);`i', "\\1", $title ); $title = preg_replace('`\[.*\]`U','',$title); $title = strtolower(trim($title, '-')); $title = preg_replace("/(à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ)/", 'a', $title); $title = preg_replace("/(è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ)/", 'e', $title); $title = preg_replace("/(ì|í|ị|ỉ|ĩ)/", 'i', $title); $title = preg_replace("/(ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ)/", 'o', $title); $title = preg_replace("/(ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ)/", 'u', $title); $title = preg_replace("/(ỳ|ý|ỵ|ỷ|ỹ)/", 'y', $title); $title = preg_replace("/(đ)/", 'd', $title); $title = preg_replace($url_pattern , '-', $title); return $title; } |
OK! Tôi thử và nó chạy tốt. Bạn có thể sử dụng hàm này của tôi nếu muốn. Nếu bạn sợ việc update phiên bản làm mất hàm này thì bạn có thể download plugin này (cái này tôi viết riêng ra cho dễ): Permalink_Friendly_for_Vietnamese.zip
Chúc các bạn thành công.
hung says
cui` wa vay cung khoe
Nguyễn Duy Nhân says
Mỗi người mỗi cách nghĩ, mỗi người mỗi hành động.Bạn thích thì xài, không thích thì thôi có ai ép đâu.
Have a nice day :)
Beetbe says
Cảm ơn bạn đã chia sẻ
Tinh says
CÁi này cũng giống của bác Quang Anh Do, nhưng bài toán đặt ra là nó có tự fix các bài viết cũ hay không hay lại xảy ra tình trang Not found và chỉ áp dụng cho các bài viết mới sau khi đã cài plugin này?
Định Nguyễn says
Bạn QAD đã viết cái plugin để làm việc này từ bản 2.3.1 :|
http://onetruebrace.com/2007/11/19/nicer-permalinks-for-vietnamese/
Nguyễn Duy Nhân says
@ Định Nguyễn:
Mình có xem qua plugin của bác QAD, thuật toán bỏ dấu của bác QAD phải kết hợp song song với hàm sanitize_title_with_dashes() mới phát huy được hiệu quả (ví dụ loại các kí tự đặt biệt như @, “, ‘ ….) mình nghĩ nên tách riêng xử lý sẽ tốt hơn.
Vấn đề xử lý các Permalink cũ mình nghĩ là chắc không dễ dàng vì các Permalink được lưu trong database chứ ko phải được tạo ra lúc load. Phương án khả thi nhất có lẽ là dùng 1 script update lại tất cả các link đã có trước đây thành link mới (không dấu)
Cám ơn link của bạn.
Khoa says
Bài viết rất hữu ích. Cảm ơn bạn.
Hoàng Tuấn Anh says
Hi,
Tôi vừa viết 1 bài về vấn đề tương tự nhưng cách xử lý chuỗi tiếng Việt lại sử dụng JavaScript:
http://shinichi.microsync.net/blog/bo-sung-chuc-nang-tao-tieu-de-khong-dau-trong-wordpress/
Theo nhận định chủ quan của tôi thì hiệu quả đạt 100%.
Thân
Nguyễn Duy Nhân says
Cám ơn bạn đã share link :)
Không biết function của bạn đã hoàn thiện chưa và chừng nào có thể share ra để mọi người cùng tham khảo nhỉ :D
Mình cũng thử kiểm tra thử plugin mình sử dụng và thấy plugin hoạt động bình thường, với đoạn text bạn dùng để thử nghiệm như ở bài viết tại Blog bạn.
Screenshot:http://img97.imageshack.us/img97/9330/demoh.jpg
Có lẽ mình cần kiểm tra thêm 1 số trường hợp nữa xem sao :)
Mình nóng lòng được học hỏi từ bạn :)
Nguyen Ngoc LOng says
Hay tuyệt
Tran Tuan says
Bản update mới nhất. Nhân test xem nhé
http://ontoprank.com/pffv.rar
Bent says
Sau khi gặp trục trặc với phiên bản mới nhất, giờ mình lại quay lại với phiên bản này =))
Tech.Vixka.net says
Mình cứ install plugin của VietCoding về là xài ngon lành, keke. ;):x
Sơn says
Anh ơi cho em hỏi tiêu đề chữ tiếng việt có dấu sao nó lại hiển thị bậy ? Khác phúc cái này ntn vậy anh?