Directorio de artículos
- 1 ¿Por qué la sección de comentarios no admite códigos cortos?
- 2 ¿Cómo puedo habilitar la compatibilidad con códigos cortos para los comentarios?
- 3 Código para habilitar de forma segura los códigos cortos de la sección de comentarios.
- 4 最佳实践
- 5 Versión mejorada dinámicamente: Interfaz de configuración del backend (Búsqueda + Agrupación + Sugerencias del frontend)
- 6 总结
在 WordPress Participa en la sección de comentarios del artículo. [shortcode]Sin embargo, ¿el resultado solo muestra texto plano en lugar del efecto deseado? Este es, de hecho, el mecanismo predeterminado de WordPress. A continuación, analizaré sistemáticamente las razones y proporcionaré una solución completa.
¿Por qué la sección de comentarios no admite códigos cortos?
Restricciones predeterminadas
Por motivos de seguridad, WordPress no se ejecuta automáticamente en la sección de comentarios.do_shortcode()Esto impide que los usuarios inserten arbitrariamente formularios, scripts u otro contenido que pueda afectar la seguridad del sitio.Ámbito de aplicación limitado
La abreviatura está diseñada principalmente para su uso en el contenido del artículo (the_contentEsto incluye gadgets o complementos específicos, mientras que la sección de comentarios no es compatible de forma predeterminada.Interferencia de formato automático
El texto del comentario seráwpautopAgregar automáticamente<p>和<br>Las etiquetas pueden romper la estructura sintáctica de los códigos cortos, lo que los hace imposibles de analizar.

¿Cómo puedo habilitar la compatibilidad con códigos cortos para los comentarios?
Habilitar códigos cortos para comentarios
Sobre el temafunctions.phpAgregue el siguiente código a su archivo o complemento de fragmento de código:add_filter('comment_text', 'do_shortcode');Esto hará que la sección de comentarios utilice códigos cortos.
Comprueba si el plugin está activado.
Muchos códigos cortos provienen de plugins (como Contact Form 7 y WooCommerce). Si el plugin no está activado, los códigos cortos no funcionarán.Evite errores de sintaxis
Por favor, confirme que la abreviatura está escrita correctamente, por ejemplo:[shortcode attribute="value"]内容[/shortcode]Comprueba si hay conflictos con el tema o los plugins.
Cambia al tema predeterminado (como Twenty Twenty-Five), desactiva cada complemento uno por uno para probar y confirmar si hay algún conflicto que provoque un mal funcionamiento del código corto.Limpiar cache
Al usar complementos de almacenamiento en caché o CDN, es necesario borrar la caché después de la corrección para ver el efecto.
Código para habilitar de forma segura los códigos cortos de la sección de comentarios.
Para evitar riesgos de seguridad, es posible functions.php Añada el siguiente ejemplo completo:
<?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);
descripción del código
- Habilitar códigos cortosPrimera línea
add_filter('comment_text', 'do_shortcode');Habilita la compatibilidad con códigos cortos en la sección de comentarios. - Códigos cortos restringidos:aprobar
$allowed_shortcodesLas definiciones de matrices permiten abreviaturas, por ejemplogallery,audio,video,contact-form-7,su_posts. - Manejo seguroSi el usuario introduce un código corto que no se encuentra en la lista permitida, este se convertirá automáticamente a texto plano para evitar la ejecución de códigos cortos potencialmente peligrosos.
最佳实践
- Permitir únicamente los códigos cortos necesarios.Por ejemplo, en presentaciones multimedia o formularios, evite usar demasiados códigos cortos.
- Compruebe periódicamente si hay actualizaciones de los complementos.Asegúrese de que el plugin de código corto sea seguro y fiable.
- Combinación de complementos de almacenamiento en caché y protecciónPara evitar la presión sobre el rendimiento causada por la renderización de códigos cortos.
Versión mejorada dinámicamente: Interfaz de configuración del backend (Búsqueda + Agrupación + Sugerencias del frontend)
Si desea mayor flexibilidad, puede utilizar el siguiente código mejorado:
- Listar automáticamente todos los códigos cortos registrados.(Incluidos los proporcionados por complementos).
- Admite la introducción de códigos cortos personalizados.(Como
). - barra de búsqueda:rápidoPosicionamientoAbreviatura.
- Visualización agrupadaAgrupar por fuente de plugins lo hace más intuitivo.
- Permisos de rolSolo se analizarán los códigos cortos en los comentarios de los administradores; los códigos cortos en los comentarios de los usuarios normales mostrarán el mensaje "Este código corto solo está disponible para los administradores".
<?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);
总结
Por motivos de seguridad y rendimiento, las secciones de comentarios de WordPress no interpretan correctamente las abreviaturas. En su lugar, puede utilizar [la herramienta de análisis]. functions.php Añade un filtro para habilitar los códigos cortos y combínalo con la seguridad.
Esperanza Chen Weiliang Blog ( https://www.chenweiliang.com/ El artículo "Razones y soluciones para problemas de análisis de códigos cortos en la sección de comentarios de WordPress" que se comparte aquí puede resultarle útil.
Bienvenido a compartir el enlace de este artículo:https://www.chenweiliang.com/cwl-34132.html
