问题描述

有没有办法为自定义帖子类型拥有多个所见即所得编辑器?例如,如果我有一个 2 列布局,我想要一个编辑器为一列,另一个编辑器为另一个。

最佳解决方案

说你的自定义帖子类型叫做 Properties,你可以添加这个框来保存你的附加的 tinyMCE 编辑器,使用类似这样的代码:

function register_meta_boxen() {
    add_meta_box("wysiwyg-editor-2", "Second Column", "second_column_box",
    "properties", "normal", "high");    
}
add_action('admin_menu', 'register_meta_boxen');

 wysiwyg-editor-2 是元框应用于它的 ID,Second Column 是元框的标题,second_column_box 是将打印出的元素的 HTML 的函数,properties 是我们的定制后期类型,normal 是元框的位置,high 指定它应该尽可能高地显示在页面中。 (通常在默认的 tinyMCE 编辑器下面) 。

然后,以此作为最基本的例子,您必须将 tinyMCE 编辑器附加到 textarea 。我们还需要定义我们的 second_column_box 函数,它将打印元框的 HTML,因此这是一个很好的一个地方:

function second_column_box() {
    echo <<<EOT
    <script type="text/javascript">
jQuery(document).ready(function() {
    jQuery("#tinymce").addClass("mceEditor");
    if ( typeof( tinyMCE ) == "object" &&
         typeof( tinyMCE.execCommand ) == "function" ) {
        tinyMCE.execCommand("mceAddControl", false, "tinymce");
    }
});
</script>
    <textarea id="tinymce" name="tinymce"></textarea>
EOT;
}

有几个问题,我不知道如何克服。 tinyMCE 编辑器将嵌套在一个 metabox 中,这可能不是理想的,它不具备在 HTML 和 Visual 编辑模式之间进行切换的能力,以及正常的后期编辑器具有的媒体插入命令。切换模式似乎定义为第一个参数是 ID 的功能,但它也似乎被编码为 wp-tinymce 脚本。可以使用内置的 tinyMCE 功能来实现,但这会改变完整的 tinyMCE 和基本文本区域之间的 textarea,而不需要任何 WP HTML 插入按钮。

次佳解决方案

第一:感谢 @Thomas McDonald 的回答; 我需要弄清楚 @Paul 谢尔德拉克问和托马斯的代码让我从正确的方向开始的同样的问题。

不幸的是,我被卡住了,因为我需要将布局从默认更改为更简单和更小的布局,因为我需要在一个侧面的 metabox 中使用 TinyMCE 。我几乎找到了解决方案,特别是在 MoxieCode TinyMCE WikiTinyMCE Tips & How To Forum,没有发现任何东西! 1 我发现的一切解释了如何使用 tinyMCE.init({...})设置 themewidthheight 等,但显然您不能在使用 tinyMCE.execCommand("mceAddControl")时使用。

当我在 Hamilton Chua 的一页上碰到文章多个 TinyMCE 3 实例时,我被困了,他钉住了!他的解决方案是在调用 tinyMCE.execCommand("mceAddControl")之前分配 tinyMCE.settings,例如:

<?php 
$id = "sidebar-content";
$script = <<<EOT
<script type="text/javascript">
jQuery(document).ready(function($) {
    $("#{$id}").addClass("mceEditor");
    if ( typeof( tinyMCE ) == "object" &&
         typeof( tinyMCE.execCommand ) == "function" ) {
      tinyMCE.settings = {
        theme : "advanced",
        mode : "none",
        language : "en",
        height:"200",
        width:"100%",
        theme_advanced_layout_manager : "SimpleLayout",
        theme_advanced_toolbar_location : "top",
        theme_advanced_toolbar_align : "left",
        theme_advanced_buttons1 : "bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull",
        theme_advanced_buttons2 : "",
        theme_advanced_buttons3 : ""
      };
      tinyMCE.execCommand("mceAddControl", true, "{$id}");
    }
});
</script>
<textarea id="sidebar-content" name="sidebar-content"></textarea>
EOT;

可悲的部分是真的不难,但是没有其他任何地方可以找到。发现几乎没有人经历过这个问题是惊人的。

所以无论如何,上面的代码生成了以下第二个 TinyMCE,正是我的客户端需要的格式/布局:

所以如果你使用 @Thomas 麦克唐纳代码,你会发现你有任何需要修改的布局,一定要检查汉密尔顿蔡司的真棒文章 (谢谢火腿!):

  • 一个页面上有多个 TinyMCE 3 实例

附:如果你做的事情甚至有点错误,TinyMCE 可能根本就不会显示出来。例如,在我的情况下,我首先使用 theme: "simple",没有什么,花了我一个多小时才意识到,我只需要使用 theme: "advanced"。所以如果你发现 TinyMCE 是不适合你一定要尝试改变的事情,你可能有类似的问题。 (BTW,我还没有尝试任何其他的主题,也没有探索还有什么可用的; 如果你发现其他主题工作,请在下面发表评论。)

Footnote

1:很沮丧!用 WordPress 回答一个多月以后,我现在希望找到我所有问题的答案与这里一样的质量水平,其他地方我通常会感到失望!

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。