搬了家,上传好codecolorer,发现一旦启用,代码内容就全部消失了。那时候没去看其他文章的情况,以为是插件有问题。换了wp-code-highlight,还是一样的情况。这时怀疑是主题不兼容,遂换成自带的Twenty Sixteen,依旧。

文章内容消失

一头雾水,突然想起WP的debug模式,开启后马上就发现了问题所在。

开启WP_DEBUG的结果

PREG_REPLACE_EVAL自php5.5起废弃,详见模式修饰符。官方也给出了用preg_replace_callback替代preg_replace的例子,据此把插件改一下就行。

/* 旧方式
return preg_replace(
    "/<pre(.*?)>(.*?)<\/pre>/ise",
    "'<pre class="wp-code-highlight prettyprint$line_numbers">'.wch_stripslashes('$2').'</菜pre>'",
    $content
    );
*/
return preg_replace_callback(
    "/<pre(.*?)>(.*?)<\/pre>/is",
    function ($m) use ($line_numbers) {
        return '<pre class="wp-code-highlight prettyprint'.$line_numbers.'">'.wch_stripslashes($m[2]).'</菜pre>';
    },
    $content
    );
// 防wp-code-highlight转义,所以加了「菜」字

之前用的是codecolorer,这次才发现这插件太大了,相比较之下,wp-code-highlight可谓轻量。