2019独角兽企业重金招聘Python工程师标准>>>

先前说过WP所有的处理都在index.PHP里,单入口。而这里面又分成了两步。 一个是数据的准备,第二是模板的加载。那我们的插件调用是在哪里 呢??可以这么说,插件需要的数据是在第一步准备好的,插件的调用机制也是在第一步初始化的,并且一部分的接口调用也是在第一步做了。然后第二部主要是就 是在特定的地方调用接口的方法。

其实所谓的插件,说白了就是一堆函数,写插件的作者希望这一堆函数能在WP运行流程的一些地方插进去运 行。比如我们希望一个关键词过滤的东西,每遇 到“草泥马”你换成“***”。那就可以写一个插件,在每一次日志提交的时候,在入库之前让执行一个函数,让这个$content中的“草泥马”你换成 “***”。这就是插件。

那为什么我们不直接改源代码就行了呢,反正是开源的。这个问题,我觉得原因有两点。

1.开源没错,但是我为了一个小功能要看全部源代码,是不是有点。。。

2.你改了源代码你用,别人要用你再教他怎么怎么改。是不是有点。。。再如果对方不懂程序,OMG。

所以最好是写成一个东西,傻瓜都会用的那种。这时候插件就出现了。

可能你还会想,那我写一个执行脚本,让他在指定的文件指定的行添加一些代码,不也“插件”了吗。

没错,这样肯定也能成功。不过如果其它人也有其它的插件,大家都要改文件,那是不是可能出现冲突,不河蟹了是吧。

上面用插件的原因你了不了解都无所谓。下面要说的是插件的具体实现。

WP中用一种叫hook的机制实现了插件,hook:钩子是也。也就是在指定的地方放一些钩子,然后你可以把你的代码写成函数,挂在某些钩子上,当程序执行到钩子的时候,就把那上面的一串函数给执行了。

那这个挂的动作是什么时候发生的呢?是怎么发生的呢?

当 我们在执行上面说的wp-settiongs.php的时候,里面包含了我们每个插件的一个引导文件(就是一个PHP文件),在这个文件里调用了 一些方法,比如:add_action(“钩子”,”函数”)。比如apply_filter(“钩子”,”函数”)..当然还有相应的删除,修改什么的 一系列函数。你可以随便打开一个插件的外层PHP文件看一下里面的这些代码。

这些代码什么意思呢。他们其实是描述了一个对应关系,就是一个钩子对应一些函数的对应关系,每调用一次上面的挂钩函数。就会让这个钩子上多关联一个函数。其实这所有的信息就是存在PHP的关联数组里的。可以想一下是怎么存的,我这就不说了。是时候看看代码了吧。呵呵。

然后这样的一个全局变量被初始化了,在后面具体执行到一些钩子的时候,函数就被执行了。具体就是这样实现的。不神奇是吧。只是确实很管用。

不好地的方就是每次干什么事都会做这种初始化,不管你用不用得到。他都会被准备好。

所以WP才这么慢。有兴趣的朋友可以试着var_dump一下PHP的$GLOBALS,数据量那是相当相当相当惊人,如果机器不太好的话,可能会让你的浏览器卡死。这里也是理解WordPress的关键所在!

转载于:https://my.oschina.net/feanlau/blog/879910

WordPress源代码研究-插件机制相关推荐

  1. 通过分析 JDK 源代码研究 Hash 存储机制

    http://www.ibm.com/developerworks/cn/java/j-lo-hash/ 通过分析 JDK 源代码研究 Hash 存储机制 HashMap 和 HashSet 是 Ja ...

  2. 解析 WordPress 插件机制

    一直对软件的组件.插件架构非常感兴趣,我认为现在开发任何应用程序,一定要有一个架构良好的插件机制,这样可以吸引其他人来开发插件,极大的扩充 系统的功能.Eclipse就是一个非常棒的例子,几乎你想什么 ...

  3. Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结

    Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结 1. 微内核与插件的优点1 2. 插件的注册与使用2 2.1. Ioc容器中注册插件2 2.2. 启动器微内核启动3 ...

  4. PHP中插件机制的一种实现方案

    插件,亦即Plug-in,是指一类特定的功能模块(通常由第三方开发者实现),它的特点是:当你需要它的时候激活它,不需要它的时候禁用/删除它:且无 论是激活还是禁用都不影响系统核心模块的运行,也就是说插 ...

  5. WordPress数据库研究

    该系列文章将会详细介绍WordPress数据总体的设计思路.详细介绍WordPress10个数据表的设计.并对WordPress系统中涉及的用户信息.分类信息.链接信息.文章信息.文章评论信息.基本设 ...

  6. Apache Nutch 1.3 学习笔记十(插件机制分析)

    1. 一些对象说明 PluginRepository:这是一个用于存储所有插件描述对象(PluginDescriptor),插件扩展点(ExtensionPoint)和被激活的插件. PluginDe ...

  7. 7个最佳WordPress视频库插件

    试图将一组视频放到您的WordPress网站上? 尽管WordPress的内置功能可以很好地处理图片库,并且可以很好地显示单个视频,但是对于普通的WordPress安装而言,拥有成熟的视频库仍然是遥不 ...

  8. 5个最好的WordPress电商插件比较 - 2019年

    点击阅读原文. 你想建立一个在线商店吗?想知道哪个是最好的WordPress电商插件? 选择合适的电商插件对您的业务至关重要,因为更好的平台意味着更多的增长机会.通常,用户最终会因为在选择电子商务平台 ...

  9. 2019年最佳WordPress社交媒体插件

    您必须拥有强大的社交媒体形象,才能在当今的社交媒体驱动的世界中蓬勃发展. 您业务的主要资产是吸引受众的注意力,如今他们的注意力已转移到社交媒体上. 拥有强大的社交媒体形象将有助于您的企业吸引对其品牌的 ...

最新文章

  1. 有哪些「魔改」损失函数,曾经拯救了你的深度学习模型?
  2. 青藤云安全张福:我们可以用“免疫系统”对抗黑客入侵吗?
  3. python中long类型的取值范围_java基本数据类型取值范围
  4. VTK:InfoVis之KMeansClustering
  5. ospf路由协议源码学习
  6. 这两个VHDL的问题终于解决了!
  7. Eureka、Zookeeper、Consul异同点
  8. php excel parser pro v4.2,PHP Excel Parser Pro v4.2怎么用
  9. Python使用pyserial实现串口收发
  10. 苹果手机用计算机打不开,苹果手机更新ios11后,照片在电脑上打不开怎么办?...
  11. 求和:1/3+3/5+5/7+7/9+………..+97/99
  12. 欧盟新法将个人隐私放在首位
  13. C#串口通信—向串口发送数据,同步接收返回数据
  14. 安卓 高德SDK 将当前坐标居地图中心
  15. 地球系统模式(CESM)实践技术应用
  16. MySQL - CALL 语句
  17. SqlDbx 连接mysql 数据库
  18. PADS Logic PADS9.5-Win10补丁用于修改选项显示不全,和PADS Layout 9.5封装向导窗口显示不全
  19. 微信小程序优购商城项目
  20. MySQL Windows 64位解压版安装

热门文章

  1. vue大屏可视化布局
  2. excelexportentity中设置null不显示的方法_如何在 Creator3D 中切换模型贴图,超级简单!...
  3. 2接口详解_冯博琴微型计算机原理与接口技术第3版答案资料配套题库名校考研真题课后习题章节题库模拟试题...
  4. python中︿是什么意思_Python learning notes-0003-注释、变量、简单类型、运算符,学习,笔记...
  5. 查询中接受的主体参数_【自动化/测开面试集锦系列】SQL查询
  6. 计算机word怎么选中全文,word怎么选择 WORD怎么选取全文
  7. springfox源码_springfox 源码分析(七) 文档初始化
  8. 宿主机172连接容器mysql_开发时从宿主机连接容器中的MySQL
  9. 必须声明标量变量 @列名
  10. php !$rs-gt;bof and !$rs-gt;eof,关于rs.bof rs.eof的一些解释,请大家帮我完善一下,谢谢...