文章目录

  这是我刚接触Wordpress不久的第一次折腾,也算是对WP有了初步的一丢丢印象,和之前接触的其他MVC结构的系统不同,WP有点像是MC结构,初步上手修改问题有点无从下手。


发现问题

  最近开始用wordpress,插件功能给人感觉相当强大,强大到我都不知道该装些什么;既然博客是用来写作的,那编辑器一定是重中之重,这里我选择markdown编辑器,一阵疯狂装插件后,最终有两款我感觉不错,一个是WP Editor.MD,另一个是WP Githuber MD,二者在功能上体验几乎一致,好像Githuber MD功能上更强,不过我先接触到的WP Editor.md,主观上加分,但是WP Editor.MD有个问题,添加媒体,选中图片插入到编辑器中竟然报错,而且WP Editor.MD的作者已经停止维护这个插件了(虽然可以直接把图片拖进编辑器和直接复制到编辑器里上传),强迫症的我决定一定要修复这个问题。


  错误信息:wpActiveEditor is not defined

分析原因

  由于对WP系统不熟悉,错误也是很让人懵逼,换了WP Gitehuber.MD发现没问题,于是决定对比二者的差别,找出错误原因。分析WP Editor.md 和Githuber MD在编辑文章页的HTML源代码,发现一处编辑器qtInit变量初始化参数不同(至于为什么会发现是这里的问题也是靠经验和各种分析以及各种猜测)。

验证原因

  这里根据方法名tinyMCEPreInit定位到具体文件,根据以往经验觉得应该是在class-wp-editor.php里

  找到对应的函数,把GithuberMD里的参数复制进去后发现wpActiveEditor is not defined错误问题解决了,那确实是这里导致的问题,开始找参数丢失的原因

查找问题根源

  根据代码执行逻辑,猜测主要是这里的$this_quicktags的布尔值为false导致的,看变量名应该是自动标签类的功能~


  查找函数引用关系,发现最终定位在

//wordpress\wp-includes\class-wp-editor.php 第80行
$settings = apply_filters( 'wp_editor_settings', $settings, $editor_id );

  这里又去了解下wp的add _filters函数和apply_filters函数,这两个函数在WP的架构中好像有非常了不起的功能。查阅一番资料之后有了初步的认识,去查查看哪里有wp_editor_settings这个钩子,最后发现插件本身的控制器里有定义

//\wp-content\plugins\wp-editormd\src\Admin\Controller.php 第48行
add_filter( 'wp_editor_settings', array($this,'parse_editor_settings') );

修复问题

  根据定义在当前文件中查找parse_editor_settings,发现在82行有说明

  作者禁用了这个quicktags,导致了上面的错误,但根据作者的注释,既然是无用设置,那我设置为true也不会有什么问题吧~至少图片插不进来的问题解决了。。[滑稽]

  然后编辑器就能正常通过“插入媒体按钮-插入到文章”来添加图片了

总结

  Wordpress拥有强大的插件功能,但这也是最致命的地方,不同的插件很容易导致系统的兼容性问题,在折腾的过程中碰到了许多兼容问题,很多的调试修复都需要花费很大的耐心,但从整体上看Wordpress依旧是一个不错的系统,很多设计理念值得学习参考!


人活着一定要争口气,哪怕生为草绳,也要做绑螃蟹的那根。