• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

自己动手从头制作WordPress主题(三)探索add_action和do_action - php la ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

自己动手从头制作WordPress主题(三)探索add_action和do_action

2012-11-05 11:43  php la  阅读(4521)  评论(2编辑  收藏  举报

上一篇我们自己实现了一个简单的主题选项,其中涉及到WP的一个重要的函数add_action,其实只add没有用,WP还要通过另一个函数do_action来执行add_action添加的事件。add_action相当于添加事件和事件处理程序;do_action相当于执行事件。WP是如何保证两者的执行顺序的呢?下面使用调试探索一下:

add_action:

theme-options.php下面设置断点,访问wp-admin/login.php,中断后的调用堆栈:

F5步入后,发现调用了add_filter函数:

add_action登记的事件就保存在$wp_filter这个三层数组字典中,看一下变量:

do_action:

在init函数内部添加断点,继续执行,观察调用堆栈:

依次调用了wp-admin下面的index.php->admin.php->menu.php->includes/menu.php->plugin.php->自定义主题的目标。依次点击堆栈,可以查看详细调用代码。menu.php文件触发了事件,调用了do_action,plugin.php文件包含do_action的定义:

大体浏览一下代码我们知道了do_action根据$tag值“admin_menu”,在字典数组$wp_filter下面找到在add_action时挂到该事件的所有事件处理函数,并依次调用。

如何保证先执行add_action,后执行do_action呢?

比较两个调用堆栈,找出重叠的部分:admin.php文件。30行调用了我们的主题cnblogs里面的add_action,而106行调用了WP内部函数do_action。

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
自己动手从头制作WordPress主题(一) - php la发布时间:2022-07-10
下一篇:
redis+php+mysql处理高并发实例发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap