2017-08-10 58 views
0

我需要在保存之前替換post_content內的代碼塊屏蔽。帖子內容是用markdown編寫的,推送到github然後是WordPress。WordPress的過濾器:`content_save_pre`掛鉤未能用`preg_replace`函數替換內容

我需要在保存到Wordpress之前將降價擊劍```js <some code> ```替換爲:[js] <some code> [/js]

查看我的工作報告:https://repl.it/KDz2/1我的功能在Wordpress之外完美無缺。

Wordpress正在調用該函數,但由於某種原因,替換失敗。我知道這一點,因爲我可以得到一個簡單的str_replace在Wordpress中正常工作。

問題;

preg_replace無法在Wordpress過濾器中返回替換的內容。沒有錯誤拋出。爲什麼這是失敗的?


作爲參考,我functions.php文件包括:

add_filter('content_save_pre', 'markdown_code_highlight_fence'); 
function markdown_code_highlight_fence($content) { 
    $newContent = preg_replace('/^ *(`{3,}|~{3,}) *(\S+)? *\n([\s\S]+?)\s*\1 *(?:\n+|$)/m', ' 
     [${2}] 
     $3 
     [\\\${2}] 
    ', $content); 

    return $newContent; 
} 

也試過這個

function markdown_code_highlight_fence($content) { 
    $newContent = preg_replace_callback('/^ *(`{3,}|~{3,}) *(\S+)? *\n([\s\S]+?)\s*\1 *(?:\n+|$)/m', function($match){ 
    $lang = $match[2] == '' ? 'js' : $match[2]; 
    return ' 
     ['.$lang.']' 
     .' '. 
     $match[3] 
     .' '. 
     '[\\'.$lang.']'; }, $content); 

    return $newContent; 
} 

回答

0

不知道爲什麼preg_replace未能在WordPress的工作。如果有人能幫助解決一些問題,請做。

在此期間,我有一個工作的解決方案如下:

add_filter('content_save_pre', 'markdown_code_highlight_fence_replace', 1, 1); 
function markdown_code_highlight_fence_replace($content) { 
    preg_match_all('/`{3,}(\S+)?/', $content, $matches); 

    foreach ($matches[1] as $key=>$match) { 
    if($match === '') continue; 
    $content = preg_replace('/`{3,}/', '[/'.$match.']', $content, 2); 
    $content = str_replace('[/'.$match.']'.$match, '['.$match.']', $content); 
    } 

    return $content; 
}