• 自己动手从头制作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
  • 相关阅读:
    第六章 函数与宏定义实验报告
    第三次实验报告
    第五章 循环结构课后反思
    第二次实验报告
    第一次实验报告
    安装OpenCV时提示缺少boostdesc_bgm.i文件的问题解决方案
    2020软件工程最后一次作业
    2020软件工程第四次作业
    2020软件工程第三次作业
    2020软件工程第二次作业
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2755684.html
Copyright © 2020-2023  润新知