zoukankan      html  css  js  c++  java
  • 自己动手从头制作WordPress主题探索add_action和do_action

    上一篇我们自己实现了一个简单的主题选项,其中涉及到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。

     
    分类: WordPress
  • 相关阅读:
    ubuntu下安装flash
    PHPMailer邮件发送
    PHP制作简单分页(从数据库读取记录)
    windows下安装PHP环境
    捕获浏览器关闭,刷新事件
    ubuntu下安装wps
    用PHP制作一个简单的验证码
    一个PHP程序员应该掌握的10项技能!
    爬虫框架之scrapy
    Android杂谈禁止TimePicker控件通过keyboard输入
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2755684.html
Copyright © 2011-2022 走看看