Raisons et solutions pour lesquelles les shortcodes de la section commentaires WordPress ne sont pas analysés

Dans WordPress Entrez votre avis dans la section commentaires de l'article. [shortcode]Cependant, le résultat affiche du texte brut au lieu de l'effet souhaité. Il s'agit en fait du comportement par défaut de WordPress. Ci-dessous, j'analyserai en détail les raisons de ce problème et proposerai une solution complète.

Pourquoi la section des commentaires ne prend-elle pas en charge les codes courts ?

  • Restrictions par défaut
    Pour des raisons de sécurité, WordPress ne s'exécute pas automatiquement dans la section des commentaires. do_shortcode()Cela empêche les utilisateurs d'insérer arbitrairement des formulaires, des scripts ou tout autre contenu susceptible d'affecter la sécurité du site.

  • Champ d'application limité
    L'abréviation est principalement conçue pour être utilisée dans le contenu des articles (the_contentCela inclut les gadgets ou les plugins spécifiques, tandis que la section des commentaires n'est pas prise en charge par défaut.

  • Interférence de formatage automatique
    Le texte du commentaire sera wpautop Ajouter automatiquement <p> et <br> Les balises, qui peuvent rompre la structure syntaxique des codes courts, les rendant illisibles.

Raisons et solutions pour lesquelles les shortcodes de la section commentaires WordPress ne sont pas analysés

Traitement...

Comment activer la prise en charge des codes courts pour les commentaires ?

  • Activer les codes courts de commentaires
    Sur le sujet functions.php Ajoutez le code suivant à votre fichier ou à votre plugin d'extrait de code :

    add_filter('comment_text', 'do_shortcode');
    

    Cela permettra d'utiliser des codes courts dans la section des commentaires.

  • Vérifiez si le plugin est activé.
    De nombreux codes courts proviennent d'extensions (comme Contact Form 7 et WooCommerce). Si l'extension n'est pas activée, les codes courts ne fonctionneront pas.

  • Évitez les erreurs de syntaxe
    Veuillez confirmer que l'abréviation est correctement écrite, par exemple :

    [shortcode attribute="value"]内容[/shortcode]
    
  • Vérifiez les conflits de thème ou de plugin
    Passez au thème par défaut (tel que Twenty Twenty-Five), désactivez chaque plugin un par un pour tester et confirmer s'il existe des conflits qui provoquent un dysfonctionnement du shortcode.

  • vider le cache
    Lorsque vous utilisez des plugins de mise en cache ou des CDN, vous devez vider le cache après la correction pour en constater l'effet.

Code permettant d'activer en toute sécurité les shortcodes de la section commentaires

Pour éviter les risques de sécurité, il est possible de functions.php Ajoutez l'exemple complet suivant :

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

description du code

  • Activer les codes courtsPremière ligne add_filter('comment_text', 'do_shortcode'); Activez la prise en charge des codes courts dans la section des commentaires.
  • codes courts restreints:passer $allowed_shortcodes Les définitions de tableaux autorisent les abréviations, par exemple gallery,audio,video,contact-form-7,su_posts.
  • Manipulation en toute sécuritéSi l'utilisateur saisit un code court qui ne figure pas dans la liste autorisée, ce code sera automatiquement converti en texte brut afin d'éviter l'exécution de codes courts potentiellement dangereux.

最佳实践

  • N'autoriser que les shortcodes nécessairesPar exemple, dans les présentations ou formulaires multimédias, évitez d'utiliser trop de codes courts.
  • Vérifiez régulièrement les mises à jour des plugins.Assurez-vous que le plugin de source de shortcode est sûr et fiable.
  • Combinaison de plugins de mise en cache et de protectionPour éviter la pression sur les performances causée par le rendu des codes courts.

Version dynamiquement améliorée : Interface des paramètres d’administration (Recherche + Regroupement + Conseils pour l’interface utilisateur)

Si vous souhaitez plus de flexibilité, vous pouvez utiliser le code amélioré suivant :

  • Lister automatiquement tous les codes courts enregistrés(Y compris celles fournies par les plugins).
  • Permet la saisie de codes courts personnalisés(Tel que ).
  • barre de recherche:rapidePositionnementAbréviation.
  • Affichage groupéLe regroupement par source de plugin rend l'utilisation plus intuitive.
  • 角色权限Seuls les codes courts figurant dans les commentaires des administrateurs seront analysés ; les codes courts figurant dans les commentaires des utilisateurs ordinaires afficheront le message « Ce code court est réservé aux administrateurs ».
<?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);

Résumé

Par défaut, les sections de commentaires WordPress n'interprètent pas les abréviations pour des raisons de sécurité et de performance. Vous pouvez utiliser [l'outil d'analyse] à la place. functions.php Ajoutez un filtre pour activer les codes courts et combinez-le avec la sécurité.

发表 评论

Votre adresse email ne sera pas publiée. 项 已 用 * 标注

Remonter en haut