WP ACF 添加Markdown字段 并解析

已测试 2023-12-23 本文共2656个字,预计耗時7分钟 488次阅读
文章摘要:acf在word press中十分好用方便,在前文acf的插件使用也说明了其用法,几乎可以自定义增加任何你想要的字段功能,在做一个在线文档功能的时候,发现acf没有自带的markdown格式的字段,pro版本也没有呢。虽然官方没有自带,不过...

WP ACF 添加Markdown字段 并解析

acf在word press中十分好用方便,在前文acf的插件使用也说明了其用法,几乎可以自定义增加任何你想要的字段功能,在做一个在线文档功能的时候,发现acf没有自带的markdown格式的字段,pro版本也没有呢。虽然官方没有自带,不过基于这个插件的欢迎程度也有牛人做的外挂,这不最后在github上找到了解决办法,可以让acf插件直接新建markdown格式的文档,前端配合markdown解析的插件,即可实现在线文档功能。下面是详细过程:

下载安装扩展

在github找到扩展包,wp-acf-markdown,如果没有梯子的可以在本站下载,跟wp的插件安装方式一样,下载的文件解压后放入插件文件夹,然后进入网站后台启用

https://github.com/freshsystems/wp-acf-markdown-field

使用字段

启用后新建字段的时候就会在内容板块多一个Markdown选项了,选择这一个类型后面编辑器也是相应的可以支持Markdown格式的

编辑器样式

前端解析成DOM,并格式化高亮代码

这样就在网站后台实现编辑Markdown格式文档,前端显示markdown格式可以选择成型的框架,以及高亮代码显示都可以使用,本次使用的是marked.min.js和highlight.min.js,样式内容使用了,github-markdown.css和highlight.default.min.css,这些框架样式都可以有分享的,在页面里引入即可,文章后面也会打包后发出,然后就是使用了,HTML结构很简单,sidebar 用作存放后面生成的导航,content作为隐藏的获取后台的发布的文档,container用作存放最后生成的格式化的文档,也是展示的页面效果。

<div id="sidebar"></div>                    

<div class="markdown-content ">
 <!--内容主体-->
    <div id="container" class="markdown-body"></div>
    <textarea id="content" class="hidden"><?php echo $current_doc; ?></textarea>
</div>

下面就需要设置JavaScript,使用markdown的解析插件解析为DOM结构

document.addEventListener('DOMContentLoaded', function () {
        const container = document.getElementById('container');
        const content = document.getElementById('content');
        const sidebar = document.getElementById('sidebar');
        const markdownContent = content.innerHTML
    
        container.innerHTML = marked.parse(markdownContent, {
          highlight: function (code, lang) {
            if (lang && hljs.getLanguage(lang)) {
              try {
                return hljs.highlight(lang, code).value;
              } catch (__) {}
            }
            return ''; // 使用默认方式高亮显示
          }
        });
    
        // // Highlight.js配置
        document.querySelectorAll('pre code').forEach((block) => {
          hljs.highlightBlock(block);
        });
    
        // 解析Markdown内容
        let tokens = marked.lexer(markdownContent);
        console.log(tokens)
        // 构建导航HTML
        let navigationHtml = '<div class="nav-list-box">';
        let currentLevel = 0;
        
        tokens.forEach(function (token) {
            if (token.type === 'heading' && token.depth<=3) { // 只获取 h1 h2 h3
                let level = token.depth;
        
                // 根据标题层级调整导航层级
                while (level < currentLevel) {
                    navigationHtml += '</ul></li>';
                    currentLevel--;
                }
        
                while (level > currentLevel) {
                    
                    navigationHtml += '<ul class="nav-list nav-level-'+ currentLevel +'">';
                    currentLevel++;
                    
                    
                }
                // 添加导航项
                let text = token.text.trim();
                let anchor = text.replace(/\s+/g, '-').toLowerCase();
                navigationHtml += '<li class="level-'+currentLevel+'"><a href="#' + anchor + '" class="">' + text + '</a> <i></i>';
            }
        });
        
        // 关闭未关闭的导航层
        while (currentLevel > 0) {
            navigationHtml += '</li></ul>';
            currentLevel--;
        }
        navigationHtml += '</div>';
        
        // 将导航HTML添加到页面
        sidebar.innerHTML = navigationHtml;
        
        
        // 滚动到锚点位置
        document.querySelectorAll('a[href^="#"]').forEach(anchor => {
          anchor.addEventListener('click', function (e) {
            e.preventDefault();
    
            const targetId = this.getAttribute('href').substring(1);
            const targetElement = document.getElementById(targetId);
    
            if (targetElement) {
              window.scrollTo({
                top: targetElement.offsetTop,
                behavior: 'smooth'
              });
            }
          });
        });
      });

以上便是通过acf的扩展字段,支持markdown格式的教程,实现在线文档展示。

版权免责申明
① 本站源码模板等资源SVIP用户永久不限量免费下载
② 所有资源来源于网络收集,如有侵权,请联系站长进行删除处理。
③ 分享目的仅供大家学习和交流,请不要用于商业用途,否则后果自负。
④ 如果你有源码需要出售,可以联系管理详谈。
⑤ 本站提供的源码、模板、插件等等资源,都不包含技术服务请大家谅解。
⑥ 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需。
⑦ 在您的能力范围内,为了大环境的良性发展,请尽可能的选择正版资源。
⑧ 网站资源绝不做任何二次加密或添加后门(原版加密除外)
常见问题F&Q
需要积分的资源怎么下载?
您可以注册后签到等活跃动作获得积分,积分可下载,也可充值升级等级免费下载。
源码模板等文件安全吗?有没有后门病毒吗?
站内资源标有“已测试”标签的资源源码,表示已经在本地安装测试调试过才分享出来的,可以保证一定的安全;若不放心可以自行下载模板资源后使用D盾等查杀工具扫一遍确认安全。
本站网站模板等源码提供安装服务吗?
本站资源收集于网络并分享出来共同学习,不提供免费安装服务,模板源码安装等需要有一定熟悉度,小白用户可以下载资源后雇人安装调试。