Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >WordPress插件设计

WordPress插件设计

作者头像
心平气和
发布于 2020-09-11 03:35:08
发布于 2020-09-11 03:35:08
90200
代码可运行
举报
运行总次数:0
代码可运行

一、WordPress介绍

如果是Php开发的同学,或者对博客和CMS有一定了解的同学都知道这个,以下是百度的解释:

WordPress是一款个人博客系统,并逐步演化成一款内容管理系统软件,它是使用PHP语言MySQL数据库开发的,用户可以在支持 PHP 和 MySQL数据库服务器上使用自己的博客。WordPress有许多第三方开发的免费模板,安装方式简单易用。不过要做一个自己的模板,则需要你有一定的专业知识。比如你至少要懂的标准通用标记语言下的一个应用HTML代码、CSS、PHP等相关知识。WordPress官方支持中文版,同时有爱好者开发的第三方中文语言包,如wopus中文语言包。WordPress拥有成千上万个各式插件和不计其数的主题模板样式。 [1] https://baike.baidu.com/item/WordPress/450615?fr=aladdin

WordPress也是支持插件的,因为最近在做插件系统的设计,所以想分析下它的插件设计思想。

二、插件分析

关于一个支持插件的系统应该具备哪些功能,前文已有说明,有兴趣的同学可以查看:Discuz插件设计

先看下WordPress插件的基本结构:

WordPress插件都要放在wp-content/plugins目录下,每个插件为一个目录,每个目录下可以放readme.txt和LICENSE.txt等说明文件,然后有一个主文件,在上面官方的 akismet 插件中,主文件就是 akismet.php。

1、关于安装和反安装

WordPress中这两个概念比较淡,取而代之的是启用和禁用,因为默认插件是不启用的,反正只有一次执行机会,最终效果差不多,只要概念上保持一致。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
register_activation_hook( __FILE__, array( 'Akismet', 'plugin_activation' ) );
register_deactivation_hook( __FILE__, array( 'Akismet', 'plugin_deactivation' ) );

启用是调用register_activation_hook函数,即注册钩子的方式实现;

禁用是调用register_deactivation_hook实现,原理同上。

当然也可以注册卸载的钩子:register_uninstall_hook

2、插件说明信息

这些通过在主文件的描述里表示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
*
Plugin Name: Akismet Anti-Spam
Plugin URI: https://akismet.com/
Description: Used by millions, Akismet is quite possibly the best way in the world to <strong>protect your blog from spam</strong>. It keeps your site protected even while you sleep. To get started: activate the Akismet plugin and then go to your Akismet Settings page to set up your API key.
Version: 4.1.5
Author: Automattic
Author URI: https://automattic.com/wordpress-plugins/
License: GPLv2 or later
Text Domain: akismet
*/

具体含义就不在这里说明了,总的来说实现还是比较简单的,这需要审核插件的人或者系统能自动审核出来,不然就尴尬了。

3、插件配置

可以在后台自己加菜单

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
add_action('admin_menu', 'display_copyright_menu');
add_options_page('Set Copyright', 'Copyright Menu', 'administrator','display_copyright', 'display_copyright_html_page');

function display_copyright_html_page(){
  //渲染页面逻辑
}

当然也可以在系统已经有设置界面里设置,可以参考函数 add_settings_field 。

4、注册api

想自己注册路由,在系统中添加新的api接口的话,WordPress也是支持的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
add_rewrite_rule('post/([0-9a-zA-Z\-_,]+)/([0-9a-zA-Z\-_,]+)/page/?([0-9]{1,})/?$',
   'index.php?tag=$matches[1]&category_name=$matches[2]&paged=$matches[3]',
   'top');

5、多语言支持

需要手动调用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
load_plugin_textdomain('your-unique-name', false, basename( dirname( __FILE__ ) ) . '/languages' );

6、定制系统行为

系统已经定义了许多action和filter,如果对其中的某个点比较感兴趣,可以注册自己的回调。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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的概念 ,这2个是WordPress中使用最多的钩子,最终实现机制差不多,都是先声明,然后在代码中使用的地方调用相关回调/钩子,最后插件可以针对自己感兴趣的action/filter注册相关的回调。

再来说下两者在语义上的区别,action是实现一些额外的逻辑,而filter可能不产生新逻辑,只是在原有内容/结果上做一些过滤。

这么说可能比较抽象,我们举一些例子,如果我们实现了一个站内信的插件,希望在发完帖子之后给用户发送一条站内信,那这个最好用action的方式实现;

如果发完帖子之后我们想做下XSS检查,那最好是以filter的方式实现。

三、整体感受

整体来说,WordPress的插件做的是比较灵活的,通过观察者模式,通过钩子回调的方式,让插件可以快速、简单的关注自己感兴趣的扩充点,做到处处可扩展。

这需要系统设计者从全局去考虑系统有多少可以扩充的点,如果没有好的规范和监管,很可能会滥用,也有可能带来安全问题。

另外也增加开发者的维护成本,因为系统多少扩充点,如果没有很好的文档,那只能自己去搜索或者看源代码了。

当然这是一个权衡的考虑,在灵活性和稳定性如何选择,需要自己根据条件去做选择。

另外WordPress后台所有插件的代码都是可以编辑的,这就要求对代码目录开放写权限,这个很容易带来安全问题。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员升级之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
WordPress插件开发,从入门到精通。
WordPress插件开发手册:https://developer.wordpress.org/plugins/
房东的狗丶
2023/02/17
1.2K0
WordPress插件开发,从入门到精通。
WordPress 主题和插件的加载运行机制、Hook钩子与重要函数
本文有助于你深度了解 WordPress 主题和插件的 PHP 加载顺序,学习 Hook(钩子)Action(动作钩子) Filters(过滤钩子)的概念,弄懂 WordPress 重要函数:do_action、add_action、apply_filters 和 add_filter。
Yangsh888
2022/03/28
1.5K0
WordPress插件开发教程一:创建、停用、删除插件
在wp-content/plugins创建一个文件夹,命名最好加前缀,WordPress官方现在应该收录了有五万多的插件,所以要起一个特殊的名称,防止插件和别人重名
沈唁
2019/05/21
9180
如何创建一个简单的 WordPress 插件
每个 WordPress 插件都有一个主文件,您可以手动创建或使用 Plugin Boilerplate 或 Pluginplate 等工具创建该主文件。为了节省时间,让我们使用 Pluginplate(它更直观,IMO)来生成主文件和一些您以后可能需要的额外文件和文件夹。然而,目前我们只需要主文件。
小颖club
2022/04/10
1.2K0
让你的WP跑得更快 - WordPress优化指南
WordPress作为最流行的开源博客系统,2019年市场份额已经达到了33.4%,市场占有率达到三分之一。同时也有很多小伙伴将WP作为自己的博客系统(而我并没有),那么如何让自己的博客跑得更快呢?这里有关于优化的一点点小心得,希望能对你有帮助。
会长君
2023/04/24
7100
wordpress 移除 wp-json 链接和 wp-embed.min.js 文件
最近魏艾斯博客为了升级到 https 也是费了点心思,这不检查 https 完整性的时候,提示站内有 http 连接,经过浏览器 F12 检查,发现是 wp-json 链接和 wp-embed.min.js 文件带来的 http,搜索一番之后这两样东西也没啥用处,就屏蔽掉吧,同时也可以增加网站打开速度。 禁用 REST API、移除 wp-json 链接的方法是把以下代码添加到主题 functions.php 文件中即可 add_filter(‘rest_enabled’, ‘_return_false’)
魏艾斯博客www.vpsss.net
2018/06/01
5.2K6
WordPress 博客去除 category 的几种方法
WordPress 默认路径自带 category 目录,如果不去除最后文章网址会多一个/category/,为了去掉这个无用的路径,我们可以采取插件和代码的方法。本来本文内容是网络上到处都有的,插件和代码多到烂大街的地步了,但是偏偏晚上就有群友问到wordpress 博客如何去除 category,老魏去魏艾斯博客搜索了一番也没找到,看来是应该在博客里面记录一下,留着以后用了。
魏艾斯博客www.vpsss.net
2018/08/22
1.7K0
WordPress 博客去除 category 的几种方法
至顶至底 (雷姆拉姆)WordPress插件
既《至顶至底 (雷姆拉姆)emlog插件》插件发布后,特此发布WordPress版本的插件。
泽泽社长
2023/04/17
1900
至顶至底 (雷姆拉姆)WordPress插件
WordPress二次开发之插件界面
上一篇文章介绍了WordPress后台的常用样式,这次给大家分享的是利用WordPress开发一个插件界面 效果图如下
切图仔
2022/09/14
6540
WordPress二次开发之插件界面
如何开发一个简单的WordPress 插件
WordPress 是一个强大的内容管理系统(CMS),其灵活性和可扩展性使得它成为全球最受欢迎的网站构建平台之一。WordPress 插件是扩展 WordPress 功能的主要方式,开发一个插件不仅可以满足特定需求,还可以为其他用户提供便利。本文将详细介绍 WordPress 插件开发的各个方面,包括插件的基本结构、开发流程、常用 API、最佳实践等,帮助开发者从零开始掌握 WordPress 插件开发。
flyskyocean
2024/11/12
6960
WordPress主题开发,从入门到精通。
相关文档:https://www.wpzhiku.com/document/wordpress-plugin-basics/
房东的狗丶
2023/02/17
11K0
WordPress二次开发之插件权限控制
以字体样式插件为例,我们在添加菜单时设置了参数 manage_options 表示有这个权限的角色才能创建该菜单,而这个权限只有管理员才有,只有管理员登录时才能看到该菜单 ,这是一种方式
切图仔
2022/09/14
6350
【译】WordPress 中的50个过滤器(3):第11-20个过滤器
本文为系列第三篇,原文:50 Filters of WordPress: Filters 11-20 原文地址 不多说,直接进入正题。 本系列文章翻译自tutsplus,原作者为Barış Ünver,翻译人:Jeff,转载请注明原始来源及翻译人,谢谢! 本文若有修正,不会更新于本页,只会更新到Github项目地址上。 在WordPress 中使用可翻译的数据 WordPress 的有一点强大之处就是几乎每一句语言都可以被翻译。如果你的网站语言是英语,你可能就没有这个需求;但其它语系的客户呢? gett
Jeff
2018/01/22
9280
TGM Plugin Activation:为WordPress 主题添加“插件推荐安装”功能
TGM Plugin Activation 是一个php库,通过TGM Plugin Activation 可以很方便的在你开发的主题上集成“插件推荐安装”功能(即是提醒用户安装某个插件以提升主题功能)。对于WordPress 开发者来说,Jeff 觉得是一个不错的功能。 TGM Plugin Activation简介 TGM Plugin Activation 是一个php库,它可以让你在你的WordPress 主题(或插件)上集成“推荐插件安装功能”,用户可以很容易地安装所需主题并且自动激活。只要你的插
Jeff
2018/01/19
1.5K0
TGM Plugin Activation:为WordPress 主题添加“插件推荐安装”功能
WordPress二次开发之以类的方式创建插件
为插件创建类主要是规范,避免与其他插件的方法重名,方便调用 定义插件类 以上一篇文章编写的插件为例 class my_change_font_style{ } 在构造方法调用HOOK function __construct(){ //创建菜单 add_action('admin_menu',array($this,'my_create_menu')); } 这里以字符串调用方法的方式与之前不同 array($this,'方法名称') 调用
切图仔
2022/09/14
4470
WordPress二次开发之以类的方式创建插件
wordpress在线用户统计插件
https://www.123pan.com/s/99w9-n4rRh?提取码:66ke
用户1287596
2024/10/05
1210
wordpress添加post_type自定义文章类型
  wordpress很强大,能当博客也能进行二次开发出很完善的内容管理系统满足企业运营需求,比如可以添加products产品模型、汽车模型等,如何实现呢?添加post_type自定义文章类型就可以了
ytkah
2019/11/18
1.6K0
wordpress添加post_type自定义文章类型
博客世界最受欢迎的30个插件
翻译于:TOP 30 Wordpress Plugins in Blogosphere,
Denis
2023/04/13
5580
如何构建智能反垃圾邮件的WordPress插件
在本文中,我们将为您展示如何构建一个利用机器学习来阻止垃圾邮件、成人邮件,甚至是负面评论的WordPress插件。该插件兼容WordPress 3.6v或更高版本,并且使用了Datumbox API 1.0v。尽管本文讨论了WordPress插件的开发,但我们应该注意到通过使用Datumbox API,可以非常方便地保护任何类型的在线社区免受垃圾邮件、攻击性或不适当的内容侵害。具体实现请继续往下阅读。
後來
2018/01/29
1.3K0
如何构建智能反垃圾邮件的WordPress插件
WordPress插件大全
Anonymous WordPress Plugin Updates – 防止 WordPress 将系统当前启用插件列表、博客地址和 WordPress 版本等信息发送出去。它是 WordPress 设置中理想的隐私探查工具。
星哥玩云
2022/08/13
2.2K0
相关推荐
WordPress插件开发,从入门到精通。
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验