Причини и решенија за тоа зошто кратките кодови во делот за коментари на 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.
  • Безбедно ракувањеДоколку корисникот внесе краток код што не е на дозволената листа, кодот автоматски ќе се претвори во обичен текст за да се избегне извршување на потенцијално опасни кратки кодови.

Најдобри практики

  • Дозволете само неопходни кратки кодовиНа пример, во медиумски презентации или формулари, избегнувајте користење на премногу кратки кодови.
  • Редовно проверувајте за ажурирања на додатоцитеОсигурајте се дека приклучокот за изворен код е безбеден и сигурен.
  • Комбинирање на додатоци за кеширање и заштитаЗа да се избегне притисокот врз перформансите предизвикан од рендерирање на кратки кодови.

Динамички подобрена верзија: Интерфејс за поставки на Backend (Пребарување + Групирање + Совети за Frontend)

Доколку сакате поголема флексибилност, можете да го користите следниов подобрен код:

  • Автоматски наведете ги сите регистрирани кратки кодови(Вклучувајќи ги и оние што ги обезбедуваат додатоците).
  • Поддржува внесување на прилагодени кратки кодови(如
  • поле за пребарување:брзоПозиционирањеКратенка.
  • Групиран приказГрупирањето според изворниот код на приклучокот го прави поинтуитивно.
  • Дозволи за улогиЌе се анализираат само кратките кодови во коментарите на администраторите; кратките кодови во коментарите на обичните корисници ќе ја прикажат пораката „Овој краток код е достапен само за администратори“.
<?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

За да отклучите повеќе скриени трикови🔑, добредојдени сте да се придружите на нашиот Телеграм канал!

Споделете и лајкнете ако ви се допаѓа! Вашите споделувања и лајкови се наша постојана мотивација!

 

评论

Вашата адреса за е-пошта нема да биде објавена. Се користат задолжителните полиња * Етикета

Дојдете до врв