我需要在保存之前替换post_content中的代码块防护。帖子内容在本地写下来,推送到github,然后是Wordpress。
我需要将markdown fencing ```js <some code> ```
替换为:[js] <some code> [/js]
,然后再保存到Wordpress。
请参阅我的工作代表:https://repl.it/KDz2/1 我的功能在Wordpress之外完美运行。
Wordpress正在调用该函数,但由于某种原因,替换失败了。我知道这是因为我可以在Wordpress中使用一个简单的str_replace
来正常工作。
问题;
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 :(得分: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;
}