// 代码高亮与代码块保护(支持 [precode]、```围栏、
)
add_filter('the_content', 'boxmoe_escape_shortcodes_in_code_blocks', 5);
function boxmoe_escape_shortcodes_in_code_blocks($content){
    // 处理 ```...``` 围栏
    $content = preg_replace_callback('/```(.*?)```/s', function($m){
        return '```'.str_replace(array('[',']'), array('[',']'), $m[1]).'```';
    }, $content);

    // 处理 
...
$content = preg_replace_callback('/(]*>)(.*?)(<\/pre>)/is', function($m){ return $m[1].str_replace(array('[',']'), array('[',']'), $m[2]).$m[3]; }, $content); // 处理 ... $content = preg_replace_callback('/(]*>)(.*?)(<\/code>)/is', function($m){ return $m[1].str_replace(array('[',']'), array('[',']'), $m[2]).$m[3]; }, $content); // 处理 [precode] 内部内容 $content = preg_replace_callback('/\[precode(?:\s[^\]]*)?\](.*?)\[\/precode\]/is', function($m){ return '[precode]'.str_replace(array('[',']'), array('[',']'), $m[1]).'[/precode]'; }, $content); return $content; } add_filter('the_content', 'boxmoe_unescape_code_blocks_after_shortcode', 20); function boxmoe_unescape_code_blocks_after_shortcode($content){ // 只在
 内还原实体
    $content = preg_replace_callback('/(]*>)(.*?)(<\/pre>)/is', function($m){
        return $m[1].str_replace(array('[',']'), array('[',']'), $m[2]).$m[3];
    }, $content);

    $content = preg_replace_callback('/(]*>)(.*?)(<\/code>)/is', function($m){
        return $m[1].str_replace(array('[',']'), array('[',']'), $m[2]).$m[3];
    }, $content);

    // 处理 ```...``` 围栏还原
    $content = preg_replace_callback('/```(.*?)```/s', function($m){
        return '```'.str_replace(array('[',']'), array('[',']'), $m[1]).'```';
    }, $content);

    return $content;
}

add_shortcode('precode', 'precode_shortcode');
function precode_shortcode( $attr , $content = ' ') {
    // 把之前转义的实体还原,再做 HTML 转义输出,保证显示原始源码且不执行短代码
    $content = html_entity_decode($content, ENT_QUOTES, 'UTF-8');
    $out = '
'.esc_html($content).'
'; return $out; }