មូលហេតុ និងដំណោះស្រាយសម្រាប់ shortcodes ផ្នែកមតិយោបល់ WordPress មិនត្រូវបានវិភាគ

在។ WordPress បញ្ចូល​ក្នុង​ផ្នែក​មតិយោបល់​នៃ​អត្ថបទ [shortcode]ទោះយ៉ាងណាក៏ដោយ លទ្ធផលបង្ហាញតែអត្ថបទធម្មតាជំនួសឱ្យបែបផែនដែលចង់បាន? នេះពិតជាយន្តការលំនាំដើមរបស់ WordPress។ ខាងក្រោមនេះ ខ្ញុំនឹងវិភាគមូលហេតុជាប្រព័ន្ធ និងផ្តល់ដំណោះស្រាយពេញលេញ។

ហេតុអ្វីបានជាផ្នែកមតិយោបល់មិនគាំទ្រ shortcodes?

  • ការរឹតបន្តឹងលំនាំដើម
    ដោយសារហេតុផលសុវត្ថិភាព WordPress មិនដំណើរការដោយស្វ័យប្រវត្តិនៅក្នុងផ្នែកមតិយោបល់ទេ។ do_shortcode()វារារាំងអ្នកប្រើប្រាស់ពីការបញ្ចូលទម្រង់បែបបទ ស្គ្រីប ឬខ្លឹមសារផ្សេងទៀតដោយបំពាន ដែលអាចប៉ះពាល់ដល់សុវត្ថិភាពគេហទំព័រ។

  • វិសាលភាពនៃការអនុវត្តមានកំណត់
    អក្សរកាត់នេះត្រូវបានរចនាឡើងជាចម្បងសម្រាប់ប្រើប្រាស់ក្នុងខ្លឹមសារអត្ថបទ (the_contentនេះរួមបញ្ចូលទាំងឧបករណ៍ ឬកម្មវិធីជំនួយជាក់លាក់ ខណៈពេលដែលផ្នែកមតិយោបល់មិនត្រូវបានគាំទ្រតាមលំនាំដើមទេ។

  • ការរំខានដល់ការធ្វើទ្រង់ទ្រាយដោយស្វ័យប្រវត្តិ
    អត្ថបទមតិយោបល់នឹងមាន wpautop បន្ថែមដោយស្វ័យប្រវត្តិ <p> 和។ <br> ស្លាក ដែលអាចបំបែករចនាសម្ព័ន្ធវាក្យសម្ព័ន្ធនៃ shortcodes ដែលធ្វើឱ្យពួកវាមិនអាចវិភាគបាន។

មូលហេតុ និងដំណោះស្រាយសម្រាប់ shortcodes ផ្នែកមតិយោបល់ WordPress មិនត្រូវបានវិភាគ

កំពុងដំណើរការ...

តើខ្ញុំអាចបើកការគាំទ្រ shortcode សម្រាប់មតិយោបល់ដោយរបៀបណា?

  • បើកដំណើរការ​កូដ​ខ្លីៗ​សម្រាប់​មតិយោបល់
    លើប្រធានបទ functions.php បន្ថែមកូដខាងក្រោមទៅក្នុងឯកសារ ឬកម្មវិធីជំនួយកូដរបស់អ្នក៖

    add_filter('comment_text', 'do_shortcode');
    

    នេះនឹងធ្វើឱ្យផ្នែកមតិយោបល់ប្រើលេខកូដខ្លីៗ។

  • ពិនិត្យមើលថាតើកម្មវិធីជំនួយត្រូវបានធ្វើឱ្យសកម្មឬអត់។
    កូដខ្លីៗជាច្រើនបានមកពីកម្មវិធីជំនួយ (ដូចជា Contact Form 7 និង WooCommerce)។ ប្រសិនបើកម្មវិធីជំនួយមិនត្រូវបានបើកទេ កូដខ្លីៗនឹងមិនដំណើរការទេ។

  • ជៀសវាងកំហុសវាក្យសម្ព័ន្ធ
    សូមបញ្ជាក់ថាអក្សរកាត់ត្រូវបានសរសេរយ៉ាងត្រឹមត្រូវ ឧទាហរណ៍៖

    [shortcode attribute="value"]内容[/shortcode]
    
  • ពិនិត្យមើលការប៉ះទង្គិចគ្នានៃស្បែក ឬកម្មវិធីជំនួយ
    ប្តូរទៅស្បែកលំនាំដើម (ដូចជា Twenty Twenty-Five) បិទកម្មវិធីជំនួយនីមួយៗម្តងមួយៗ ដើម្បីសាកល្បង និងបញ្ជាក់ថាតើមានជម្លោះណាមួយដែលបណ្តាលឱ្យលេខកូដខ្លីដំណើរការខុសប្រក្រតីឬអត់។

  • ជម្រះឃ្លាំងសម្ងាត់
    នៅពេលប្រើកម្មវិធីជំនួយសម្រាប់ caching ឬ CDN អ្នកត្រូវសម្អាត cache បន្ទាប់ពីការជួសជុលដើម្បីមើលប្រសិទ្ធភាព។

កូដដើម្បីបើកដំណើរការ shortcodes ផ្នែកមតិយោបល់ដោយសុវត្ថិភាព

ដើម្បីជៀសវាងហានិភ័យសន្តិសុខ អាចធ្វើទៅបាន functions.php បន្ថែមឧទាហរណ៍ពេញលេញខាងក្រោម៖

<?php
// 在评论区启用简码解析
add_filter('comment_text', 'do_shortcode');

// 限制允许的简码列表
function safe_comment_shortcodes($content) {
    // 定义允许的简码(加入 su_posts)
    $allowed_shortcodes = array('gallery', 'audio', 'video', 'contact-form-7', 'su_posts');

    // 遍历评论内容中的简码
    return preg_replace_callback('/\[(\w+)([^\]]*)\]/', function($matches) use ($allowed_shortcodes) {
        $shortcode = $matches[1];
        // 如果简码在允许列表中,正常解析
        if (in_array($shortcode, $allowed_shortcodes)) {
            return do_shortcode($matches[0]);
        }
        // 否则直接输出原始文本,避免执行
        return esc_html($matches[0]);
    }, $content);
}
add_filter('comment_text', 'safe_comment_shortcodes', 9);

ការពិពណ៌នាកូដ

  • បើកដំណើរការលេខកូដខ្លីៗជួរទីមួយ add_filter('comment_text', 'do_shortcode'); បើកដំណើរការការគាំទ្រ shortcode នៅក្នុងផ្នែកមតិយោបល់។
  • លេខកូដខ្លីៗដែលមានការរឹតបន្តឹង: ឆ្លងកាត់ $allowed_shortcodes និយមន័យអារេអនុញ្ញាតឱ្យមានអក្សរកាត់ ឧទាហរណ៍ gallery,audio,video,contact-form-7,su_posts
  • ការដោះស្រាយសុវត្ថិភាពប្រសិនបើអ្នកប្រើប្រាស់បញ្ចូល shortcode ដែលមិនមាននៅក្នុងបញ្ជីដែលត្រូវបានអនុញ្ញាត កូដនឹងត្រូវបាន escaped ទៅជាអត្ថបទធម្មតាដោយស្វ័យប្រវត្តិ ដើម្បីជៀសវាងការប្រតិបត្តិ shortcode ដែលអាចមានគ្រោះថ្នាក់។

ការអនុវត្តល្អបំផុត

  • អនុញ្ញាតតែលេខកូដខ្លីៗចាំបាច់ប៉ុណ្ណោះឧទាហរណ៍ នៅក្នុងបទបង្ហាញ ឬទម្រង់ប្រព័ន្ធផ្សព្វផ្សាយ សូមជៀសវាងការប្រើប្រាស់លេខកូដខ្លីៗច្រើនពេក។
  • ពិនិត្យមើលការអាប់ដេតកម្មវិធីជំនួយជាប្រចាំត្រូវប្រាកដថាកម្មវិធីជំនួយប្រភព shortcode មានសុវត្ថិភាព និងអាចទុកចិត្តបាន។
  • ការរួមបញ្ចូលគ្នារវាងកម្មវិធីជំនួយសម្រាប់ caching និង protectionដើម្បីជៀសវាងសម្ពាធលើការអនុវត្តដែលបណ្តាលមកពីការបង្ហាញលេខកូដខ្លី។

កំណែដែលបានបង្កើនប្រសិទ្ធភាពថាមវន្ត៖ ចំណុចប្រទាក់ការកំណត់ផ្នែកខាងក្រោយ (ស្វែងរក + ការដាក់ជាក្រុម + ការណែនាំអំពីផ្នែកខាងមុខ)

ប្រសិនបើអ្នកចង់បានភាពបត់បែនកាន់តែច្រើន អ្នកអាចប្រើកូដដែលបានបង្កើនប្រសិទ្ធភាពដូចខាងក្រោម៖

  • រាយបញ្ជីលេខកូដខ្លីៗដែលបានចុះឈ្មោះទាំងអស់ដោយស្វ័យប្រវត្តិ(រួមទាំង​កម្មវិធី​ជំនួយ​ដែល​ផ្តល់​ដោយ​កម្មវិធី​ជំនួយ)។
  • គាំទ្រការបញ្ចូលលេខកូដខ្លីៗផ្ទាល់ខ្លួន(ដូច ) 。
  • ប្រអប់ស្វែងរក:លឿនទីតាំងអក្សរកាត់។
  • ការបង្ហាញដែលបានដាក់ជាក្រុមការដាក់ជាក្រុមតាមប្រភពកម្មវិធីជំនួយធ្វើឱ្យវាកាន់តែងាយស្រួល។
  • ការអនុញ្ញាត​តួនាទីមានតែលេខកូដខ្លីៗនៅក្នុងមតិយោបល់របស់អ្នកគ្រប់គ្រងប៉ុណ្ណោះដែលនឹងត្រូវបានវិភាគ។ លេខកូដខ្លីៗនៅក្នុងមតិយោបល់របស់អ្នកប្រើប្រាស់ធម្មតានឹងបង្ហាញសារ "លេខកូដខ្លីនេះអាចប្រើបានសម្រាប់តែអ្នកគ្រប់គ្រងប៉ុណ្ណោះ"។
<?php
// 添加后台菜单
function cwl_shortcode_settings_menu() {
    add_options_page(
        '评论简码设置',
        '评论简码设置',
        'manage_options',
        'cwl-shortcode-settings',
        'cwl_shortcode_settings_page'
    );
}
add_action('admin_menu', 'cwl_shortcode_settings_menu');

// 注册设置
function cwl_register_shortcode_settings() {
    register_setting('cwl_shortcode_settings_group', 'cwl_allowed_shortcodes');
    register_setting('cwl_shortcode_settings_group', 'cwl_custom_shortcodes');
}
add_action('admin_init', 'cwl_register_shortcode_settings');

// 设置页面内容
function cwl_shortcode_settings_page() {
    global $shortcode_tags;
    $allowed = get_option('cwl_allowed_shortcodes', array());
    $custom  = get_option('cwl_custom_shortcodes', array());

    ?>
    <div class="wrap">
        <h1>评论区简码设置</h1>
        <form method="post" action="options.php">
            <?php settings_fields('cwl_shortcode_settings_group'); ?>

            <h2>搜索简码</h2>
            <input type="text" id="cwl_shortcode_search" placeholder="输入简码关键字..." style="width:300px;">

            <h2>已注册简码(按插件来源分组)</h2>
            <p>勾选允许在评论区执行的简码:</p>
            <div id="cwl_shortcode_list">
                <?php
                // 按插件来源分组
                $groups = array();
                foreach ($shortcode_tags as $tag => $callback) {
                    $source = is_array($callback) ? get_class($callback[0]) : (is_object($callback) ? get_class($callback) : '主题/未知来源');
                    $groups[$source][] = $tag;
                }

                foreach ($groups as $source => $tags) {
                    echo "<h3>" . esc_html($source) . "</h3>";
                    foreach ($tags as $tag) {
                        ?>
                        <label class="cwl_shortcode_item">
                            <input type="checkbox" name="cwl_allowed_shortcodes[]" value="<?php echo esc_attr($tag); ?>" <?php checked(in_array($tag, $allowed)); ?>>
                            <?php echo esc_html($tag); ?>
                        </label><br>
                        <?php
                    }
                }
                ?>
            </div>

            <h2>自定义简码</h2>
            <p>输入额外允许的简码(用逗号分隔):</p>
            <textarea name="cwl_custom_shortcodes" rows="3" cols="50"><?php echo esc_textarea(implode(',', (array)$custom)); ?></textarea>

            <?php submit_button(); ?>
        </form>
    </div>

    <script>
    // 简码搜索功能
    document.getElementById('cwl_shortcode_search').addEventListener('keyup', function() {
        var keyword = this.value.toLowerCase();
        document.querySelectorAll('.cwl_shortcode_item').forEach(function(item) {
            var text = item.textContent.toLowerCase();
            item.style.display = text.indexOf(keyword) > -1 ? '' : 'none';
        });
    });
    </script>
    <?php
}

// 评论区简码过滤(结合角色权限 + 前端提示)
function cwl_safe_comment_shortcodes($content) {
    $allowed_shortcodes = get_option('cwl_allowed_shortcodes', array());
    $custom_shortcodes  = get_option('cwl_custom_shortcodes', array());
    $allowed_shortcodes = array_merge($allowed_shortcodes, (array)$custom_shortcodes);

    return preg_replace_callback('/\[(\w+)([^\]]*)\]/', function($matches) use ($allowed_shortcodes) {
        $shortcode = $matches[1];
        // 管理员可解析简码
        if (current_user_can('manage_options')) {
            if (in_array($shortcode, $allowed_shortcodes)) {
                return do_shortcode($matches[0]);
            }
            return esc_html($matches[0]);
        } else {
            // 普通用户提示信息
            if (in_array($shortcode, $allowed_shortcodes)) {
                return '<span style="color:red;">此简码仅管理员可用</span>';
            }
            return esc_html($matches[0]);
        }
    }, $content);
}
add_filter('comment_text', 'cwl_safe_comment_shortcodes', 9);

总结

ផ្នែកមតិយោបល់ WordPress មិនវិភាគអក្សរកាត់តាមលំនាំដើមទេ ដោយសារហេតុផលសុវត្ថិភាព និងដំណើរការ។ អ្នកអាចប្រើ [ឧបករណ៍វិភាគ] ជំនួសវិញ។ functions.php បន្ថែមតម្រងដើម្បីបើក shortcodes ហើយផ្សំវាជាមួយសុវត្ថិភាព។

Hope Chen Weiliang Blog ( https://www.chenweiliang.com/ អត្ថបទ "មូលហេតុ និងដំណោះស្រាយសម្រាប់បញ្ហាវិភាគកូដខ្លីៗផ្នែកមតិយោបល់ WordPress" ដែលបានចែករំលែកនៅទីនេះអាចមានប្រយោជន៍សម្រាប់អ្នក។

សូមស្វាគមន៍ចំពោះការចែករំលែកតំណភ្ជាប់នៃអត្ថបទនេះ៖https://www.chenweiliang.com/cwl-34132.html

ដើម្បីដោះសោល្បិចលាក់កំបាំងបន្ថែមទៀត🔑 សូមស្វាគមន៍មកកាន់ឆានែល Telegram របស់យើង!

Share និង Like បើចូលចិត្ត! ការចែករំលែក និងការចូលចិត្តរបស់អ្នកគឺជាការលើកទឹកចិត្តបន្តរបស់យើង!

 

发表评论។

អាសយដ្ឋានអ៊ីមែលរបស់អ្នកនឹងមិនត្រូវបានផ្សព្វផ្សាយទេ។ 必填项已用។ * 标注។

រមូរទៅកំពូល