问题描述
有没有办法为自定义帖子类型拥有多个所见即所得编辑器?例如,如果我有一个 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 Wiki 和 TinyMCE Tips & How To Forum,没有发现任何东西! 1 我发现的一切解释了如何使用 tinyMCE.init({...})
设置 theme
,width
,height
等,但显然您不能在使用 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。