保存后小部件中的WP_EDITOR中断(没有按钮和可视选项卡中断)

时间:2016-05-19 作者:Aidan Waite

我的目标是让wp\\u编辑器在一个简单的小部件中工作,管理员可以使用这个小部件在管理选项页面上添加文本内容。

这里我们进入wp管理/小部件。php一切看起来都很好。enter image description here

当我们试图保存。。。哦,不。。。。。按钮消失,视觉选项卡不再工作enter image description here

当我查看HTML时,似乎在更新TinyMCE后,它决定不需要加载任何按钮。。。有什么想法吗?

编辑:以下是我编写的引发此错误的插件的源代码

add_action(\'widgets_init\', \'string_example_name_init\');

function string_example_name_init()
{
    register_widget(\'string_example_name\');
}

class string_example_name extends WP_Widget
{
    public function __construct()
    {
        $widget_details = array(
            \'classname\' => \'string_example_name\',
            \'description\' => \'String Example Name\'
        );

        parent::__construct(\'string_example_name\', \'String Example Name\', $widget_details);
    }

    public function form($instance)
    {
        $textcontent = \'\';
        if( !empty( $instance[\'textcontent\'] ) ) {
            $textcontent = $instance[\'textcontent\'];
        }

        ?>

        <div class="string-arena-gods" id="texxxt">
            <?php
            $rand    = rand( 0, 999 );
            $ed_id   = $this->get_field_id( \'wp_editor_\' . $rand );
            $ed_name = $this->get_field_name( \'wp_editor_\' . $rand );

            printf(
                \'<input type="hidden" id="%s" name="%s" value="%d" />\',
                $this->get_field_id( \'the_random_number\' ),
                $this->get_field_name( \'the_random_number\' ),
                $rand
            );


            $content   = \'Hello World!\';
            $editor_id = $ed_id;

            $settings = array(
                \'media_buttons\' => false,
                \'textarea_rows\' => 3,
                \'textarea_name\' => $ed_name,
                \'teeny\'         => true,
            );


            wp_editor( $content, $editor_id, $settings );
            ?>
        </div>

        <div class=\'mfc-text\'>

        </div>

        <?php

        echo $args[\'after_widget\'];
    }

    public function update( $new_instance, $old_instance ) {
        $rand = (int) $new_instance[\'the_random_number\'];
        $editor_content = $new_instance[ \'wp_editor_\' . $rand ];
        $new_instance[\'wp_editor_\' . $rand] = $editor_content;
        return $new_instance;
    }

    public function widget( $args, $instance ) {
        extract( $args );
        $textcontent = apply_filters( \'textcontent\', $instance[\'textcontent\'] );
        ?>

        <div class="string widget flex">
            <?php


            ?>
        </div>
        <?php
    }
}

2 个回复
SO网友:jake

单击“保存”后,打开控制台并记录所有错误。同时勾选“保留日志”,以便在更改页面时可以看到任何错误。也许你的主题与插件或wordpress冲突。

SO网友:User1905

我做了很多搜索,也解决了这些问题;

标准wdiget等级;

class tinyMCE_add_than_affter extends WP_Widget {
    public function __construct() {
         /*addscript*/       
        add_action(\'admin_enqueue_scripts\', array($this => \'add_tinymce_script_css_plugin\'));
        $widget_options = array(
            \'classname\' => \'tinymce_widget\',
            \'description\' => \'TinyMCE Editor\',
        );
        parent::__construct(\'\', \'Tiny MCE Editor\', $widget_options);
    }
     /*****Important******/
    function add_tinymce_script_css_plugin($hook) {
        if (\'widgets.php\' == $hook):

            $baseurl = includes_url(\'js/tinymce\');
            $cssurl = includes_url(\'css/\');
            $pluginurl = includes_url(\'js/tinymce/plugins/\');
            $widgettinymcejsurl = plugins_url();
            $pluginnames = [
                \'compat3x\',
                \'wordpress\',
                \'textcolor\',
                \'colorpicker\'
            ];
            global $tinymce_version;
            $version = \'ver=\' . $tinymce_version;
            $css = $cssurl . \'editor.css\';
            wp_register_script(\'tinymce_script_add\', "{$baseurl}/tinymce.min.js?$version", array(\'jquery\'), false, TRUE);
            wp_enqueue_script(\'tinymce_script_add\');
            foreach ($pluginnames as $name) {
                wp_register_script("tinymce_script_plugin_add_{$name}", "{$pluginurl}/{$name}/plugin.min.js?$version", array(\'jquery\'), false, TRUE);
                wp_enqueue_script("tinymce_script_plugin_add_{$name}");
            }
            wp_register_style(\'tinymce_css\', $css);
            wp_enqueue_style(\'tinymce_css\');
             /*my script for tinyMCE active*/
            wp_register_script(\'tinymce_widget_script_add\', "{$widgettinymcejsurl}/widget_form_tinymce.js", array(\'jquery\'), false, TRUE);
            wp_enqueue_script(\'tinymce_widget_script_add\');
        endif;
    }

    public function widget($args, $instance) {
        //some code
    }

    public function form($instance) {
        $rand = rand(0, 999);
        $ed_id = $this->get_field_id(\'tinymce_textarea\' . $rand);
        $ed_name = $this->get_field_name(\'tinymce_textarea\' . $rand);
        $rand_id=$this->get_field_id(\'rand\');
        $rand_name=$this->get_field_name(\'rand\');
        extract($instance,EXTR_SKIP);
        ?>
        <label for="<?php esc_attr_e($ed_id); ?>">
            <?php _e("TinyMCE editor"); ?>
        </label>
        <textarea name="<?php esc_attr_e($ed_name); ?>" id="<?php esc_attr_e($ed_id); ?>" cols="30" rows="10">
            <?php _e($tinymce_textarea); ?>
        </textarea>
        <input type="hidden" id="<?php esc_attr_e($rand_id); ?>" name="<?php esc_attr_e($rand_name); ?>" />
        <?php
    }

    public function update($newInstance, $oldInstance) {
        $rand=$newInstance[\'rand\'];
        $instance[\'tinymce_textarea\']=$newInstance[\'tinymce_textarea\'.$rand];
        return $instance;
    }

}
我们安排widget\\u form\\u tinymce。js公司

jQuery(function ($) {
var options={
        selector: \'textarea[id*=tinymce_textarea]\',
            height: 200,
            theme: \'modern\',
            plugins: ["textcolor colorpicker"],
            toolbar1: \'bold,italic,underline,bullist,numlist,link,unlink,forecolor,undo,redo,alignleft,aligncenter,alignright,alignjustify,styleselect,formatselect,fontselect,fontsizeselect,fullscreen,forecolor,backcolor,textcolorselect\'
        };
    tinyMCE.init(options);
    $(document).find(\'input[id*=savewidget]\').hover(function () {
        tinyMCE.triggerSave();
    });

    $(document).on(\'widget-updated\', function (event, $widget) {
        tinyMCE.remove();
        tinyMCE.init(options);
    });
}
祝你好运。