有没有一种方法可以在自定义帖子类型中获得N个所见即所得的编辑器?


27

是否可以为自定义帖子类型使用多个所见即所得的编辑器?例如,如果我有一个2列的布局,我想为一个列使用一个编辑器,而对另一列使用另一个编辑器。


您需要哪种所见即所得的配置?全面板包括 上传图片,全屏模式等?
hakre 2010年


Bueltge有一篇不错的文章,展示了如何完成该工作:wpengineer.com/1991/example-how-to-add-meta-boxes-to-edit-area
hakre 2010年

对于客户项目,我确实需要回答这个问题。感谢您的询问!
MikeSchinkel 2010年

MikeSchinkel-我是WordPress的新手;我在哪里放置您发布的代码?

Answers:


21

假设您的自定义帖子类型称为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是meta框将要应用到它的ID,是meta框将具有Second Column的标题,second_column_box是将打印出meta框的HTML的函数,properties是我们的自定义帖子类型,normal是meta框的位置,并high指定应在页面中尽可能高地显示它。(通常在默认的tinyMCE编辑器下面)。

然后,以这作为最基本的示例,您必须将tinyMCE编辑器附加到文本区域。我们仍然必须定义second_column_box函数,该函数将为meta框打印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和基本文本区域之间更改文本区域,而无需任何WP HTML插入按钮。


“ Meta_boxen”?太棒了!我以为我是唯一的一个。稍后将为您提供解决方案。
mfields 2011年

Thomas McDonalds解决方案在3.1中不适用于我-3.1中是否有办法做到这一点?

19

首先:非常感谢@Thomas麦当劳他的答案 ; 我需要弄清楚@Paul Sheldrake提出的相同问题,Thomas的代码使我朝着正确的方向开始。

不幸的是,然后我陷入了困境,因为我需要在侧边的metabox中使用TinyMCE,因此需要将布局从默认布局更改为更简单,更小的布局。我几乎到处都在寻找解决方案,尤其是在MoxieCode TinyMCE WikiTinyMCE技巧与方法论坛上,却一无所获!1一切我发现解释了如何设置themewidthheight等使用tinyMCE.init({...})但显然你不能使用,当您使用tinyMCE.execCommand("mceAddControl")

当我在汉密尔顿·蔡Hamilton Chua)的一页上浏览多个TinyMCE 3实例的文章时,我感到很沮丧,他把它钉了!他的解决方案是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:

WordPress 3.0管理员编辑器中的多个TinyMCE TextAreas
(来源:mikeschinkel.com

因此,如果您使用上面的@Thomas McDonald代码,则发现您有任何需要修改布局的内容,请务必查看Hamilton Chua的精彩文章(感谢Ham!)

PS:如果您做某事甚至略有错误,TinyMCE可能根本不会显示。例如,在我的情况下,我theme: "simple"起初使用时一无所获,我花了一个多小时才意识到我需要使用theme: "advanced"。因此,如果您发现TinyMCE无法正常工作,请务必尝试进行更改,这可能是类似的问题。(顺便说一句,我没有尝试过其他主题,也没有探索其他可用主题;如果您发现其他有用的主题,请在下面发表评论。)

脚注

1非常令人沮丧!在使用WordPress答案一个多月之后,我现在希望能以与此处相同的质量水平找到我所有问题的答案,而在其他地方,我通常会感到失望!


迈克,您错过了一场$script追平比赛,而且您的Heredoc也没有结束。EOT;。除了小错误,这是一个很好的工作示例。;)
t31os 2010年

@ t31os-感谢您告诉我。不知道我怎么想念那些。我通常会进行测试,然后从工作代码中复制答案。去搞清楚!
MikeSchinkel 2010年

使用此解决方案还会在3.1中为我设置普通的可视编辑器。
mfields 2011年

@mfields-Bummer认为3.1破坏了很多东西。:-(
MikeSchinkel 2011年

想提请你注意这篇文章,因为它可能会澄清一些事情:dannyvankooten.com/450/...
marfarma

2

由于我发现这篇文章是Google的第一篇成果,所以我只想评论一下WP现在提供了处理此类任务的功能。

add_meta_box函数内,添加以下代码->

wp_editor( $content, $editor_id, $settings = array() );

您想在哪里添加TinyMCE编辑器

参考: wp_editor


1
答案不应该只是简单的链接。他们实际上应该是一个答案,而不是某个人可能会找到答案的路线。请帮助防止链接腐烂,编辑您的答案,并提供必要的信息,以帮助OP和以后的访客解决他们的问题。
kaiser 2014年

0

默认编辑器tinymce由wp-admin / includes / post.php中的一个名为wp_tiny_mce()的函数加载。 在源代码的1350行中查找。在1478行有一组设置。其中一个选项显然指定了将textarea选择器应用于javascript编辑器。我正在阅读基斯(Keighl)在他的博客上发给我的帖子。阅读本文,也许有一种方法可以在管理部分插件中调用wp_tiny_mce()并将其应用于您创建的第二个文本区域。


0

我只是通过将“ theEditor”作为类属性添加到textarea来实现的:

<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>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.