មានពេលខ្លះ អ្នកធ្វើវេបសាយតាម WordPress ត្រូវការប្រើប្រាស់ the_excerpt()
ឬ get_the_excerpt()
ជាមួយនឹងអត្ថបទខ្មែរ។ ប៉ុន្តែអ្វីៗវាមិនបានដូចការរំពឹងទុករបស់យើងទេ។ អនុគមន៍ទាំងពីរនេះវានឹងកាត់ឬតម្រឹមយកពាក្យដោយផ្អែកលើលក្ខខណ្ឌពីរ (មើលកូដដើម)៖
- ប្រសិនបើមានការកំណត់នៅក្នុងឯកសារបកប្រែថារាប់ពាក្យដោយផ្អែកលើ
characters
(ចំពោះភាសាណាដែលមួយតួអក្សរស្មើមួយពាក្យ) នោះការកាត់ពាក្យក៏នឹងកាត់តាមតួអក្សរ។ - ប្រសិនបើផ្អែកលើ
words
នោះវានឹងរាប់តាមពាក្យ ដោយមួយពាក្យៗញែកគ្នាដោយដំណកឃ្លា។ ហើយនេះជាលំនាំដើមនៅក្នុង WordPress។
ជាទូទៅ អ្វីដែលខ្ញុំធ្លាប់ធ្វើគឺកែសម្រួលអនុគមន៍នោះដោយកាត់តាមតួអក្សរ ប៉ុន្តែវាហាក់ដូចជាមិនទំនងចំពោះភាសាខ្មែរ។ ដូច្នេះហើយចុងក្រោយខ្ញុំក៏មកដល់ចំណុចមួយនេះ គឺកែសម្រួលអនុគមន៍នោះឲ្យចាប់ពាក្យខ្មែរដោយផ្អែកលើចន្លោះមិនឃើញ តាមវិធីសាស្ត្រ regular expression។
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
/** * Custom trim excerpt with Khmer text support, using regular expression. Khmer * text must contain zero-width spaces (ZWSP); otherwise, this code can not * detect the word boundaries. There is another way to do it with ICU library, * but it needs some server configuartions which is not usually available in * most shared hosting. * * @author Tep Sovichet (http://sovichet.info) * @param string $text * @return mixed */ function trim_excerpt_khmer($text) { $raw_excerpt = $text; if ('' == $text) { $original_content = wp_strip_all_tags(get_the_content('')); $text = $original_content; $text = strip_shortcodes($text); $text = apply_filters( 'the_content', $text ); $text = str_replace(']]>', ']]>', $text); $excerpt_length = apply_filters( 'excerpt_length', 55 ); $excerpt_more = apply_filters( 'excerpt_more', ' ' . '[…]' ); $text = wp_trim_words( $text, $excerpt_length, '' ); $regex = "/[$-\/:-?{-~!\"^_`[\]\w\d\xE1\x9E\x80-\xE1\x9F\xBF]+[\xE2\x80\x8B \xE1\x9F\x94\xE1\x9F\x95]?/u"; preg_match_all($regex, $text, $matches); $sliced = array_slice($matches[0], 0, $excerpt_length); $text = implode('', $sliced); if (strlen($text) < strlen($original_content)) { $text .= $excerpt_more; } } return apply_filters( 'trim_excerpt_khmer', $text, $raw_excerpt ); } remove_filter('get_the_excerpt', 'wp_trim_excerpt'); add_filter('get_the_excerpt', 'trim_excerpt_khmer'); |
នៅក្នុងនេះ អ្វីដែលយើងចាំបាច់ត្រូវធ្វើនោះគឺលុបអនុគមន៍ 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 វាងាយស្រួលត្រង់ថាការកាត់ពាក្យអាចប្រព្រឹត្តិទៅបានដោយផ្អែកលើវចនានុក្រម ហើយវាមានមុខងារច្រើន ប៉ុន្តែយើងប្រើតែការចាប់ពាក្យប៉ុណ្ណោះ។
វាអាចនឹងមានល្បឿនយឺត ហើយការកាត់ពាក្យក៏អាចនឹងភាន់មិនស្គាល់ពាក្យ ប្រសិនបើអ្នកសរសេរពាក្យខុស ត្បិតអីវាផ្អែកលើវចនានុក្រមដែលខ្ញុំបានលើកឡើងពីខាងលើ។ តែយ៉ាងណា នឹងសាកល្បងលេងៗថាវាយ៉ាងម៉េចទៅវិញ។