在定制器中排队 tinymce 编辑器

enqueue tinymce editor in customizer

我很难尝试让微型 mce 编辑器在 wordpress 定制器中工作。

看起来只是从我的 WP_Customize_Control 扩展中调用 "wp_editor" 不会触发自定义程序中 TinyMCE 脚本的加载。

我试过像这里的答案一样手动加载它们:https://wordpress.stackexchange.com/questions/175307/tinymce-is-not-defined-when-not-using-wp-editor

也尝试过 wp_enqueue_script('tiny-mce') 但无济于事。

这是我的渲染方法,没什么特别的:

    public function render_content() {

        ?>
        <label>
            <span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span>
            <?php
            $settings = array(
                'media_buttons' => false,
                'quicktags' => false,
                'teeny' => true
            );

            wp_editor($this->value(), $this->id, $settings );
            ?>
        </label>
        <?php
    }

有什么正确的建议吗?

好的,找到一个解决方案,但在定制器中使用 wp_editor 意味着打开潘多拉魔盒。

在创建编辑器之前添加do_action('admin_print_footer_scripts');

do_action('admin_print_footer_scripts');
wp_editor($this->value(), $this->id, $settings );

将渲染 TinyMCE。但是,仍然存在的问题是:

  • 富文本框中的更新会保存到相应的文本区域,但是 wp.customize 正在监视以执行 postMessage 的 "changed" 或 "keyup" 等事件不会被触发丰富的编辑器,但仅在直接更改文本区域时。
  • 由于上述原因,"Save" 按钮将不会启用。
  • textarea 上 "changed" 和 "keyup" 事件的人为触发未被 wp.customize 捕获,因此不会调用预览区域中的更新回调
  • 一旦每几个自定义程序加载一次,tinymce 将不会完全呈现,可能是由于管理脚本的加载方式

因此,在深入研究这个主题之后,我意识到 wp_editor 尚未准备好可靠地用于帖子编辑以外的其他领域。

我成功了。请参阅我在 workdpress.stackexchange.

上的结论性代码示例的答案

p.s。我也求助于调用 do_action('admin_print_footer_scripts'),这显然是一个肮脏的 hack,因为它在定制程序页面上包含了一堆其他不必要的脚本,但它确实在等待更优雅的解决方案..