Makale Rehberi
- 1 Yorum bölümü neden kısa kodları desteklemiyor?
- 2 Yorumlar için kısa kod desteğini nasıl etkinleştirebilirim?
- 3 Yorum bölümü kısayollarını güvenli bir şekilde etkinleştirmek için kod
- 4 En İyi Uygulamalar
- 5 Dinamik Olarak Geliştirilmiş Sürüm: Arka Uç Ayarları Arayüzü (Arama + Gruplandırma + Ön Uç İpuçları)
- 6 sonuç olarak
在 WordPress Makalenin yorum bölümüne yazın. [shortcode]Ancak sonuç, istenen etki yerine yalnızca düz metin mi gösteriyor? Bu aslında WordPress'ün varsayılan mekanizmasıdır. Aşağıda, nedenlerini sistematik olarak analiz edip eksiksiz bir çözüm sunacağım.
Yorum bölümü neden kısa kodları desteklemiyor?
Varsayılan kısıtlamalar
Güvenlik nedenleriyle, WordPress yorumlar bölümünde otomatik olarak çalışmaz.do_shortcode()Bu, kullanıcıların site güvenliğini etkileyebilecek formları, komut dosyalarını veya diğer içerikleri keyfi olarak eklemelerini engeller.Sınırlı uygulama kapsamı
Bu kısaltma esas olarak makale içeriğinde kullanılmak üzere tasarlanmıştır (the_contentBu, araçları veya belirli eklentileri içerir; yorum bölümü ise varsayılan olarak desteklenmez.Otomatik biçimlendirme müdahalesi
Yorum metni şu şekilde olacaktır:wpautopOtomatik olarak ekle<p>和<br>Etiketler, kısa kodların sözdizim yapısını bozarak ayrıştırılamaz hale getirebilir.

Yorumlar için kısa kod desteğini nasıl etkinleştirebilirim?
Yorum kısayollarını etkinleştirin
Konuyla ilgili olarakfunctions.phpAşağıdaki kodu dosyanıza veya kod parçacığı eklentinize ekleyin:add_filter('comment_text', 'do_shortcode');Bu, yorumlar bölümünün kısa kodlar kullanmasına neden olacaktır.
Eklentinin etkinleştirilmiş olup olmadığını kontrol edin.
Birçok kısa kod, eklentilerden (örneğin Contact Form 7 ve WooCommerce) gelir. Eklenti etkinleştirilmemişse, kısa kodlar çalışmaz.Sözdizimi hatalarından kaçının.
Lütfen kısaltmanın doğru yazıldığını onaylayın, örneğin:[shortcode attribute="value"]内容[/shortcode]Tema veya eklenti çakışmalarını kontrol edin.
Varsayılan temaya (örneğin Twenty Twenty-Five) geçin, her eklentiyi tek tek devre dışı bırakarak kısa kodun düzgün çalışmamasına neden olan herhangi bir çakışma olup olmadığını test edin ve doğrulayın.önbelleği temizle
Önbellekleme eklentileri veya CDN'ler kullanırken, düzeltmenin etkisini görebilmek için düzeltmeden sonra önbelleği temizlemeniz gerekir.
Yorum bölümü kısayollarını güvenli bir şekilde etkinleştirmek için kod
Güvenlik risklerinden kaçınmak için şunlar mümkündür: functions.php Aşağıdaki örneği eksiksiz olarak ekleyin:
<?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);
kod açıklaması
- Kısa kodları etkinleştirinİlk satır
add_filter('comment_text', 'do_shortcode');Yorumlar bölümünde kısa kod desteğini etkinleştirin. - Kısıtlı Kısa Kodlar:geçmek
$allowed_shortcodesDizi tanımları kısaltmalara izin verir, örneğingallery,audio,video,contact-form-7,su_posts. - Güvenli kullanımKullanıcı izin verilenler listesinde olmayan bir kısa kod girerse, potansiyel olarak tehlikeli kısa kodların yürütülmesini önlemek için kod otomatik olarak düz metne dönüştürülür.
En İyi Uygulamalar
- Yalnızca gerekli kısa kodlara izin verin.Örneğin, medya sunumlarında veya formlarda çok fazla kısaltma kodu kullanmaktan kaçının.
- Eklenti güncellemelerini düzenli olarak kontrol edin.Kısa kod kaynağı eklentisinin güvenli ve güvenilir olduğundan emin olun.
- Önbellekleme ve koruma eklentilerini birleştirmeKısa kod oluşturmanın neden olduğu performans baskısını önlemek için.
Dinamik Olarak Geliştirilmiş Sürüm: Arka Uç Ayarları Arayüzü (Arama + Gruplandırma + Ön Uç İpuçları)
Daha fazla esneklik istiyorsanız, aşağıdaki gelişmiş kodu kullanabilirsiniz:
- Kayıtlı tüm kısa kodları otomatik olarak listele.(Eklentiler tarafından sağlananlar da dahil).
- Özel kısa kodların girilmesini destekler.(beğenmek
). - arama çubuğu:hızlıKonumlandırmaKısaltma.
- Gruplandırılmış gösterimEklenti kaynağına göre gruplandırmak daha sezgisel hale getiriyor.
- Rol İzinleriYalnızca yönetici yorumlarındaki kısa kodlar ayrıştırılacaktır; normal kullanıcı yorumlarındaki kısa kodlar için "Bu kısa kod yalnızca yöneticiler tarafından kullanılabilir" mesajı görüntülenecektir.
<?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);
sonuç olarak
WordPress yorum bölümleri, güvenlik ve performans nedenleriyle varsayılan olarak kısaltılmış metinleri ayrıştırmaz. Bunun yerine [ayrıştırma aracını] kullanabilirsiniz. functions.php Kısa kodları etkinleştirmek için bir filtre ekleyin ve bunu güvenlikle birleştirin.
Umut Chen Weiliang Blogu ( https://www.chenweiliang.com/ Burada paylaşılan "WordPress Yorum Bölümü Kısa Kod Ayrıştırma Sorunlarının Nedenleri ve Çözümleri" başlıklı makale size yardımcı olabilir.
Bu makalenin bağlantısını paylaşmaya hoş geldiniz:https://www.chenweiliang.com/cwl-34132.html
