Straipsnių katalogas
- 1 Kodėl komentarų skiltyje nepalaikomi trumpieji kodai?
- 2 Kaip įjungti trumpųjų kodų palaikymą komentarams?
- 3 Kodas, skirtas saugiai įjungti komentarų skilties trumpuosius kodus
- 4 Geriausia praktika
- 5 Dinamiškai patobulinta versija: vidinės dalies nustatymų sąsaja (paieška + grupavimas + vidinės dalies užuominos)
- 6 apibendrinti
在 WordPress Įrašykite komentarą straipsnio skiltyje [shortcode]Tačiau rezultatas rodo tik paprastą tekstą, o ne norimą efektą? Tai iš tikrųjų yra numatytasis „WordPress“ mechanizmas. Žemiau sistemingai analizuosiu priežastis ir pateiksiu išsamų sprendimą.
Kodėl komentarų skiltyje nepalaikomi trumpieji kodai?
Numatytieji apribojimai
Dėl saugumo priežasčių „WordPress“ komentarų skiltyje neveikia automatiškai.do_shortcode()Tai neleidžia vartotojams savavališkai įterpti formų, scenarijų ar kito turinio, kuris gali turėti įtakos svetainės saugumui.Ribota taikymo sritis
Santrumpa daugiausia skirta naudoti straipsnio turinyje (the_contentTai apima įtaisus ar konkrečius papildinius, o komentarų skiltis pagal numatytuosius nustatymus nepalaikoma.Automatinio formatavimo trukdžiai
Komentarų tekstas buswpautopPridėti automatiškai<p>Ir<br>Žymės, kurios gali pažeisti trumpųjų kodų sintaksės struktūrą, todėl juos neįmanoma analizuoti.

Kaip įjungti trumpųjų kodų palaikymą komentarams?
Įjungti komentarų trumpuosius kodus
Apie temąfunctions.phpĮ savo failą arba kodo fragmento papildinį įtraukite šį kodą:add_filter('comment_text', 'do_shortcode');Dėl to komentarų skiltyje bus naudojami trumpieji kodai.
Patikrinkite, ar įskiepis aktyvuotas.
Daugelis trumpųjų kodų yra iš įskiepių (pvz., „Contact Form 7“ ir „WooCommerce“). Jei įskiepis neįgalintas, trumpieji kodai neveiks.Venkite sintaksės klaidų
Prašome patikrinti, ar santrumpa parašyta teisingai, pavyzdžiui:[shortcode attribute="value"]内容[/shortcode]Patikrinkite, ar nėra temos ar įskiepio konfliktų
Perjunkite į numatytąją temą (pvz., „Twenty Twenty-Five“), po vieną išjunkite kiekvieną papildinį, kad patikrintumėte ir patvirtintumėte, ar nėra kokių nors konfliktų, dėl kurių trumpasis kodas neveikia tinkamai.Išvalyti talpyklą
Naudojant talpyklos papildinius arba CDN, po pataisymo reikia išvalyti talpyklą, kad pamatytumėte poveikį.
Kodas, skirtas saugiai įjungti komentarų skilties trumpuosius kodus
Siekiant išvengti saugumo rizikos, galima functions.php Pridėkite šį pilną pavyzdį:
<?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);
kodo aprašymas
- Įjungti trumpuosius kodusPirmoji eilutė
add_filter('comment_text', 'do_shortcode');Įjunkite trumpųjų kodų palaikymą komentarų skiltyje. - Apriboti trumpieji kodai:pass
$allowed_shortcodesMasyvų apibrėžimai leidžia naudoti santrumpas, pavyzdžiuigallery,audio,video,contact-form-7,su_posts. - Saugus tvarkymasJei vartotojas įveda trumpąjį kodą, kurio nėra leidžiamų sąraše, kodas bus automatiškai pakeistas į paprastą tekstą, kad būtų išvengta potencialiai pavojingų trumpųjų kodų vykdymo.
Geriausia praktika
- Leisti tik būtinus trumpuosius kodusPavyzdžiui, žiniasklaidos pristatymuose ar formose venkite naudoti per daug trumpųjų kodų.
- Reguliariai tikrinkite, ar nėra papildinių atnaujinimųĮsitikinkite, kad trumpojo kodo šaltinio įskiepis yra saugus ir patikimas.
- Talpyklos ir apsaugos papildinių derinimasSiekiant išvengti našumo spaudimo, kurį sukelia trumpųjų kodų vaizdavimas.
Dinamiškai patobulinta versija: vidinės dalies nustatymų sąsaja (paieška + grupavimas + vidinės dalies užuominos)
Jei norite daugiau lankstumo, galite naudoti šį patobulintą kodą:
- Automatiškai pateikti visų registruotų trumpųjų kodų sąrašą(Įskaitant tuos, kuriuos teikia papildiniai).
- Palaiko pasirinktinių trumpųjų kodų įvedimą(如
). - paieškos laukelis:greitaiPadėties nustatymasSantrumpa.
- Grupuotas rodymasGrupavimas pagal įskiepio šaltinį tampa intuityvesnis.
- Vaidmenų leidimaiBus analizuojami tik trumpieji kodai administratoriaus komentaruose; trumpieji kodai įprastų vartotojų komentaruose rodys pranešimą „Šis trumpasis kodas prieinamas tik administratoriams“.
<?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);
apibendrinti
Dėl saugumo ir našumo priežasčių „WordPress“ komentarų skyriai pagal numatytuosius nustatymus neanalizuoja sutrumpintų tekstų. Vietoj to galite naudoti [analizės įrankį]. functions.php Pridėkite filtrą, kad įgalintumėte trumpuosius kodus ir derinkite jį su saugumu.
Hope Chen Weiliang tinklaraštis ( https://www.chenweiliang.com/ Čia pateiktas straipsnis „WordPress komentarų skilties trumpųjų kodų analizavimo problemų priežastys ir sprendimai“ gali jums būti naudingas.
Kviečiame pasidalinti šio straipsnio nuoroda:https://www.chenweiliang.com/cwl-34132.html
