一、WordPress简介如果你是Php开发的同学,或者对博客和CMS有一定了解的同学,你就会知道这个。以下是百度的解释:WordPress是一个个人博客系统,逐渐演变为一个内容管理系统软件,使用PHP语言和MySQL数据库开发,用户可以在支持PHP和MySQL数据库的服务器上使用自己的博客。WordPress有很多第三方开发的免费模板,安装方法简单易用。但是要制作自己的模板,需要具备一定的专业知识。例如,你至少要了解标准通用标记语言下的一个应用程序的HTML代码、CSS、PHP等相关知识。WordPress官方支持中文版,也有爱好者开发的第三方中文语言包,如wopus中文语言包。WordPress拥有数以千计的各种插件和无数的主题模板样式。[1]https://baike.baidu.com/item/...WordPress也支持插件,因为我目前正在设计一个插件系统,所以想分析一下它的插件设计思路。2、插件分析关于一个支持插件的系统应该具备的功能,在之前的文章中已经说明,有兴趣的同学可以查看:**Discuz插件设计**先看基本结构WordPress插件的使用:WordPress插件必须放在wp-content/plugins目录下,每个插件都是一个目录。在每个目录下,可以放readme.txt和LICENSE.txt等描述文件,然后有一个main文件。在上面官方的akismet插件中,主文件是akismet.PHP。1、关于WordPress的安装和卸载,这两个概念比较轻,用启用和禁用代替,因为默认插件是不启用的。反正执行机会只有一次,最后的效果也差不多,只要理念一致即可。register_activation_hook(__FILE__,array('Akismet','plugin_activation'));enable就是调用register_activation_hook函数,也就是注册一个hook;禁用就是调用register_deactivation_hook,原理同上。当然也可以注册卸载钩子:register_uninstall_hook2,插件描述信息,在主文件的描述中表示:/*PluginName:AkismetAnti-SpamPluginURI:https://akismet.com/Description:Usedby百万,Akismet很可能是世界上保护您的博客免受垃圾邮件攻击的最佳方式。即使在您睡觉时,它也能保护您的网站。开始:激活Akismet插件,然后转到您的Akismet设置页面以设置您的API密钥。版本:4.1.5作者:AutomatticAuthorURI:https://automattic.com/wordpress-plugins/License:GPLv2或更高版本文本域:akismet*/具体的意思这里就不解释了,总的来说实现起来还是比较简单的,这就需要审核插件的人或者系统自动审核了,不然就尴尬了。3、插件配置可以在后台添加菜单add_action('admin_menu','display_copyright_menu');当然也可以在系统已有的设置界面中设置,可以参考函数add_settings_field。4、注册api如果想注册自己的路由,给系统添加新的api接口,WordPress也支持add_rewrite_rule('post/([0-9a-zA-Z\-_,]+)/([0-9a-zA-Z\-_,]+)/page/?([0-9]{1,})/?$',5.多语言支持需要手动调用load_plugin_textdomain('your-unique-name',false,basename(dirname(__FILE__).'/languages');6.自定义系统行为系统定义了很多动作和过滤器,如果你对其中的一种感兴趣,可以注册你自己的回调。add_action('wp_insert_comment',array('Akismet','auto_check_update_meta'),10,2);add_filter('preprocess_comment',array('Akismet','auto_check_comment'),1);add_filter('rest_pre_insert_comment',array('Akismet','rest_auto_check_comment'),1);这里是action和filter的概念,这两个是wordpress中使用最多的hook,最终实现机制类似,都是先声明,然后在用在的地方code,最后插件可以为你感兴趣的action/filter注册相关的回调。下面说说两者在语义上的区别。action是实现一些额外的逻辑,而filter可能不会产生新的逻辑,只是在原来的content/result中这样说可能比较抽象,举个例子吧,如果我们实现一个站内插件message,希望发帖后给用户发站内消息,那么这个最好以action的形式实现;如果发帖后,我们想做XSS检测,最好以过滤器的形式实现。3、总体感觉总体而言,WordPress插件更加灵活,通过观察者模式,通过hook回调,让插件快速方便的聚焦到你感兴趣的扩展点上,从而实现无处不在的扩展。这就需要系统设计者从全局的角度考虑系统能扩展到什么程度。如果没有很好的规范和监管,很可能会被滥用,可能会造成安全问题。另外,也增加了开发者的维护成本,因为系统的扩展点很多,如果没有好的文档,只能自己搜索或者阅读源码。当然,这是权衡的考虑。灵活性和稳定性如何选择,需要根据情况来选择。另外,WordPress后台所有插件的代码都是可以编辑的,需要开放代码目录的写权限,容易导致安全问题。往期精选:Discuz插件设计OAuth2.0及Spring实现故障演练工具ChaosBlade介绍扩展Redis:添加Redis命令
