የዎርድፕረስ የአስተያየት ክፍል አቋራጮች ያልተተነተኑባቸው ምክንያቶች እና መፍትሄዎች

የዎርድፕረስ በጽሁፉ የአስተያየት ክፍል ውስጥ ያስገቡ [shortcode]ይሁን እንጂ፣ ውጤቱ የሚፈለገውን ውጤት ከማየት ይልቅ ተራ ጽሑፍን ብቻ ያሳያል? ይህ በእውነቱ የዎርድፕረስ ነባሪ ዘዴ ነው። ከዚህ በታች ምክንያቶቹን በስርዓት እመረምራለሁ እና የተሟላ መፍትሄ እሰጣለሁ።

የአስተያየት ክፍሉ ለምን አጭር ኮዶችን አይደግፍም?

  • ነባሪ ገደቦች
    ለደህንነት ሲባል፣ WordPress በአስተያየቶች ክፍል ውስጥ በራስ-ሰር አይሰራም። do_shortcode()ይህ ተጠቃሚዎች የጣቢያ ደህንነትን ሊነኩ የሚችሉ ቅጾችን፣ ስክሪፕቶችን ወይም ሌላ ይዘትን በዘፈቀደ እንዳያስገቡ ይከላከላል።

  • የተወሰነ የማመልከቻ ወሰን
    ምህጻረ ቃሉ በዋናነት በጽሑፍ ይዘት ውስጥ ጥቅም ላይ እንዲውል የተነደፈ ነው (the_contentይህ መግብሮችን ወይም የተወሰኑ ተሰኪዎችን ያካትታል፣ የአስተያየት ክፍሉ ግን በነባሪነት አይደገፍም።

  • ራስ-ሰር የቅርጸት ጣልቃገብነት
    የአስተያየት ጽሑፉ ይሆናል wpautop በራስ-ሰር ያክሉ <p><br> መለያዎች፣ የአጭር ኮዶችን የአገባብ አወቃቀር ሊሰብሩ እና ሊተነተኑ የማይችሉ ሊያደርጓቸው ይችላሉ።

የዎርድፕረስ የአስተያየት ክፍል አቋራጮች ያልተተነተኑባቸው ምክንያቶች እና መፍትሄዎች

በማስኬድ ላይ...

ለአስተያየቶች የአጭር ኮድ ድጋፍን እንዴት ማንቃት እችላለሁ?

  • የአስተያየት አጭር ኮዶችን ያንቁ
    በርዕሰ ጉዳዩ ላይ functions.php የሚከተለውን ኮድ ወደ ፋይልዎ ወይም የኮድ ቅንጣቢ ተሰኪዎ ያክሉ፦

    add_filter('comment_text', 'do_shortcode');
    

    ይህ የአስተያየቶች ክፍል አጭር ኮዶችን እንዲጠቀም ያደርገዋል።

  • ተሰኪው ገባሪ መሆኑን ያረጋግጡ።
    ብዙ አጭር ኮዶች ከፕለጊኖች (እንደ Contact Form 7 እና WooCommerce) የመጡ ናቸው። ተሰኪው ካልነቃ አጭር ኮዶቹ አይሰሩም።

  • የአገባብ ስህተቶችን ያስወግዱ
    እባክዎን ምህፃረ ቃሉ በትክክል መጻፉን ያረጋግጡ፣ ለምሳሌ፡

    [shortcode attribute="value"]内容[/shortcode]
    
  • የገጽታ ወይም የተሰኪ ግጭቶችን ይፈትሹ
    ወደ ነባሪው ገጽታ (እንደ ሃያ ሃያ አምስት ያሉ) ይቀይሩ፣ እያንዳንዱን ተሰኪ አንድ በአንድ ያሰናክሉ እና አጭር ኮዱ እንዲበላሽ የሚያደርጉ ግጭቶች መኖራቸውን ያረጋግጡ።

  • መሸጎጫ አጽዳ
    የመሸጎጫ ተሰኪዎችን ወይም 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.
  • የደህንነት አያያዝተጠቃሚው በተፈቀደው ዝርዝር ውስጥ የሌለ አጭር ኮድ ከገባ፣ አደገኛ ሊሆኑ የሚችሉ አጭር ኮዶችን ከመተግበር ለመቆጠብ ኮዱ በራስ-ሰር ወደ ተራ ጽሑፍ ይቀየራል።

ምርጥ ልምዶች

  • አስፈላጊ የሆኑ አጭር ኮዶችን ብቻ ፍቀድለምሳሌ፣ በሚዲያ አቀራረቦች ወይም ቅጾች ላይ፣ በጣም ብዙ አጭር ኮዶችን ከመጠቀም ይቆጠቡ።
  • የተሰኪ ዝማኔዎችን በመደበኛነት ያረጋግጡየአጭር ኮድ ምንጭ ተሰኪው ደህንነቱ የተጠበቀ እና አስተማማኝ መሆኑን ያረጋግጡ።
  • መሸጎጫ እና ጥበቃ ተሰኪዎችን በማጣመርበአጭር ኮድ አተረጓጎም ምክንያት የሚፈጠረውን የአፈጻጸም ጫና ለማስወገድ።

በተለዋዋጭ መልኩ የተሻሻለ ስሪት፡ የኋላ ክፍል ቅንብሮች በይነገጽ (ፍለጋ + ቡድን + የፊት ክፍል ፍንጮች)

የበለጠ ተለዋዋጭነት ከፈለጉ፣ የሚከተለውን የተሻሻለ ኮድ መጠቀም ይችላሉ፡

  • ሁሉንም የተመዘገቡ አቋራጮችን በራስ-ሰር ይዘርዝሩ(በፕለጊኖች የቀረቡትን ጨምሮ)።
  • ብጁ አቋራጮችን ማስገባት ይደግፋል(如) )。
  • የፍለጋ ሳጥን:ፈጣንአቀማመጥምህጻረ ቃል።
  • በቡድን የተደራጀ ማሳያበፕለጊን ምንጭ መመደብ የበለጠ ለመረዳት ቀላል ያደርገዋል።
  • የሚና ፈቃዶችበአስተዳዳሪ አስተያየቶች ውስጥ ያሉ አጫጭር ኮዶች ብቻ ይተነተናሉ፤ በመደበኛ የተጠቃሚ አስተያየቶች ውስጥ ያሉ አጫጭር ኮዶች "ይህ አጭር ኮድ ለአስተዳዳሪዎች ብቻ ነው የሚገኘው" የሚለውን መልእክት ያሳያሉ።
<?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 አጭር ኮዶችን ለማንቃት ማጣሪያ ያክሉ እና ከደህንነት ጋር ያጣምሩት።

ተስፋ Chen Weiliang ብሎግ ( https://www.chenweiliang.com/ እዚህ የተጋራው "የዎርድፕረስ አስተያየት ክፍል የአጭር ኮድ ትንተና ችግሮች ምክንያቶች እና መፍትሄዎች" ጽሑፍ ለእርስዎ ጠቃሚ ሊሆን ይችላል።

እንኳን በደህና መጡ የዚህን ጽሁፍ ማገናኛ ለማጋራት፡-https://www.chenweiliang.com/cwl-34132.html

ተጨማሪ ድብቅ ዘዴዎችን ለመክፈት የቴሌግራም ቻናላችንን እንኳን በደህና መጡ።

ከወደዳችሁት ሼር እና ላይክ አድርጉ! የእርስዎ ማጋራቶች እና መውደዶች የእኛ ቀጣይ ተነሳሽነት ናቸው!

 

评论ሺ评论评论评论 ፡፡

የኢሜል አድራሻዎ አይታተምም። 项 已 用 ፡፡ * 标注

ወደ ላይ ሸብልል