სტატიების დირექტორია
- 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]შეამოწმეთ თემის ან დანამატის კონფლიქტები
გადადით ნაგულისხმევ თემაზე (მაგალითად, Twenty Twenty-Five), გამორთეთ თითოეული მოდული ერთმანეთის მიყოლებით, რათა შეამოწმოთ და დაადასტუროთ, არის თუ არა რაიმე კონფლიქტი, რომელიც იწვევს მოკლე კოდის გაუმართაობას.ქეშის გაწმენდა
ქეშირების დანამატების ან 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 დაამატეთ ფილტრი მოკლე კოდების ჩასართავად და მისი უსაფრთხოებასთან შესათავსებლად.
იმედი ჩენ ვეილიანგის ბლოგი ( https://www.chenweiliang.com/ შესაძლოა, აქ გაზიარებული სტატია „WordPress-ის კომენტარების სექციის მოკლე კოდის დამუშავების პრობლემების მიზეზები და გადაწყვეტილებები“ თქვენთვის სასარგებლო იყოს.
კეთილი იყოს თქვენი მობრძანება ამ სტატიის ბმულის გასაზიარებლად:https://www.chenweiliang.com/cwl-34132.html
