在厚的箱子内添加WP_Editor



我想在正面的模态对话框(厚箱)中添加一个WP_EDITOR,但仅获取一个没有按钮的空编辑器。(WordPress 3.5和插件开发)

>

WP_editor通过AJAX调用附加...

页面似乎缺少一些重要的JavaScript。

是否可以以某种方式固定编辑脚本?

这是一个示例插件,可以暴露问题(将编辑链接添加到每个内容):

<?php
/*
Plugin Name: ThickboxEditor
*/
$thickboxeditor = new ThickboxEditor();
class ThickboxEditor{
    function __construct()
    {
        add_action( 'wp_print_styles', array( &$this, 'wp_print_styles' ) );
        add_action( 'init', array( &$this, 'init' ) );
        add_filter( 'the_content', array( &$this, 'the_content' ) );
        add_action( 'wp_ajax_thickboxeditor', array( &$this, 'editor' ) );
        add_action( 'wp_ajax_nopriv_thickboxeditor', array( &$this, 'editor' ) );
    }
    function the_content( $content ){
        $content .= '<a href="' . admin_url( 'admin-ajax.php' ) . '?action=thickboxeditor" class="thickbox" title="Add new note">EDIT THICKBOXEDITOR</a>';
        return $content;
    }
    function editor(){
        wp_editor( $this->postcontent, 'postcontent', array(
            'media_buttons' => false,
            'teeny' => false,
            'textarea_rows' => '7',
            'tinymce' => array( 'plugins' => 'inlinepopups, fullscreen, wordpress, wplink, wpdialogs' )
        ) );
        die(0);
    }
}
?>

update

感谢@danielauener一个解决方案是初始化McEaddcontrol。因此,这是相同插件的工作示例:

<?php
/*
Plugin Name: ThickboxEditor
*/
$thickboxeditor = new ThickboxEditor();
class ThickboxEditor{
    function __construct()
    {
        add_action( 'wp_print_styles', array( &$this, 'wp_print_styles' ) );
        add_action( 'init', array( &$this, 'init' ) );
        add_filter( 'the_content', array( &$this, 'the_content' ) );
        add_action( 'wp_ajax_thickboxeditor', array( &$this, 'editor' ) );
        add_action( 'wp_ajax_nopriv_thickboxeditor', array( &$this, 'editor' ) );
        add_action( 'wp_footer', array( &$this, 'wp_footer' ) );
    }
    function wp_footer(){
        echo '<!--';
        wp_editor( '', 'invisible_editor_for_initialization' );
        echo '-->';
    }
    function the_content( $content ){
        $content .= '<a href="' . admin_url( 'admin-ajax.php' ) . '?action=thickboxeditor" class="thickbox" title="Add new note">EDIT THICKBOXEDITOR</a>';
        return $content;
    }
    function editor(){
        wp_editor( '', 'postcontent', array(
            'media_buttons' => false,
            'teeny' => false,
            'textarea_rows' => '7',
            'tinymce' => array( 'plugins' => 'inlinepopups, fullscreen, wordpress, wplink, wpdialogs' )
        ) );
        ?>
        <script language="javascript">
            jQuery(document).ready(function(){
                tinymce.execCommand('mceAddControl',true,'postcontent');
            });
        </script>
        <?php
        die(0);
    }
}
?>

跳过丑陋的WP_editor初始化真的很不错: - )

有趣的是,厚箱没有提供任何回调。但是,正如我在Twitter上提到的那样,我会尝试一个$.ajaxSuccess调用来解决丑陋的JS注入。只需将以下内容添加到您的JavaScript文件之一:

(function($) {
    // gets called for every successful ajax call
    $(document).ajaxSuccess( function(evt, request, settings) {
        // make sure this call was from your thickbox
        if ($('#your-thickbox-selector').length > 0) {
            tinymce.execCommand('mceAddControl',true,'postcontent');
        }
    }); 
})( jQuery );

更新: ajaxSuccess方法必须分配给元素,更改代码

最新更新