ការ​កាត់​ពាក្យ​ខ្មែរ​នៅ​ក្នុង Excerpt របស់ WordPress

មាន​ពេល​ខ្លះ អ្នក​ធ្វើ​វេបសាយ​តាម WordPress ត្រូវ​ការ​ប្រើប្រាស់ the_excerpt()get_the_excerpt() ជាមួយ​នឹង​អត្ថបទ​ខ្មែរ។ ប៉ុន្តែ​អ្វីៗ​វា​មិន​បាន​ដូច​ការ​រំពឹង​ទុក​របស់​យើង​ទេ។ អនុគមន៍​ទាំង​ពីរ​នេះ​វា​នឹង​កាត់​ឬ​តម្រឹម​យក​ពាក្យ​ដោយ​ផ្អែក​លើ​លក្ខខណ្ឌ​ពីរ (មើល​កូដ​ដើម)៖

  • ប្រសិន​បើ​មាន​ការ​កំណត់​នៅ​ក្នុង​ឯកសារ​បកប្រែ​ថា​រាប់​ពាក្យ​ដោយ​ផ្អែក​លើ characters (ចំពោះ​ភាសា​ណា​ដែល​មួយ​តួ​អក្សរ​ស្មើ​មួយ​ពាក្យ) នោះ​ការ​កាត់​ពាក្យ​ក៏​នឹង​កាត់​តាម​តួអក្សរ។
  • ប្រសិន​បើ​ផ្អែក​លើ words នោះ​វា​នឹង​រាប់​តាម​ពាក្យ ដោយ​មួយ​ពាក្យៗ​ញែក​គ្នា​ដោយ​ដំណកឃ្លា។ ហើយ​នេះ​ជា​លំនាំដើម​នៅ​ក្នុង WordPress។

ជា​ទូទៅ អ្វី​ដែល​ខ្ញុំ​ធ្លាប់​ធ្វើ​គឺ​កែ​សម្រួល​អនុគមន៍​នោះ​ដោយ​កាត់​តាម​តួអក្សរ ប៉ុន្តែ​វា​ហាក់​ដូចជា​មិន​ទំនង​ចំពោះ​ភាសា​ខ្មែរ។ ដូច្នេះ​ហើយ​ចុងក្រោយ​ខ្ញុំ​ក៏​មក​ដល់​ចំណុច​មួយ​នេះ គឺ​កែសម្រួល​អនុគមន៍​នោះ​ឲ្យ​ចាប់​ពាក្យ​ខ្មែរ​ដោយ​ផ្អែក​លើ​ចន្លោះ​មិន​ឃើញ តាម​វិធីសាស្ត្រ regular expression។

នៅ​ក្នុង​នេះ អ្វី​ដែល​យើង​ចាំបាច់​ត្រូវ​ធ្វើ​នោះ​គឺ​លុប​អនុគមន៍ callback wp_trim_excerpt ដើម​របស់ WordPress ចេញ​ពី​បញ្ជី។ រួច​ហើយ​យើង​បង្កើត​អនុគមន៍ callback ថ្មី​មួយ​ទៀត​ដោយ​ផ្អែក​លើ​អនុគមន៍​ដើម ប៉ុន្តែ​ផ្លាស់ប្ដូរ​វិធី​កាត់​ពាក្យ។ អ្នក​អាច​យក​កូដ​នេះ​ទៅ​ប្រើ​ផ្ទាល់​នៅ​ក្នុង​ឯកសារ functions.php នៅ​ក្នុង​ពុម្ពរូបរាង។ នេះ​គ្រាន់​តែ​ជា​កូដ​បឋម​ប៉ុណ្ណោះ ហើយ​ប្រសិន​បើ​អ្នក​ត្រូវការ​កែ​អ្វី​ទៀត ក៏​អាច​យក​ទៅ​ធ្វើ​តាម​សប្បាយ។

អ្នក​ត្រូវ​ចាំ​ថា អត្ថបទ​នោះ​ត្រូវតែ​មាន​ប្រើ “ចន្លោះ​មិន​ឃើញ”។

Pattern ដែល​ខ្ញុំ​ប្រើ​នោះ​គឺ​ដើម្បី​ចាប់​គ្រប់​សញ្ញា​និង​វណ្ណយុត្តិ, តួ​អក្សរ​អង់គ្លេស, លេខ​ឡាតាំង, និង​អក្សរ​ខ្មែរ​ចាប់​ពី​យូនីកូដ \u1780 ដល់ \u17FF រហូត​ដល់​ត្រឹម ចន្លោះ​មិន​ឃើញ (\u200B), ដំណកឃ្លា, សញ្ញា​ខណ្ឌ (\u17D4), សញ្ញា​ខណ្ឌ​ចប់ (​​\u17D5)។

វិធី​មួយ​ទៀត​កំពុង​ពិចារណា

នៅ​មាន​វិធីសាស្ត្រ​មួយ​ទៀត​ដែល​ខ្ញុំ​គិត​ឃើញ គឺ​ត្រូវ​ពឹងផ្អែក​លើ​ផ្នែក​បន្ថែម​របស់ PHP គឺ php-intl ដែល​ជា wrapper លើ​បណ្ណាល័យ ICU។ ប៉ុន្តែ​អ្វី​ដែល​ខ្ញុំ​ខ្វល់​នោះ​គឺ មិន​ប្រាកដ​ថា​រាល់​អ្នក​ដំឡើង WordPress ប្រើ​ផ្ទាល់​ខ្លួន​នោះ​មាន VPS ផ្ទាល់​ខ្លួន​ឫឥត? ពីព្រោះ​ខ្ញុំ​មិន​ប្រាកដ​ថា​គ្រប់ Shared Hosting គេ​បាន​ដំឡើង​ផ្នែក​បន្ថែម​នោះ​និង​បណ្ណាល័យ ICU ដែរ​ឬ​អត់​ទេ។

ការ​ប្រើប្រាស់​បណ្ណាល័យ ICU វា​ងាយ​ស្រួល​ត្រង់​ថា​ការ​កាត់​ពាក្យ​អាច​ប្រព្រឹត្តិ​ទៅ​បាន​ដោយ​ផ្អែក​លើ​វចនានុក្រម ហើយ​វា​មាន​មុខងារ​ច្រើន ប៉ុន្តែ​យើង​ប្រើ​តែ​ការ​ចាប់​ពាក្យ​ប៉ុណ្ណោះ។

វា​អាច​នឹង​មាន​ល្បឿន​យឺត ហើយ​ការ​កាត់​ពាក្យ​ក៏​អាច​នឹង​ភាន់​មិន​ស្គាល់​ពាក្យ ប្រសិនបើ​អ្នក​សរសេរ​ពាក្យ​ខុស ត្បិត​អី​វា​ផ្អែក​លើ​វចនានុក្រម​ដែល​ខ្ញុំ​បាន​លើកឡើង​ពី​ខាង​លើ។ តែ​យ៉ាង​ណា នឹង​សាកល្បង​លេងៗ​ថា​វា​យ៉ាង​ម៉េច​ទៅ​វិញ។

ដំណោះស្រាយ​ចំពោះ​ការ​លុប “ចន្លោះ​មិន​ឃើញ” នៅ​ក្នុង WP 4.5

កាលពី​យប់​មិញ ពេល​កំពុង​រៀបចំ​ប្លក់​របស់​ខ្ញុំ​ឡើង​វិញ ខ្ញុំ​ក៏​ធ្វើ​បច្ចុប្បន្នភាព WordPress ឲ្យ​ឡើង​ទៅ 4.5 ស្រាប់តែ​ពេល​ខ្ញុំ​សាកល្បង​សរសេរ​អត្ថបទ​ថ្មី វា​ក៏​លុប​ចន្លោះ​មិន​ឃើញ ឬ Zero-width space (ZWSP) ដែល​ត្រូវ​ប្រើ​ក្នុង​អក្សរ​ខ្មែរ​ដើម្បី​បញ្ជាក់​ដែន​ពាក្យ។ ការ​លុប​នេះ តាម​ពិត​ទៅ មិនមែន​បណ្ដាល​មក​ពី WordPress នោះ​ទេ តែ​គឺមកពី TinyMCE ដែល​ជា Visual Editor របស់ WordPress។ ការណ៍​នេះ​ធ្លាប់​កើត​មាន​ម្ដង​ហើយ​កាល​ពី​បួន​ឆ្នាំ​មុន គឺ​ចាប់​ពី TinyMCE 3.4.7 ហើយ​បាន​ដក​វា​ចេញ​នៅ​កំណែ 3.5.5។ ខ្ញុំ​ក៏​ធ្លាប់​បាន​លើក​យក​បញ្ហា​នេះ​ទៅ​ពិភាក្សា​នៅ​ខាង WordPress ដែរ​នៅ​ពេល​នោះ។

ការ​លុប​នេះ វា​កើត​មាន​ឡើង​ជា​ថ្មី​ចាប់ពី TinyMCE 4.3.0 ហើយ WordPress 4.5 វា​ប្រើប្រាស់ 4.3.8។ ដូច្នេះ​ហើយ កាល​ណា​យើង​សរសេរ​អត្ថបទ​ដោយ​ប្រើ​អក្សរ​ខ្មែរ​និង​ចន្លោះ​មិន​ឃើញ​នៅ​ក្នុង WordPress 4.5 នោះ​ចន្លោះ​មិន​ឃើញ​នឹង​ត្រូវ​បាន​លុប​ចោល​នៅ​ពេល​វា​ធ្វើ​ការងារ​សម្អាត (clean task)។

ខ្ញុំ​បាន​ចូល​ទៅ​ពិនិត្យ​និង​ផ្ទៀងផ្ទាត់​កូដ​ដើម​របស់​វា ហើយ​ក៏​បាន​ដក​កូដ​បន្តិចបន្តួច​ចេញ ដើម្បី​ដោះស្រាយ​ជា​បណ្ដោះ​អាសន្ន​តែ​ប៉ុណ្ណោះ

ដំណោះស្រាយ

  1. ខ្ញុំ​បាន​ផ្គុំ (build) វា​ឡើង​ម្ដង​ទៀត ដើម្បី​កុំ​ឲ្យ​វា​លុប​ចន្លោះ​មិន​ឃើញ។ ទាញយក​ឯកសារ​ថ្មី​នៅ​ទីនេះ​សម្រាប់ WP 4.54.5.2
  2. រលា tinymce.min.js ចេញ​ពី zip ហើយ​យក​ទៅ​ដាក់​នៅ WP_ROOT/wp-includes/js/tinymce។ អ្នក​អាច​ប្រើ​កម្មវិធី FTP ផ្សេងៗ​ដូចជា FileZilla។ល។ ដើម្បី​យក​ទៅ​ដាក់​នៅ​ក្នុង Server។
  3. ព្យាយាម​លុប cache នៅ​ក្នុង browser។

នេះ​គ្រាន់តែ​ជា​ដំណោះស្រាយ​បណ្ដោះ​អាសន្ន​ប៉ុណ្ណោះ ហើយ​ប្រសិន​ណា​បើ​ធ្វើ​បច្ចុប្បន្នភាព WordPress ទៅ​ពេល​ក្រោយ​ទៀត នោះ​វា​អាច​នឹង​ត្រឡប់​មក​ធម្មតា​វិញ គឺ​ការ​លុប​ចន្លោះ​មិន​ឃើញ​នៅ​តែ​មាន​ដដែល។

ពេល​នេះ​ខ្ញុំ​ព្យាយាម​ទាក់ទង​ទៅ​ខាង​អ្នក​អភិវឌ្ឍ TinyMCE ដើម្បី​រក​ដំណោះស្រាយ​អចិន្ត្រៃយ៍​មួយ​ដែល​មិន​ប៉ះពាល់​ដល់​កូដ​ដទៃ​របស់​គេ។ នៅ​ក្នុង​កូដ​ដើម គេ​បាន​បញ្ជាក់​ថា ZWSP នេះ​គឺ​ជា BOM (Byte order mark) តែ​បើ​តាម​ខ្ញុំ​អាន​អត្ថបទ​មួយ​ចំនួន ឃើញ​ថា ZWSP ដែល​មាន​លេខ​កូដ \u200b មិនមែន​ជា BOM នោះ​ទេ។ BOM មាន​តែ \uFEFF ប៉ុណ្ណោះ។