如何将GrapesJS集成到WordPress中(2026年完整指南)

给WordPress添加一个GrapesJS拖放编辑器:将其排在管理页面,通过REST API用nonce保存内容,然后用短代码渲染。

DevFuture Development
DevFuture Development
2026年4月23日2 个月前
阅读约 6 分钟10 次浏览

何时将GrapesJS与WordPress结合使用

GrapesJS 是一个独立的、获得麻省理工学院授权的编辑器——不是古腾堡版块。嵌入 在WordPress中,当你需要完全自定义、不依赖框架的拖放时 编辑器里有自己的存储和导出流程。本指南构建了一个小型 插件:托管编辑器的管理页面,保存内容的 REST 端点 用一个 nonce,还有一个在前端渲染的短代码。

1. 创建插件并排队 GrapesJS

wp-content/plugins/gjs-editor/gjs-editor.php中注册管理员 只在那个屏幕上排队GrapesJS。把 REST nonce 传递给脚本。

<?php
/* Plugin Name: GJS Editor */

add_action('admin_menu', function () {
    add_menu_page('GrapesJS', 'GrapesJS', 'edit_pages', 'gjs-editor', function () {
        echo '<div id="gjs"><h1>Edit me</h1></div>';
    });
});

add_action('admin_enqueue_scripts', function ($hook) {
    if ($hook !== 'toplevel_page_gjs-editor') {
        return;
    }
    wp_enqueue_style('grapesjs', 'https://unpkg.com/grapesjs/dist/css/grapes.min.css');
    wp_enqueue_script('grapesjs', 'https://unpkg.com/grapesjs', [], null, true);
    wp_enqueue_script('gjs-init', plugins_url('editor.js', __FILE__), ['grapesjs'], null, true);
    wp_localize_script('gjs-init', 'GJS', [
        'root'  => esc_url_raw(rest_url('gjs/v1/page')),
        'nonce' => wp_create_nonce('wp_rest'),
    ]);
});

2. 带远程存储初始化 GrapesJS

editor.js中,将存储管理器指向 REST 路由并发送 nonce 作为头部 X-WP-Nonce

const editor = grapesjs.init({
  container: '#gjs',
  height: '100vh',
  fromElement: true,
  storageManager: {
    type: 'remote',
    stepsBeforeSave: 3,
    options: {
      remote: {
        urlStore: GJS.root,
        urlLoad: GJS.root,
        headers: { 'X-WP-Nonce': GJS.nonce },
      },
    },
  },
});

3. 注册 REST 端点

将项目(以及渲染后的 html/css)存储为 update_option。A 如果你需要很多页面,自定义帖子类型也可以。

add_action('rest_api_init', function () {
    register_rest_route('gjs/v1', '/page', [
        [
            'methods'             => 'GET',
            'permission_callback' => '__return_true',
            'callback'            => function () {
                return get_option('gjs_project', []);
            },
        ],
        [
            'methods'             => 'POST',
            'permission_callback' => function () {
                return current_user_can('edit_pages');
            },
            'callback'            => function (WP_REST_Request $req) {
                $data = $req->get_json_params();
                update_option('gjs_project', $data);
                update_option('gjs_html', $data['gjs-html'] ?? '');
                update_option('gjs_css', $data['gjs-css'] ?? '');
                return ['status' => 'ok'];
            },
        ],
    ]);
});

头部 X-WP-Nonce 允许WordPress认证登录用户 用户,并 permission_callback 强制执行能力检查。

4. 在前端用短代码渲染

add_shortcode('gjs_page', function () {
    $css  = get_option('gjs_css', '');
    $html = get_option('gjs_html', '');
    return '<style>' . $css . '</style>' . $html;
});

随意进入 [gjs_page] 任何帖子或页面。对存储的标记进行净化处理 如果非管理员可以编辑,输出即可。

安全与性能提示

Abstract data and security visualization
只在需要时才让编辑器排队,并保护 REST 路由。

保持集成精简且安全。只在编辑器界面admin_enqueue_scripts(钩子检查)上排队 GrapesJS,绝不覆盖全站,这样前端保持快速。用调用current_user_can('edit_pages')的 REST 保存路由permission_callback锁定,并且始终发送X-WP-Nonce头部——nonce 会过期(~24小时),所以长时间会话时要刷新或重新发放 nonce。通过渲染短码输出wp_kses_post(),而不是直接回应。对于许多页面,将每个页面存储为自定义帖子类型,而不是选项,这样修订和功能是免费的。

前提条件

你需要 WordPress 6+ 和 PHP 7.4+。这个指南构建了一个很基础的小型插件 熟悉插件API(钩子、队列脚本、REST API、nonces, 以及能力)就足够了。无需构建步骤——GrapesJS是从CDN加载的 或者捆绑成资产。

向编辑器添加自定义方块

在以下 grapesjs.init情况下,用块管理器注册可拖拽的块:

editor.BlockManager.add('hero', {
  label: 'Hero section',
  category: 'Sections',
  content: '<section class="hero"><h1>Headline</h1><p>Copy</p></section>',
});

从GJS拉取现成的块库和预设。市场要买更丰富的套装。

以自定义帖子类型的存储页面

选项适用于单页,但自定义帖子类型能让你获得更多页面 免费提供修订和功能。注册并后期存储项目 然后再在之前展示的 REST 回调中读取它。保留这个项目, 将HTML和CSS一起渲染,这样页面重新打开时会完全按保存时的状态。

表演技巧

只在编辑器界面排队 GrapesJS(该 admin_enqueue_scripts 钩子检查),从不覆盖整个场地,这样前端才能保持快速。缓存短码 输出并存档时破灭。推迟编辑器脚本,这样它就不会阻挡管理员 UI。

安全考量

用调用的 REST 存档路由 permission_callback 锁定 current_user_can('edit_pages') 并且总是发送 X-WP-Nonce 头部 — nonce 过期(~24小时),请刷新或重新发布 长时间的治疗。通过以下方式渲染前端输出 wp_kses_post() 而不是像原始加价那样回应。

排查常见问题

403(rest_cookie_invalid_nonce) 表示无用词缺失,或 过期了。 未样式的画布 表示样式表没有被排队。 空白编辑器 意味着容器元素不在管理员上 侍从。如果保存无声失败,请确认当前能力检查是否通过 用户。

何时将GrapesJS与WordPress结合使用

GrapesJS 适合嵌入在你 拥有管理员或产品——当你需要自己的存储和HTML输出时,而不是 延伸古腾堡。如果你只需要在WordPress内部编辑内容,那就用它 块模型,古腾堡是本地选择;对于一个自有、可嵌入的页面 开发商GrapesJS更合适。

下一步

添加模块和插件以匹配你的主题。参见相关内容 GrapesJS + Laravel 指南, 比较 GrapesJS和 Builder.io 的编辑, 浏览 GrapesJS市场,或者从 GJS。市场主页

常见问题

我如何在WordPress中保存GrapesJS的内容?

注册一个REST路由,发送带有 X-WP-Nonce 首部的请求, 并用(或自定义帖子)存储项目/HTML/CSS update_option 类型)。

GrapesJS 能取代 WordPress 的块编辑器吗?

GrapesJS 是一个独立编辑器,你自己嵌入,而不是一个古腾堡模块。用它 当你需要一个完全自定义、不受框架限制的编辑器,拥有自己的存储和 出口而非推广古腾堡。

我该如何验证存档请求?

从via 传递nonce wp_create_nonce('wp_rest') wp_localize_script然后发送为 X-WP-Nonce 因此 REST permission_callback 成功。

更多标签:
发布于 2026年4月23日
更新于 2026年6月27日
🔌 GJS.Market

在寻找 GrapesJS 插件吗?

超过 100 款精选插件、预设与模板 —— 由社区精挑细选并持续维护。

分享本文TwitterFacebookLinkedIn
发布平台
DevFuture Development
DevFuture Development
访问店铺 →

更多来自 DevFuture Development

发现更多精彩文章,及时获取最新内容。

查看全部文章

来自 DevFuture Development 的付费插件

由该作者精心打造的精选付费插件。

访问店铺 →