Мақала анықтамалығы
- 1 Неліктен түсініктеме бөлімі қысқа кодтарды қолдамайды?
- 2 Түсініктемелер үшін қысқа кодты қолдауды қалай қосуға болады?
- 3 Түсініктеме бөлімінің қысқа кодтарын қауіпсіз түрде қосуға арналған код
- 4 最佳实践
- 5 Динамикалық түрде жақсартылған нұсқа: Backend параметрлерінің интерфейсі (Іздеу + Топтау + Алдыңғы панель кеңестері)
- 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 параметрлерінің интерфейсі (Іздеу + Топтау + Алдыңғы панель кеңестері)
Егер сізге көбірек икемділік қажет болса, келесі жақсартылған кодты пайдалануға болады:
- Барлық тіркелген қысқа кодтарды автоматты түрде тізімдеу(Плагиндер ұсынатындарды қоса алғанда).
- Арнайы қысқа кодтарды енгізуді қолдайды(如
)。 - іздеу өрісі:жылдамОрналасуҚысқарту.
- Топталған дисплейПлагин көзі бойынша топтастыру оны интуитивті етеді.
- Рөл рұқсаттарыТек әкімші түсініктемелеріндегі қысқа кодтар талданады; кәдімгі пайдаланушы түсініктемелеріндегі қысқа кодтар «Бұл қысқа код тек әкімшілерге қолжетімді» деген хабарламаны көрсетеді.
<?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
