很难说没有看到所有的代码。
是的,如果您不引用该实例,那么它就不会是唯一的ID。类似这样的方法可以工作,您只需引用类属性$ID:
for ( $i = 0; $i <= count( $suffixes ); $i++) {
wp_editor( \'your content\', "{$this->id}_$i" );
}
文本小部件的js-in-core在处理实例化之前为编辑器实例创建一个随机ID,因此如果您想遵循以下步骤,可以将其转换为PHP:
$el = \'el\' . preg_replace( \'/\\D/\', \'\', ( rand()/getrandmax() ) ) . \'_\';
由于您是在本地开发的,所以您应该在wp配置中打开SCRIPT\\u DEBUG。php:define(\'SCRIPT\\u DEBUG\',true);帮助您解决javascript问题。这样做会使缩小文件的错误更有意义。该错误是由编辑器中的switchEditor方法引起的。最小js。定制器中的tinymce文本小部件有特殊的处理方式,它不仅仅像调用wp\\u编辑器那么简单,尽管它可能是可以做到的。您可以尝试启用wp\\u skip\\u init进程并添加您自己的初始化代码,可能是:
add_filter( \'wp_editor_settings\', \'ciseditor_wp_editor_settings\', 5, 2 );
function ciseditor_wp_editor_settings( $settings, $id ) {
// look for your prefixed id and return the id associated with it.
if ( $ed = strstr( $id, \'foo_widget\' ) ) {
$settings[\'tinymce\'] = array(
\'wp_skip_init\' => true,
\'wp_autoresize_on\' => false, // turn off the auto resize height of editor.
);
$settings[\'editor_height\'] = 300; // set the height
}
return $settings;
}
我很肯定这不是办法。我建议查看wp-admin/js/text小部件。js来了解core如何实现文本小部件和交换机编辑器功能,以及如何正确处理定制程序的数据。您还应该引用wp includes/widgets/class wp widget文本。php,因为您本质上是想制作已经存在的相同的东西。
通常,在tinymce中出现该错误意味着该实例没有被正确删除和添加回来,因此WordPress的switchEditor在此上下文中为您抛出错误是有道理的。文本小部件中有很多文档。js关于tinymce和动态DOM组件将如何交互的问题,必须加以说明,否则最终会出现问题。
一个快速的解决方案可能是为编辑器实例禁用quicktags,这可以在wp\\U editor\\U设置过滤器中完成,也可以在制作编辑器时将其传递到设置数组中,即:
wp_editor( \'your content\', "{$this->id}_$i", array( \'quicktags\' => false ) );
我曾经在wordpress中动态地在一个项目上创建了tinymce实例,我只记得查看了核心编辑器代码,看看它们包含了哪些参数和脚本来让一切正常工作,所以这也是一个选项。如果您这样做的话,大多数事情都会在php抽象到js的参数方面以1:1的比例进行转换。我认为对于添加媒体按钮,我最终创建了我自己的东西,但是有“media\\u按钮”这样的操作,所以你应该可以在需要显示的地方添加它。
还要考虑为什么在一个小部件中需要多个编辑器。另一种处理方法是在小部件本身中以手风琴样式删除实例,并在扩展手风琴时重建它们,以便一次只显示一个小部件。但我认为最终,在一个小部件中有一个编辑器适合大多数用例,并让最终用户能够灵活地将内容移动到最适合自己使用的地方。