有没有一种方法可以在自定义帖子类型中获取n个Wysiwyg编辑器的数量?
-
16-10-2019 - |
题
是否可以为自定义帖子类型提供多个Wysiwyg编辑器?例如,如果我有一个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
是meta盒将拥有的标题, 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和视觉编辑模式之间进行切换,以及正常帖子编辑器所具有的媒体插入命令。切换模式似乎定义为第一个参数是ID的函数,但是它似乎也编码为WP-Tinymce脚本。可以使用内置的Tinymce函数来做到这一点,但是这会改变完整的Tinymce和基本文本方面的文本方面,而无需任何WP HTML插入按钮。
其他提示
第一的: 非常感谢 至 @Thomas McDonald 为了 他的回答;我需要弄清楚与 @Paul Sheldrake 问,托马斯的代码使我朝着正确的方向开始。
不幸的是我被卡住了,因为 我需要从默认值更改布局 对于更简单,更小的布局,因为我需要在侧代泊斯中使用Tinymce。我看了 几乎 无处不在的解决方案,尤其是在moxiecode上 Tinymce Wiki 和 Tinymce提示和如何论坛 什么也没找到! 1 我发现的一切都解释了如何设置 theme
, width
, height
, 等等。使用 tinyMCE.init({...})
但是显然您在使用时无法使用它 tinyMCE.execCommand("mceAddControl")
.
当我遇到这篇文章时,我很难过 一页上的多个Tinymce 3实例 经过 汉密尔顿·库阿(Hamilton Chua), ,他钉了!他的解决方案是分配 tinyMCE.settings
打电话之前 tinyMCE.execCommand("mceAddControl")
, , 例如:
<?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:
(资源: mikeschinkel.com)
因此,如果您正在使用 @Thomas McDonald 上面的代码您发现您有必要修改布局,请务必查看Hamilton Chua的真棒文章 (谢谢火腿!):
PS 如果您做的甚至有些错误的事情,Tinymce可能根本不会显示。例如,我使用 theme: "simple"
起初,我一无所获,我花了一个多小时才意识到我只需要使用 theme: "advanced"
. 。因此,如果您发现Tinymce不起作用,请务必尝试更改周围的事情,您可能会遇到类似的问题。 (顺便说一句,我没有尝试过任何其他主题,也没有探索其他可用的内容;如果您找到其他工作的主题,请在下面发表评论。)
脚注
1: 非常沮丧!在使用WordPress答案的一个多月之后,我希望找到所有问题的答案,就像这里的质量水平相同,在其他地方,我通常会感到失望!
由于我发现这篇文章是Google的第一个结果,因此我只是想评论WP现在提供了处理此类任务的功能。
在 add_meta_box
功能,添加以下代码 - >
wp_editor( $content, $editor_id, $settings = array() );
无论您要添加蒂米斯编辑器的位置
参考: wp_editor
默认编辑器Tinymce由WP-ADMIN/include/post.php中的函数加载,称为wp_tiny_mce(); 看源 在第1350行。在第1478行中有一系列设置。其中一个选项显然指定了TextArea选择器以将JavaScript编辑器应用于。我在读书 这篇文章Keighl 在他的博客上,我指向了它。阅读文章,也许有一种方法可以在管理员部分插件中调用WP_TINY_MCE()并将其应用于您创建的第二个文本区域。
我只是通过将“ theeditor”作为类属性添加到文本方面而得到的:
<div style="background: #FFF; border: 1px solid #CCC;"><textarea id="my_details_field" name="my_details" class="theEditor" rows="20" style="width: 100%;"><?=get_post_meta($post->ID, 'my_details', TRUE)?></textarea></div>