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
  • 相关阅读:
    Django ORM查询总结
    Django中settings.py 相关配置说明
    项目完整开发流程
    生产环境中不小心升级了glibc该怎么办?
    提取网页里所有链接的方法
    fofa基本语法
    python爬取豆瓣top250电影源码
    一键清理系统的缓存
    内网隧道搭建---Neo-reGeorg
    若依后台管理系统sql注入和未授权访问
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2755684.html
Copyright © 2011-2022 走看看