lisa主机lisa主机

WordPress免插件实现MarkDown语法支持

发布于:2018-07-28 更新于:2018-07-31 WordPress建站 19条评论

WordPress默认不支持MarkDown标记(不知道最新版实现没有),虽然提供了很多第三方MarkDown插件,但都无法达到满意的效果。xiaoz一直以来都是用HTML标签来写文章,虽然排版效果好,但是写起来真的很费劲,效率也不高,于是想到一个法子让WordPress更好的支持MarkDown语法,并且不需要安装额外的插件。

下载Parsedown

Parsedown可以将MarkDown内容解析为HTML,如果内容已经是HTML则不进行解析,有了Parsedown的支持,在发表WordPress文章的时候不仅兼容原来的文本模式(HTML)也可以使用MarkDown语法写作,两者互不冲突。

  1. 前往 https://github.com/erusev/parsedown/releases/ 下载最新版Parsedown
  2. 在主题目录下新建一个目录extend
  3. Parsedown.php放到extend目录

添加钩子

将下面的代码添加到主题目录的functions.php注册为WordPress钩子

//markdown解析
function wp_parsedown(){
    include_once(get_stylesheet_directory()."/extend/Parsedown.php");
    $Parsedown = new Parsedown();

    $content = get_the_content();
    $content = $Parsedown->text($content);
    if(is_single() || is_page()){
        echo $content;
    }
    else{
        $content = strip_tags($content);
        $content = mb_substr($content,0,180,'UTF-8');
        echo $content;
    }
}
add_action('the_content','wp_parsedown');

如果文章外链需要自动添加nofollow并且在新窗口打开,请使用下面的代码:

//markdown解析,添加nofollow
function wp_parsedown(){
    include_once(get_stylesheet_directory()."/extend/Parsedown.php");
    $Parsedown = new Parsedown();

    $content = get_the_content();
    $content = $Parsedown->text($content);
    if(is_single() || is_page()){
        preg_match_all('/href="(.*?)" rel="external nofollow" target="_blank"/',$content,$matches);
         if($matches){
          foreach($matches[1] as $val){
           if( strpos($val,home_url())===false ) $content=str_replace("href=\"$val\"", 

        "href=\"$val\" rel=\"external nofollow\" target = \"_blank\" ",$content);
          }
         }

        echo $content;
    }
    else{
        $content = strip_tags($content);
        $content = mb_substr($content,0,180,'UTF-8');
        echo $content;
    }
}
add_action('the_content','wp_parsedown');

注意上面的$content = mb_substr($content,0,180,'UTF-8');这一行,其中180代表首页文章摘要字数,请根据自身情况修改。

切换到文本模式

WordPress文本模式支持HTML写作,通过上面的步骤文本模式已经完美支持了MarkDown语法。

其它说明

此方法操作简单,无需安装额外的插件,完美兼容原来的文本模式。在写这篇文章的时候xiaoz已经在用Markdown写作,大家可以看看效果如何。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注


已有 19 条评论

  1. 华风夏韵

    添加了这些代码之后短代码还有一些插件(比如Smartideo,hermit-x)失效了

  2. 赴日内存卡

    为啥不生效呀

  3. l2share

    请教Z大,这个方式的话,如何自定义 Markdown 样式?

    1. xiaoz l2share

      CSS样式要自己写,这个方法只负责将Markdown渲染为html

  4. sonny

    问题是修改后主页以前的文章正常排版显示,而添加后变成了没有格式的字符堆积

    1. xiaoz sonny

      后面的文章用的MarkDown写作吗?如果没有样式可能需要重写编写CSS

      1. sonny xiaoz

        以前是默认编辑器的富文本格式

  5. 明月登楼

    很遗憾,在我的博客上竟然不生效!不解析 MarkDown 语法!无语了都!

    1. xiaoz 明月登楼

      那你用上没?

      1. 明月登楼 xiaoz

        呵呵,我正在研究代码准备试试!

  6. 明月登楼

    我现在感觉 WordPress 很有可能是无缘 MarkDown 了!

    1. xiaoz Ryan

      谢谢,已经修正。

  7. Kevin

    这个还行,今天一直在找WP和Markdown兼容的教程

    1. xiaoz Kevin

      之前试了很多插件兼容性都不太好,目前用这个方案感觉效果还不错。

      1. Kevin xiaoz

        Emm不过还是有点问题,在我的博客上会出现以前的文章排版混乱的现象