ລາຍການຫົວເລື່ອງ
在 WordPress ໃສ່ໃນສ່ວນຄຳເຫັນຂອງບົດຄວາມ [shortcode]ເຖິງຢ່າງໃດກໍ່ຕາມ, ຜົນໄດ້ຮັບສະແດງພຽງແຕ່ຂໍ້ຄວາມທຳມະດາແທນທີ່ຈະເປັນຜົນກະທົບທີ່ຕ້ອງການ? ນີ້ແມ່ນກົນໄກເລີ່ມຕົ້ນຂອງ WordPress. ຂ້າງລຸ່ມນີ້, ຂ້ອຍຈະວິເຄາະເຫດຜົນຢ່າງເປັນລະບົບ ແລະ ໃຫ້ວິທີແກ້ໄຂທີ່ສົມບູນ.
ເປັນຫຍັງພາກສ່ວນຄຳເຫັນຈຶ່ງບໍ່ຮອງຮັບ shortcodes?
ຂໍ້ຈຳກັດເລີ່ມຕົ້ນ
ດ້ວຍເຫດຜົນດ້ານຄວາມປອດໄພ, WordPress ຈະບໍ່ເຮັດວຽກໂດຍອັດຕະໂນມັດໃນສ່ວນຄຳເຫັນ.do_shortcode()ສິ່ງນີ້ປ້ອງກັນບໍ່ໃຫ້ຜູ້ໃຊ້ໃສ່ແບບຟອມ, ສະຄຣິບ ຫຼື ເນື້ອຫາອື່ນໆທີ່ອາດຈະສົ່ງຜົນກະທົບຕໍ່ຄວາມປອດໄພຂອງເວັບໄຊທ໌ໄດ້ໂດຍບໍ່ໄດ້ຕັ້ງໃຈ.ຂອບເຂດການນຳໃຊ້ທີ່ຈຳກັດ
ຕົວຫຍໍ້ສ່ວນໃຫຍ່ແມ່ນຖືກອອກແບບມາເພື່ອໃຊ້ໃນເນື້ອໃນບົດຄວາມ (the_contentນີ້ລວມທັງແກດເຈັດ ຫຼື ປລັກອິນສະເພາະ, ໃນຂະນະທີ່ພາກສ່ວນຄຳເຫັນບໍ່ຮອງຮັບໂດຍຄ່າເລີ່ມຕົ້ນ.ການລົບກວນການຈັດຮູບແບບອັດຕະໂນມັດ
ຂໍ້ຄວາມຄຳເຫັນຈະເປັນwpautopເພີ່ມໂດຍອັດຕະໂນມັດ<p>和<br>ແທັກ, ເຊິ່ງອາດຈະທຳລາຍໂຄງສ້າງ syntax ຂອງ shortcodes, ເຮັດໃຫ້ພວກມັນບໍ່ສາມາດວິເຄາະໄດ້.

ຂ້ອຍຈະເປີດໃຊ້ການຮອງຮັບ shortcode ສຳລັບຄຳເຫັນໄດ້ແນວໃດ?
ເປີດໃຊ້ shortcodes ຄຳເຫັນ
ກ່ຽວກັບຫົວຂໍ້functions.phpເພີ່ມລະຫັດຕໍ່ໄປນີ້ໃສ່ໄຟລ໌ ຫຼື ປລັກອິນລະຫັດຂອງທ່ານ:add_filter('comment_text', 'do_shortcode');ນີ້ຈະເຮັດໃຫ້ພາກສ່ວນຄໍາເຫັນໃຊ້ shortcodes.
ກວດສອບວ່າ plugin ຖືກເປີດໃຊ້ງານແລ້ວ.
ລະຫັດສັ້ນຫຼາຍອັນມາຈາກປລັກອິນ (ເຊັ່ນ: Contact Form 7 ແລະ WooCommerce). ຖ້າປລັກອິນບໍ່ໄດ້ເປີດໃຊ້ງານ, ລະຫັດສັ້ນຈະບໍ່ເຮັດວຽກ.ຫຼີກລ່ຽງຂໍ້ຜິດພາດທາງໄວຍາກອນ
ກະລຸນາຢືນຢັນວ່າຕົວຫຍໍ້ຖືກຂຽນຢ່າງຖືກຕ້ອງ, ຕົວຢ່າງ:[shortcode attribute="value"]内容[/shortcode]ກວດສອບການຂັດແຍ້ງຂອງຮູບແບບ ຫຼື ປລັກອິນ
ປ່ຽນໄປໃຊ້ຮູບແບບເລີ່ມຕົ້ນ (ເຊັ່ນ Twenty Twenty-Five), ປິດການໃຊ້ງານແຕ່ລະ plugin ເທື່ອລະອັນເພື່ອທົດສອບ ແລະ ຢືນຢັນວ່າມີຂໍ້ຂັດແຍ່ງໃດໆທີ່ເຮັດໃຫ້ shortcode ເຮັດວຽກຜິດປົກກະຕິ.ລ້າງແຄດ
ເມື່ອໃຊ້ plugins caching ຫຼື CDNs, ທ່ານຈໍາເປັນຕ້ອງລຶບ cache ຫຼັງຈາກການແກ້ໄຂເພື່ອເບິ່ງຜົນກະທົບ.
ລະຫັດເພື່ອເປີດໃຊ້ shortcodes ພາກສ່ວນຄຳເຫັນຢ່າງປອດໄພ
ເພື່ອຫຼີກລ່ຽງຄວາມສ່ຽງດ້ານຄວາມປອດໄພ, ມັນເປັນໄປໄດ້ທີ່ຈະ 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);
ຄຳອະທິບາຍລະຫັດ
- ເປີດໃຊ້ shortcodesແຖວທຳອິດ
add_filter('comment_text', 'do_shortcode');ເປີດໃຊ້ການຮອງຮັບ shortcode ໃນສ່ວນຄຳເຫັນ. - ລະຫັດສັ້ນທີ່ຖືກຈຳກັດ:ຜ່ານ
$allowed_shortcodesຄຳນິຍາມຂອງອາເຣອະນຸຍາດໃຫ້ໃຊ້ຕົວຫຍໍ້ໄດ້, ຕົວຢ່າງgallery,audio,video,contact-form-7,su_posts. - ການຈັດການຄວາມປອດໄພຖ້າຜູ້ໃຊ້ໃສ່ shortcode ທີ່ບໍ່ຢູ່ໃນລາຍຊື່ທີ່ອະນຸຍາດ, ລະຫັດຈະຖືກ escaped ໂດຍອັດຕະໂນມັດເປັນຂໍ້ຄວາມທຳມະດາເພື່ອຫຼີກເວັ້ນການປະຕິບັດ shortcodes ທີ່ອາດເປັນອັນຕະລາຍ.
最佳实践
- ອະນຸຍາດສະເພາະ shortcodes ທີ່ຈຳເປັນເທົ່ານັ້ນຕົວຢ່າງ, ໃນການນຳສະເໜີສື່ ຫຼື ແບບຟອມຕ່າງໆ, ໃຫ້ຫຼີກລ່ຽງການໃຊ້ shortcodes ຫຼາຍເກີນໄປ.
- ກວດສອບການອັບເດດປລັກອິນເປັນປະຈຳໃຫ້ແນ່ໃຈວ່າ plugin ແຫຼ່ງຂໍ້ມູນ shortcode ແມ່ນປອດໄພແລະເຊື່ອຖືໄດ້.
- ການລວມ plugins caching ແລະ protectionເພື່ອຫຼີກເວັ້ນຄວາມກົດດັນດ້ານປະສິດທິພາບທີ່ເກີດຈາກການສະແດງຜົນ shortcode.
ລຸ້ນທີ່ໄດ້ຮັບການປັບປຸງແບບໄດນາມິກ: ອິນເຕີເຟດການຕັ້ງຄ່າ Backend (ຄົ້ນຫາ + ການຈັດກຸ່ມ + ຄຳແນະນຳ Frontend)
ຖ້າທ່ານຕ້ອງການຄວາມຍືດຫຍຸ່ນຫຼາຍຂຶ້ນ, ທ່ານສາມາດໃຊ້ລະຫັດທີ່ປັບປຸງຕໍ່ໄປນີ້:
- ລະບຸ shortcodes ທີ່ລົງທະບຽນທັງໝົດໂດຍອັດຕະໂນມັດ(ລວມທັງສິ່ງທີ່ສະໜອງໃຫ້ໂດຍ plugins).
- ຮອງຮັບການປ້ອນ shortcodes ທີ່ກຳນົດເອງ(ມັກ
。。 - ກ່ອງຄົ້ນຫາ:ໄວການຈັດຕໍາ ແໜ່ງຄຳຫຍໍ້.
- ການສະແດງຜົນທີ່ຈັດກຸ່ມແລ້ວການຈັດກຸ່ມຕາມແຫຼ່ງປລັກອິນເຮັດໃຫ້ມັນງ່າຍຂຶ້ນ.
- ການອະນຸຍາດບົດບາດມີພຽງລະຫັດສັ້ນໃນຄຳເຫັນຂອງຜູ້ເບິ່ງແຍງລະບົບເທົ່ານັ້ນທີ່ຈະຖືກວິເຄາະ; ລະຫັດສັ້ນໃນຄຳເຫັນຂອງຜູ້ໃຊ້ປົກກະຕິຈະສະແດງຂໍ້ຄວາມ "ລະຫັດສັ້ນນີ້ມີໃຫ້ສະເພາະຜູ້ເບິ່ງແຍງລະບົບເທົ່ານັ້ນ".
<?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 ຕື່ມຕົວກອງເພື່ອເປີດໃຊ້ shortcodes ແລະລວມມັນກັບຄວາມປອດໄພ.
ຫວັງ Chen Weiliang Blog ( https://www.chenweiliang.com/ ບົດຄວາມ "ເຫດຜົນ ແລະ ວິທີແກ້ໄຂສຳລັບບັນຫາການວິເຄາະລະຫັດສັ້ນຂອງພາກຄຳເຫັນ WordPress" ທີ່ແບ່ງປັນຢູ່ນີ້ອາດຈະເປັນປະໂຫຍດຕໍ່ທ່ານ.
ຍິນດີຕ້ອນຮັບແບ່ງປັນການເຊື່ອມຕໍ່ຂອງບົດຄວາມນີ້:https://www.chenweiliang.com/cwl-34132.html
