Sababu na suluhisho za misimbo fupi ya sehemu ya maoni ya WordPress kutochanganuliwa

katika WordPress Ingiza katika sehemu ya maoni ya makala [shortcode]Hata hivyo, matokeo yanaonyesha maandishi wazi tu badala ya athari inayotakiwa? ​​Hii kwa kweli ni utaratibu chaguo-msingi wa WordPress. Hapa chini, nitachambua sababu kwa utaratibu na kutoa suluhisho kamili.

Kwa nini sehemu ya maoni haiungi mkono misimbo fupi?

  • Vizuizi chaguomsingi
    Kwa sababu za kiusalama, WordPress haifanyi kazi kiotomatiki katika sehemu ya maoni. do_shortcode()Hii inawazuia watumiaji kuingiza fomu, hati, au maudhui mengine ambayo yanaweza kuathiri usalama wa tovuti kiholela.

  • Upeo mdogo wa matumizi
    Kifupisho hiki kimeundwa hasa kwa ajili ya matumizi katika maudhui ya makala (the_contentHii inajumuisha vifaa au programu-jalizi maalum, ilhali sehemu ya maoni haitumiki kwa chaguo-msingi.

  • Uingiliaji kati wa umbizo kiotomatiki
    Maandishi ya maoni yatakuwa wpautop Ongeza kiotomatiki <p> Na <br> Lebo, ambazo zinaweza kuvunja muundo wa sintaksia wa misimbo fupi, na kuzifanya zisiweze kueleweka.

Sababu na suluhisho za misimbo fupi ya sehemu ya maoni ya WordPress kutochanganuliwa

Inachakata...

Ninawezaje kuwezesha usaidizi wa msimbo mfupi kwa maoni?

  • Washa misimbo fupi ya maoni
    Kuhusu mada functions.php Ongeza msimbo ufuatao kwenye programu-jalizi yako ya faili au kijisehemu cha msimbo:

    add_filter('comment_text', 'do_shortcode');
    

    Hii itasababisha sehemu ya maoni kutumia misimbo fupi.

  • Angalia kama programu-jalizi imewashwa.
    Misimbo mingi ya mkato hutoka kwenye programu-jalizi (kama vile Fomu ya Mawasiliano 7 na WooCommerce). Ikiwa programu-jalizi haijawashwa, misimbo ya mkato haitafanya kazi.

  • Epuka makosa ya sintaksia
    Tafadhali thibitisha kwamba kifupisho kimeandikwa kwa usahihi, kwa mfano:

    [shortcode attribute="value"]内容[/shortcode]
    
  • Angalia migongano ya mandhari au programu-jalizi
    Badili hadi kwenye mandhari chaguo-msingi (kama vile Ishirini na Ishirini na Tano), zima kila programu-jalizi moja baada ya nyingine ili kujaribu na kuthibitisha kama kuna migogoro yoyote inayosababisha msimbo mfupi kufanya kazi vibaya.

  • futa kashe
    Unapotumia programu-jalizi za kuhifadhi data au CDN, unahitaji kufuta akiba baada ya marekebisho ili kuona athari.

Nambari ya kuwezesha kwa usalama misimbo fupi ya sehemu ya maoni

Ili kuepuka hatari za kiusalama, inawezekana functions.php Ongeza mfano kamili ufuatao:

<?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);

maelezo ya kanuni

  • Washa misimbo fupiMstari wa kwanza add_filter('comment_text', 'do_shortcode'); Washa usaidizi wa msimbo mfupi katika sehemu ya maoni.
  • Misimbo fupi yenye vikwazo:pita $allowed_shortcodes Ufafanuzi wa safu huruhusu vifupisho, kwa mfano gallery,audio,video,contact-form-7,su_posts.
  • Ushughulikiaji wa usalamaIkiwa mtumiaji ataingiza msimbo mfupi ambao haupo kwenye orodha inayoruhusiwa, msimbo utahamishwa kiotomatiki hadi kwenye maandishi wazi ili kuepuka kutekeleza msimbo mfupi ambao unaweza kuwa hatari.

Mazoea Bora

  • Ruhusu tu misimbo fupi inayohitajikaKwa mfano, katika mawasilisho au fomu za vyombo vya habari, epuka kutumia misimbo mifupi mingi sana.
  • Angalia mara kwa mara masasisho ya programu-jaliziHakikisha programu-jalizi ya chanzo cha msimbo mfupi ni salama na ya kuaminika.
  • Kuchanganya programu-jalizi za kuhifadhi na ulinziIli kuepuka shinikizo la utendaji linalosababishwa na utoaji wa msimbo mfupi.

Toleo Lililoboreshwa Kinachobadilika: Kiolesura cha Mipangilio ya Nyuma (Utafutaji + Upangaji wa Makundi + Vidokezo vya Mbele)

Ikiwa unataka kubadilika zaidi, unaweza kutumia msimbo ulioboreshwa ufuatao:

  • Orodhesha kiotomatiki misimbo yote mifupi iliyosajiliwa(Ikiwa ni pamoja na zile zinazotolewa na programu-jalizi).
  • Inasaidia kuingiza misimbo fupi maalum(kama ).
  • kisanduku cha utafutaji: harakaKuweka nafasiUfupisho.
  • Onyesho la kikundiKuweka katika makundi kulingana na chanzo cha programu-jalizi hufanya iwe rahisi zaidi.
  • Ruhusa za MajukumuMisimbo mifupi tu katika maoni ya msimamizi ndiyo itakayochanganuliwa; misimbo mifupi katika maoni ya kawaida ya mtumiaji itaonyesha ujumbe "Msimbo huu mfupi unapatikana kwa wasimamizi pekee".
<?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);

总结

Sehemu za maoni za WordPress hazichanganui kwa kifupi kwa sababu za kiusalama na utendaji. Unaweza kutumia [zana ya kuchanganua] badala yake. functions.php Ongeza kichujio ili kuwezesha misimbo fupi na uchanganye na usalama.

发表 评论

Barua pepe yako haitachapishwa. 必填 项 已 用 * 标注

Kitabu ya Juu