WordPress комментарийлер бөлүмүнүн кыска коддорунун талданбай калышынын себептери жана чечимдери

боюнча WordPress Макаланын комментарий бөлүмүнө кириңиз [shortcode]Бирок, натыйжада каалаган эффекттин ордуна жөнөкөй текст гана көрсөтүлөт? Бул чындыгында WordPressтин демейки механизми. Төмөндө мен себептерин системалуу түрдө талдап, толук чечимди сунуштайм.

Эмне үчүн комментарийлер бөлүмү кыска коддорду колдобойт?

  • Демейки чектөөлөр
    Коопсуздук максатында, WordPress комментарийлер бөлүмүндө автоматтык түрдө иштебейт. do_shortcode()Бул колдонуучулардын сайттын коопсуздугуна таасир этиши мүмкүн болгон формаларды, скрипттерди же башка мазмунду өзүм билемдик менен киргизүүсүнө жол бербейт.

  • Колдонуу чөйрөсү чектелүү
    Кыскартуу негизинен макаланын мазмунунда колдонуу үчүн иштелип чыккан (the_contentБуга гаджеттер же белгилүү бир плагиндер кирет, ал эми комментарий бөлүмү демейки шартта колдоого алынбайт.

  • Автоматтык форматтоо тоскоолдуктары
    Комментарийдин тексти болот wpautop Автоматтык түрдө кошуу <p><br> Тегдер, бул кыска коддордун синтаксистик түзүлүшүн бузуп, аларды талдоо мүмкүн эмес кылышы мүмкүн.

WordPress комментарийлер бөлүмүнүн кыска коддорунун талданбай калышынын себептери жана чечимдери

Иштетилүүдө...

Комментарийлер үчүн кыска кодду колдоону кантип иштетсем болот?

  • Комментарийлердин кыска коддорун иштетүү
    Тема боюнча functions.php Файлыңызга же код үзүндүсү плагинине төмөнкү кодду кошуңуз:

    add_filter('comment_text', 'do_shortcode');
    

    Бул комментарийлер бөлүмүнүн кыска коддорду колдонушуна алып келет.

  • Плагин иштетилгенин текшериңиз.
    Көптөгөн кыска коддор плагиндерден келет (мисалы, Contact Form 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