Директориум за статии
- 1 Зошто делот за коментари не поддржува кратки кодови?
- 2 Како можам да овозможам поддршка за кратки кодови за коментари?
- 3 Код за безбедно овозможување на кратки кодови за делот за коментари
- 4 Најдобри практики
- 5 Динамички подобрена верзија: Интерфејс за поставки на Backend (Пребарување + Групирање + Совети за Frontend)
- 6 да сумираме
在 WordPress Внесете во делот за коментари на статијата [shortcode]Сепак, резултатот прикажува само обичен текст наместо посакуваниот ефект? Ова е всушност стандардниот механизам на WordPress. Подолу, систематски ќе ги анализирам причините и ќе обезбедам целосно решение.
Зошто делот за коментари не поддржува кратки кодови?
Стандардни ограничувања
Од безбедносни причини, WordPress не се стартува автоматски во делот за коментари.do_shortcode()Ова ги спречува корисниците произволно да вметнуваат формулари, скрипти или друга содржина што може да влијае на безбедноста на страницата.Ограничен опсег на примена
Кратенката е главно наменета за употреба во содржината на статијата (the_contentОва вклучува гаџети или специфични додатоци, додека делот за коментари не е поддржан по стандард.Автоматско пречки во форматирањето
Текстот на коментарот ќе бидеwpautopДодај автоматски<p>和<br>Ознаки, кои можат да ја нарушат синтаксичката структура на кратките кодови, правејќи ги непарсирачки.

Како можам да овозможам поддршка за кратки кодови за коментари?
Овозможи кратки кодови за коментари
На темата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
