Razlozi i rješenja za probleme s parsiranjem kratkih kodova u odjeljku za komentare na WordPressu

WordPress Upišite u odjeljak za komentare članka [shortcode]Međutim, rezultat prikazuje samo običan tekst umjesto željenog efekta? To je zapravo WordPressov zadani mehanizam. U nastavku ću sustavno analizirati razloge i pružiti cjelovito rješenje.

Zašto odjeljak za komentare ne podržava kratke kodove?

  • Zadana ograničenja
    Iz sigurnosnih razloga, WordPress se ne pokreće automatski u odjeljku za komentare. do_shortcode()To sprječava korisnike da proizvoljno umeću obrasce, skripte ili drugi sadržaj koji može utjecati na sigurnost web-mjesta.

  • Ograničeno područje primjene
    Kratica je uglavnom namijenjena za upotrebu u sadržaju članka (the_contentTo uključuje gadgete ili određene dodatke, dok odjeljak za komentare nije podržan prema zadanim postavkama.

  • Automatsko ometanje formatiranja
    Tekst komentara bit će wpautop Dodaj automatski <p><br> Oznake koje mogu narušiti sintaktičku strukturu kratkih kodova, čineći ih nemogućima za parsiranje.

Razlozi i rješenja za probleme s parsiranjem kratkih kodova u odjeljku za komentare na WordPressu

Obrada...

Kako mogu omogućiti podršku za kratke kodove za komentare?

  • Omogući kratke kodove za komentare
    Na temu functions.php Dodajte sljedeći kod u svoju datoteku ili dodatak za isječak koda:

    add_filter('comment_text', 'do_shortcode');
    

    Zbog toga će odjeljak s komentarima koristiti kratke kodove.

  • Provjerite je li dodatak aktiviran.
    Mnogi kratki kodovi dolaze iz dodataka (kao što su Contact Form 7 i WooCommerce). Ako dodatak nije omogućen, kratki kodovi neće raditi.

  • Izbjegavajte sintaktičke pogreške
    Molimo potvrdite da je kratica ispravno napisana, na primjer:

    [shortcode attribute="value"]内容[/shortcode]
    
  • Provjerite konflikte tema ili dodataka
    Prebacite se na zadanu temu (kao što je Twenty Twenty-Five), onemogućite svaki dodatak jedan po jedan kako biste testirali i potvrdili postoje li sukobi koji uzrokuju neispravan kratki kod.

  • očisti predmemoriju
    Kada koristite dodatke za predmemoriju ili CDN-ove, morate izbrisati predmemoriju nakon ispravka kako biste vidjeli učinak.

Kod za sigurno omogućavanje kratkih kodova za odjeljak komentara

Kako bi se izbjegli sigurnosni rizici, moguće je functions.php Dodajte sljedeći potpuni primjer:

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

opis šifre

  • Omogući kratke kodovePrvi redak add_filter('comment_text', 'do_shortcode'); Omogućite podršku za kratke kodove u odjeljku za komentare.
  • Ograničeni kratki kodovi:proći $allowed_shortcodes Definicije nizova dopuštaju kratice, na primjer gallery,audio,video,contact-form-7,su_posts.
  • Sigurno rukovanjeAko korisnik unese kratki kod koji nije na popisu dopuštenih, kod će se automatski pretvoriti u običan tekst kako bi se izbjeglo izvršavanje potencijalno opasnih kratkih kodova.

najbolje prakse

  • Dopustite samo potrebne kratke kodoveNa primjer, u medijskim prezentacijama ili obrascima izbjegavajte korištenje previše kratkih kodova.
  • Redovito provjeravajte ažuriranja dodatakaProvjerite je li dodatak za izvorni kod kratkog koda siguran i pouzdan.
  • Kombiniranje dodataka za predmemoriranje i zaštituKako bi se izbjegao pritisak na performanse uzrokovan renderiranjem kratkih kodova.

Dinamički poboljšana verzija: Sučelje postavki pozadine (Pretraživanje + Grupiranje + Savjeti za prednji dio)

Ako želite veću fleksibilnost, možete koristiti sljedeći poboljšani kod:

  • Automatski prikaz svih registriranih kratkih kodova(Uključujući i one koje pružaju dodaci).
  • Podržava unos prilagođenih kratkih kodova(如 .)
  • okvir za pretraživanje:brzoPozicioniranjeKratica.
  • Grupirani prikazGrupiranje prema izvoru dodatka čini ga intuitivnijim.
  • Dozvole ulogaSamo će se kratki kodovi u komentarima administratora analizirati; kratki kodovi u komentarima običnih korisnika prikazat će poruku "Ovaj kratki kod dostupan je samo administratorima".
<?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);

总结

Odjeljci komentara u WordPressu ne parsiraju skraćenice prema zadanim postavkama iz sigurnosnih i performansnih razloga. Umjesto toga možete koristiti [alat za parsiranje]. functions.php Dodajte filter za omogućavanje kratkih kodova i kombinirajte ga sa sigurnošću.

Blog Hope Chen Weiliang ( https://www.chenweiliang.com/ Članak "Razlozi i rješenja za probleme s parsiranjem kratkih kodova u odjeljku komentara na WordPressu" podijeljen ovdje mogao bi vam biti koristan.

Dobrodošli da podijelite vezu ovog članka:https://www.chenweiliang.com/cwl-34132.html

Za otključavanje još skrivenih trikova🔑, dobrodošli da se pridružite našem Telegram kanalu!

Podijelite i lajkajte ako vam se sviđa! Vaša dijeljenja i lajkovi naša su daljnja motivacija!

 

发表 评论

Vaša email adresa neće biti objavljena. Koriste se obavezna polja * Označiti

Dođite na vrh