أسباب وحلول عدم تحليل رموز التعليقات المختصرة في ووردبريس

WordPress أدخل في قسم التعليقات على المقال [shortcode]لكن النتيجة لا تُظهر سوى نص عادي بدلاً من التأثير المطلوب؟ هذه هي آلية ووردبريس الافتراضية. سأقوم فيما يلي بتحليل الأسباب بشكل منهجي وتقديم حل شامل.

لماذا لا يدعم قسم التعليقات الرموز المختصرة؟

  • القيود الافتراضية
    لأسباب أمنية، لا يتم تشغيل ووردبريس تلقائيًا في قسم التعليقات. 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)، وقم بتعطيل كل مكون إضافي على حدة لاختبار وتأكيد ما إذا كانت هناك أي تعارضات تتسبب في تعطل الكود المختصر.

  • مسح ذاكرة التخزين المؤقت
    عند استخدام إضافات التخزين المؤقت أو شبكات توصيل المحتوى (CDNs)، ستحتاج إلى مسح ذاكرة التخزين المؤقت بعد الإصلاح لرؤية التأثير.

كود لتمكين الرموز المختصرة لقسم التعليقات بشكل آمن

ولتجنب المخاطر الأمنية، من الممكن 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 أضف فلترًا لتمكين الرموز المختصرة وقم بدمجه مع الأمان.

مدونة Hope Chen Weiliang ( https://www.chenweiliang.com/ قد تكون المقالة "أسباب وحلول مشاكل تحليل الرموز المختصرة في قسم التعليقات في ووردبريس" التي تمت مشاركتها هنا مفيدة لك.

مرحبا بكم في مشاركة رابط هذه المقالة:https://www.chenweiliang.com/cwl-34132.html

لاكتشاف المزيد من الحيل المخفية🔑، مرحبًا بك في الانضمام إلى قناتنا على Telegram!

مشاركة ومثل إذا كنت ترغب في ذلك! مشاركاتك وإعجاباتك هي حافزنا المستمر!

 

发表 评论

لن يتم نشر عنوان بريدك الإلكتروني. 必填 项 已 用 * 标注

انتقل إلى الأعلى