فهرست مقاله
在 وردپرس در بخش نظرات مقاله وارد شوید [shortcode]با این حال، نتیجه فقط متن ساده را به جای جلوه مورد نظر نمایش میدهد؟ این در واقع مکانیسم پیشفرض وردپرس است. در ادامه، دلایل را به طور سیستماتیک تجزیه و تحلیل کرده و یک راه حل کامل ارائه خواهم داد.
چرا بخش نظرات از شورت کد پشتیبانی نمیکند؟
محدودیتهای پیشفرض
به دلایل امنیتی، وردپرس به طور خودکار در بخش نظرات اجرا نمیشود.do_shortcode()این امر مانع از آن میشود که کاربران خودسرانه فرمها، اسکریپتها یا سایر محتوایی را که ممکن است بر امنیت سایت تأثیر بگذارد، وارد کنند.دامنه کاربرد محدود
این مخفف عمدتاً برای استفاده در محتوای مقاله طراحی شده است (the_contentاین شامل ابزارها یا افزونههای خاص میشود، در حالی که بخش نظرات به طور پیشفرض پشتیبانی نمیشود.تداخل قالببندی خودکار
متن نظر به این صورت خواهد بودwpautopاضافه کردن به صورت خودکار<p>和<br>برچسبها، که ممکن است ساختار نحوی کدهای کوتاه را بشکنند و آنها را غیرقابل تجزیه کنند.

چطور میتوانم پشتیبانی از شورتکد را برای نظرات فعال کنم؟
فعال کردن شورت کدهای نظرات
در مورد موضوعfunctions.phpکد زیر را به فایل یا افزونه قطعه کد خود اضافه کنید:add_filter('comment_text', 'do_shortcode');این باعث میشود که بخش نظرات از کدهای کوتاه استفاده کند.
بررسی کنید که آیا افزونه فعال شده است یا خیر.
بسیاری از شورت کدها از افزونهها میآیند (مانند فرم تماس ۷ و ووکامرس). اگر افزونه فعال نباشد، شورت کدها کار نخواهند کرد.از خطاهای نحوی اجتناب کنید
لطفاً تأیید کنید که مخفف به درستی نوشته شده است، برای مثال:[shortcode attribute="value"]内容[/shortcode]بررسی تداخل قالب یا افزونه
به قالب پیشفرض (مانند Twenty Twenty-Five) بروید، تک تک افزونهها را غیرفعال کنید تا بررسی کنید که آیا تداخلی وجود دارد که باعث اختلال در عملکرد شورتکد شود یا خیر.پاک کردن حافظه پنهان
هنگام استفاده از افزونههای ذخیرهسازی یا CDNها، برای مشاهدهی تأثیر، باید پس از رفع مشکل، حافظهی پنهان (cache) را پاک کنید.
کدی برای فعال کردن ایمن شورت کدهای بخش نظرات
برای جلوگیری از خطرات امنیتی، میتوان 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. - رسیدگی ایمنیاگر کاربر کد کوتاهی وارد کند که در لیست مجاز نباشد، کد به طور خودکار به متن ساده تبدیل میشود تا از اجرای کدهای کوتاه بالقوه خطرناک جلوگیری شود.
چینی
- فقط کدهای کوتاه ضروری را مجاز کنیدبرای مثال، در ارائههای رسانهای یا فرمها، از استفاده از کدهای کوتاه زیاد خودداری کنید.
- مرتباً بهروزرسانیهای افزونه را بررسی کنیدمطمئن شوید که افزونه منبع کد کوتاه ایمن و قابل اعتماد است.
- ترکیب افزونههای ذخیرهسازی و محافظتبرای جلوگیری از فشار عملکرد ناشی از رندرینگ کد کوتاه.
نسخه بهبود یافته پویا: رابط تنظیمات بخش مدیریت (جستجو + گروهبندی + نکات بخش مدیریت)
اگر میخواهید انعطافپذیری بیشتری داشته باشید، میتوانید از کد پیشرفته زیر استفاده کنید:
- لیست کردن خودکار تمام شورت کدهای ثبت شده(از جمله مواردی که توسط افزونهها ارائه میشوند).
- پشتیبانی از وارد کردن کدهای کوتاه سفارشی(پسندیدن
). - کادر جستجو:سریعموقعیت یابیمخفف
- نمایش گروهیگروهبندی بر اساس منبع افزونه، آن را شهودیتر میکند.
- مجوزهای نقشفقط کدهای کوتاه موجود در نظرات مدیران تجزیه و تحلیل میشوند؛ کدهای کوتاه موجود در نظرات کاربران عادی پیام «این کد کوتاه فقط برای مدیران در دسترس است» را نمایش میدهند.
<?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);
خلاصه
بخشهای نظرات وردپرس به دلایل امنیتی و عملکردی، به طور پیشفرض خلاصهنویسی را تجزیه نمیکنند. میتوانید به جای آن از [ابزار تجزیه] استفاده کنید. functions.php یک فیلتر برای فعال کردن کدهای کوتاه اضافه کنید و آن را با امنیت ترکیب کنید.
وبلاگ امید چن ویلیانگ ( https://www.chenweiliang.com/ مقاله «دلایل و راهحلهای مشکلات تجزیه شورتکد بخش نظرات وردپرس» که در اینجا به اشتراک گذاشته شده است، ممکن است برای شما مفید باشد.
به اشتراک گذاری لینک این مقاله خوش آمدید:https://www.chenweiliang.com/cwl-34132.html
