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
  • 相关阅读:
    16-hadoop-mapreduce简介
    centos7-windows10 双系统安装
    5.4 RDD编程---综合案例
    8.2 数据结构---字符串(查找)
    8.1 数据结构---字符串
    5.3 RDD编程---数据读写
    5.2 RDD编程---键值对RDD
    5.1 RDD编程
    4.Spark环境搭建和使用方法
    3.3 Spark的部署和应用方式
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2755684.html
Copyright © 2011-2022 走看看