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

评论

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

相关问题:wordpress.stackexchange.com/questions/53/…

贝尔特(Bueltge)有一篇很好的文章,展示了如何完成该任务:wpengineer.com/1991/example-how-to-add-meta-boxes-to-edit-area

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

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

#1 楼

假设您的自定义帖子类型称为Properties,则可以使用类似于以下代码的框来添加框,以容纳其他的tinyMCE编辑器:
box将被应用到它,wysiwyg-editor-2是meta box的标题,Second Column是将打印出meta box的HTML的函数,second_column_box是我们的自定义帖子类型,properties是meta box的位置,并且normal指定应该在页面中尽可能高地显示它。 (通常在默认的tinyMCE编辑器下面)。

然后,以这作为最基本的示例,您必须将tinyMCE编辑器附加到文本区域。我们仍然必须定义我们的high函数,该函数将为meta框打印HTML,因此这与任何执行此操作的地方一样好:

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');


有一个我不确定如何克服几个问题。 tinyMCE编辑器将嵌套在一个metabox中,这可能不是理想的选择,并且它不具有在HTML和Visual编辑模式之间切换以及普通后期编辑器具有的媒体插入命令的功能。切换模式似乎被定义为第一个参数是ID的函数,但它似乎也已编码到wp-tinymce脚本中。可以使用内置的tinyMCE函数来执行此操作,但这会在完整的tinyMCE和基本文本区域之间更改文本区域,而无需任何WP HTML插入按钮。

评论


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

–mfields
2011-3-5在12:44

Thomas McDonalds解决方案在3.1中对我不起作用-3.1中有没有办法做到这一点?

–user4484
2011年4月6日14:52

#2 楼

首先:非常感谢@Thomas McDonald的回答;我需要弄清楚@Paul Sheldrake提出的相同问题,并且Thomas的代码使我朝着正确的方向开始。
不幸的是,我随后陷入困境,因为我需要将布局从默认更改为更简单,更小布局,因为我需要在侧面metabox中使用TinyMCE。我几乎到处都在寻找解决方案,尤其是在MoxieCode TinyMCE Wiki和TinyMCE技巧与方法论坛上,却一无所获! 1我发现的所有内容都说明了如何使用theme设置widthheighttinyMCE.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的精彩文章(感谢Ham!):

多个TinyMCE 3实例在一页上

PS如果您做某事甚至略有错误,TinyMCE可能根本不会显示。例如,在我的情况下,我首先使用theme: "simple",但一无所获,花了一个多小时才意识到我只需要使用theme: "advanced"。因此,如果您发现TinyMCE无法正常工作,请务必尝试进行更改,这可能是类似的问题。 (顺便说一句,我没有尝试过其他主题,也没有探索其他可用主题;如果您发现其他有用的主题,请在下面发表评论。)
脚注
1:非常令人沮丧!在使用WordPress答案一个多月之后,我现在希望能以与此处相同的质量水平找到我所有问题的答案,而在其他地方我通常会感到失望!

评论


迈克,您错过了$ script之后的等号,并且heredoc也没有结束。 EOT;。除了小错误,这是一个很好的工作示例。

– t31os
2010年11月13日在8:01

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

– MikeSchinkel
2010年11月13日在10:16

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

–mfields
2011-3-5 14:02

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

– MikeSchinkel
2011年3月5日15:06

希望引起您对本文的关注,因为它可能会澄清一些问题:dannyvankooten.com/450/…

– marfarma
2011年10月8日,0:05

#3 楼

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

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

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


要添加TinyMCE编辑器的地方

参考:wp_editor

评论


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

– kaiser
2014年10月12日20:50

#4 楼

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

#5 楼

我是通过将“ 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>