TinyMCE免费使用方案与自托管方法

根据你的描述,TinyMCE 7.x 版本已发布,但如果你希望继续免费使用且不涉及商业授权问题,以下是结合搜索结果的解决方案和注意事项:


1. 选择旧版本(推荐)

TinyMCE 提供了历史版本的下载入口,尤其是 4.9.x5.x 版本仍被广泛使用且功能稳定。

  • 下载方法:访问官网的 Self-Hosted 页面,点击页面中的 “Previous Releases“ 或 “Legacy Versions“ 链接(通常位于下载按钮附近),选择你需要的版本(如 4.9.11 或 5.10.6)[citation:1][citation:4]。
  • 优势:这些版本遵循 GPL2+ 开源协议,适合非商业项目或符合 GPL 要求的场景[citation:4]。

2. 自托管配置调整

以 5.x 版本为例(与你的现有代码兼容性更高):

  • 文件结构:下载后解压,确保目录包含 tinymce.min.js 及配套的 skinsthemespluginslangs 文件夹[citation:8]。
  • 引入方式:替换原有 CDN 链接为本地路径:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
      <script src="/your-project-path/tinymce/js/tinymce/tinymce.min.js"></script>
    ```
    - **初始化代码**:适配旧版本的配置(移除付费插件,简化工具栏):
    ```javascript
    tinymce.init({
    selector: '#content',
    height: 500,
    menubar: false,
    plugins: 'advlist autolink lists link image charmap preview code',
    toolbar: 'undo redo | bold italic | alignleft aligncenter alignright | bullist numlist',
    skin_url: '/your-project-path/tinymce/skins/ui/oxide', // 确保路径正确
    language: 'zh_CN', // 需单独下载语言包并放入 langs 目录[citation:2]
    });

3. 汉化与扩展功能

  • 语言包:从官网 Language Packages 下载 zh_CN.js,放入 tinymce/langs 目录[citation:2]。
  • 插件管理:若需高级功能(如 Word 粘贴),可使用社区提供的旧版插件(如 powerpaste),但需注意遵守开源协议[citation:3][citation:6]。

4. 注意事项

  • 许可证合规
    • GPL2+:适用于开源项目,若用于商业产品需谨慎评估协议条款[citation:4]。
    • 商业用途:若涉及盈利场景,建议购买企业授权或切换至其他免费编辑器(如 CKEditor 4)。
  • 安全维护:自托管需手动更新安全补丁,避免使用过旧版本(如低于 4.9.x)[citation:4]。

5. 备选方案

若需新版本功能但不愿付费,可考虑以下替代编辑器:

  • CKEditor 4:开源免费,支持基础富文本功能[citation:4]。
  • Summernote:轻量级,适合简单编辑场景[citation:4]。
  • Quill:模块化设计,高度可定制[citation:4]。

通过以上步骤,你可以继续免费使用 TinyMCE 的稳定旧版本。如需进一步优化(如图片上传),可参考网页中的 PHP 后端示例代码[citation:7]。

时间: 2025-03-08T00:22:07


👤 用户

我的所见即所得TinyMCE使用快到期了,可我不想付费,怎么继续使用tinymce,我的代码如下:
<?php
// 启用会话
session_start();

// 加载 WordPress 环境
require_once(‘../wp-load.php’);

// 引入 Parsedown 库(用于解析 Markdown)
require_once ‘Parsedown.php’;

// 检查是否提交了表单
if ($_SERVER[‘REQUEST_METHOD’] === ‘POST’ && isset($_POST[‘title’])) {
// 检查 nonce 和用户权限
if (!isset($_POST[‘markdown_publish_nonce’]) || !wp_verify_nonce($_POST[‘markdown_publish_nonce’], ‘markdown_publish_action’)) {
echo ‘

安全验证失败,请重试。
‘;
} elseif (!current_user_can(‘publish_posts’)) {
echo ‘
你没有权限发布文章。
‘;
} else {
// 获取表单数据
$title = sanitize_text_field($_POST[‘title’]);
$category = isset($_POST[‘category’]) ? intval($_POST[‘category’]) : 0; // 分类 ID
$tags = isset($_POST[‘tags’]) ? sanitize_text_field($_POST[‘tags’]) : ‘’; // 标签
$mode = isset($_POST[‘mode’]) ? sanitize_text_field($_POST[‘mode’]) : ‘wysiwyg’; // 发布模式

    // 根据发布模式处理内容
    if ($mode === 'wysiwyg') {
        $content = wp_kses_post($_POST['content']); // 所见即所得模式
    } elseif ($mode === 'markdown2html') {
        $markdown = $_POST['markdown'];
        $parsedown = new Parsedown();
        $content = $parsedown->text($markdown); // Markdown 转 HTML
    } elseif ($mode === 'markdown') {
        $content = $_POST['markdown']; // 直接发布 Markdown
    } else {
        echo '<div class="error">无效的发布模式。</div>';
        return;
    }

    // 发布文章
    $post_id = wp_insert_post([
        'post_title'   => $title,
        'post_content' => $content,
        'post_status'  => 'publish', // 直接发布
        'post_author'  => get_current_user_id(), // 当前用户为作者
        'post_category' => [$category], // 分配分类
    ]);

    if ($post_id) {
        // 分配标签
        if (!empty($tags)) {
            wp_set_post_tags($post_id, $tags);
        }
        // 存储成功提示信息到会话
        $_SESSION['success_message'] = '<div class="success">文章发布成功!<a href="' . get_permalink($post_id) . '">查看文章</a></div>';
        // 重定向到当前页面,避免表单重复提交
        header('Location: ' . $_SERVER['REQUEST_URI']);
        exit;
    } else {
        echo '<div class="error">文章发布失败,请重试。</div>';
    }
}

}

// 获取所有分类
$categories = get_categories([‘hide_empty’ => false]);
?>

文章发布工具