WordPress сэтгэгдлийн хэсгийн богино кодуудыг задлан шинжлэхгүй байх шалтгаан ба шийдлүүд

WordPress Нийтлэлийн сэтгэгдэл хэсэгт оруулна уу [shortcode]Гэсэн хэдий ч үр дүн нь хүссэн үр нөлөөний оронд зөвхөн энгийн текстийг харуулдаг уу? Энэ бол үнэндээ WordPress-ийн анхдагч механизм юм. Доор би шалтгаануудыг системтэйгээр шинжилж, бүрэн шийдлийг өгөх болно.

Сэтгэгдэл бичих хэсэг яагаад богино кодуудыг дэмждэггүй вэ?

  • Анхдагч хязгаарлалтууд
    Аюулгүй байдлын үүднээс WordPress нь сэтгэгдэл хэсэгт автоматаар ажилладаггүй. do_shortcode()Энэ нь хэрэглэгчдийг сайтын аюулгүй байдалд нөлөөлж болзошгүй маягт, скрипт эсвэл бусад контентыг дур мэдэн оруулахаас сэргийлдэг.

  • Хэрэглээний хүрээ хязгаарлагдмал
    Энэ товчлолыг голчлон нийтлэлийн агуулгад ашиглахад зориулагдсан болно (the_contentҮүнд гаджетууд эсвэл тодорхой залгаасууд багтдаг бол тайлбар хэсэг нь анхдагчаар дэмжигддэггүй.

  • Автомат форматлах хөндлөнгийн оролцоо
    Сэтгэгдлийн текст нь байх болно wpautop Автоматаар нэмэх <p> Тэгээд <br> Шошго нь богино кодын синтаксийн бүтцийг эвдэж, тэдгээрийг задлан шинжлэх боломжгүй болгож болзошгүй.

WordPress сэтгэгдлийн хэсгийн богино кодуудыг задлан шинжлэхгүй байх шалтгаан ба шийдлүүд

Боловсруулж байна...

Сэтгэгдлүүдэд зориулсан богино кодын дэмжлэгийг хэрхэн идэвхжүүлэх вэ?

  • Сэтгэгдлийн богино кодуудыг идэвхжүүлэх
    Сэдвийн талаар functions.php Дараах кодыг файл эсвэл кодын хэсэгчилсэн залгаас руу нэмнэ үү:

    add_filter('comment_text', 'do_shortcode');
    

    Энэ нь сэтгэгдлийн хэсэгт богино код ашиглахад хүргэнэ.

  • Залгаас идэвхжсэн эсэхийг шалгана уу.
    Олон богино кодууд нь залгаасуудаас (жишээлбэл, Холбоо барих маягт 7 болон WooCommerce) ирдэг. Хэрэв залгаас идэвхжээгүй бол богино кодууд ажиллахгүй.

  • Синтаксийн алдаанаас зайлсхий
    Товчлолыг зөв бичсэн эсэхийг баталгаажуулна уу, жишээ нь:

    [shortcode attribute="value"]内容[/shortcode]
    
  • Сэдэв эсвэл залгаасуудын зөрчилдөөнийг шалгах
    Анхдагч сэдэв рүү шилжиж (жишээ нь Хорин Хорин Тав гэх мэт), богино кодын эвдрэлд хүргэж болзошгүй зөрчил байгаа эсэхийг шалгах, баталгаажуулахын тулд залгаас бүрийг нэг нэгээр нь идэвхгүй болго.

  • кэшийг цэвэрлэх
    Кэш хийх нэмэлт өргөтгөлүүд эсвэл CDN-үүдийг ашиглах үед үр дүнг нь харахын тулд засвар хийсний дараа кэшийг цэвэрлэх шаардлагатай.

Сэтгэгдэл хэсгийн богино кодуудыг аюулгүйгээр идэвхжүүлэх код

Аюулгүй байдлын эрсдэлээс зайлсхийхийн тулд дараах боломжтой 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'); Сэтгэгдэл хэсэгт богино кодын дэмжлэгийг идэвхжүүлнэ үү.
  • Хязгаарлагдмал богино кодууд: нэвтрүүлэх $allowed_shortcodes Массивын тодорхойлолтууд нь товчлолыг зөвшөөрдөг, жишээлбэл gallery,audio,video,contact-form-7,su_posts.
  • Аюулгүй ажиллагааны харьцах чадварХэрэв хэрэглэгч зөвшөөрөгдсөн жагсаалтад ороогүй богино кодыг оруулбал аюултай богино кодуудыг ажиллуулахаас зайлсхийхийн тулд кодыг автоматаар энгийн текст рүү шилжүүлнэ.

Шилдэг туршлага

  • Зөвхөн шаардлагатай богино кодуудыг зөвшөөрнө үүЖишээлбэл, хэвлэл мэдээллийн танилцуулга эсвэл маягтуудад хэт олон богино код ашиглахаас зайлсхий.
  • Залгаасны шинэчлэлтүүдийг тогтмол шалгаж байхБогино кодын эх үүсвэрийн залгаас аюулгүй, найдвартай эсэхийг шалгаарай.
  • Кэш болон хамгаалалтын залгаасуудыг нэгтгэхБогино кодын рендерингээс үүдэлтэй гүйцэтгэлийн дарамтаас зайлсхийхийн тулд.

Динамикаар сайжруулсан хувилбар: Арын хэсгийн тохиргооны интерфэйс (Хайлт + Бүлэглэлт + Урд хэсгийн зөвлөмжүүд)

Хэрэв та илүү уян хатан байдлыг хүсч байвал дараах сайжруулсан кодыг ашиглаж болно.

  • Бүртгэлтэй бүх богино кодуудыг автоматаар жагсаах(Залгаасуудын өгсөн зүйлсийг оруулаад).
  • Өөрчлөн тохируулсан богино кодуудыг оруулахыг дэмждэг(如 )。
  • хайлтын мөрхурданБайршилТовчлол.
  • Бүлэглэсэн дэлгэцЗалгаасны эх сурвалжаар бүлэглэх нь илүү ойлгомжтой болгодог.
  • Дүрийн зөвшөөрөлЗөвхөн администраторын сэтгэгдэл дэх богино кодуудыг задлан шинжлэх болно; ердийн хэрэглэгчийн сэтгэгдэл дэх богино кодууд нь "Энэ богино кодыг зөвхөн администраторууд ашиглах боломжтой" гэсэн мессежийг харуулах болно.
<?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 Богино кодуудыг идэвхжүүлэхийн тулд шүүлтүүр нэмж, аюулгүй байдалтай хослуул.

Hope Chen Weiliang блог ( https://www.chenweiliang.com/ Энд хуваалцсан "WordPress сэтгэгдлийн хэсгийн богино код задлан шинжлэх асуудлын шалтгаан ба шийдлүүд" нийтлэл танд тустай байж магадгүй юм.

Энэ нийтлэлийн холбоосыг хуваалцахад тавтай морилно уу:https://www.chenweiliang.com/cwl-34132.html

Илүү олон далд заль мэхийг нээхийн тулд манай Telegram сувагт нэгдэнэ үү!

Хэрэв танд таалагдвал лайк дарж, хуваалцаарай! Таны шэйр, лайк бол бидний байнгын урам зориг юм!

 

发表 评论

Таны имэйл хаягийг нийтлэхгүй. 必填 项 已 用 дээр ажиллаж байна * 标注

TOP хүртэл гүйлгэж