【问题标题】:WordPress do_action and add_action; running arguments in add_action callWordPress do_action 和 add_action;在 add_action 调用中运行参数
【发布时间】:2015-07-17 06:37:44
【问题描述】:

我目前正在为 WordPress 编写一个插件,但我对 add_action 和 do_action 函数感到困惑。我想我可能试图在错误的环境中使用它们,如果是这样的话 - 有人能指出我正确的方向吗?

我从讨厌 WordPress 到喜欢它,我从没想过我会写一个 wordpress 插件,但现在我掌握了窍门,它与普通的 PHP 开发并没有什么不同。

无论如何,如果我要在插件中包含以下代码:

class aCoolPlugin {

    function __construct() {
        add_action('clear_auth_cookie', array( $this, 'aCoolFunction' ), 10, 2 );
    }

    function aCoolFunction( $arg1, $arg2 ) {
        // Do something with the arguments
    }

}

我将如何实际运行aCoolFunction 函数?现在,我尝试了以下方法:

do_action( 'init', "arg1 value", "arg2 value" );

但是,在尝试运行该代码之前,我意识到:

  1. 这没有任何意义,因为它实际上会过早地运行 init 操作,并且;
  2. 就是不管用!

所以,我从中学到了:

  1. 我使用 add_action 挂钩到 WP 的现有功能
  2. do_action 真的是为新的钩子保留的,真的想不出一个有用的情况,应该先调用一个钩子,然后再调用一次?

所以,我现在的问题是:我怎么能将我的变量传递到add_action 代码中? Codex 没有说任何关于论点的内容,那我有什么选择? 或者,我的逻辑和理解有缺陷吗?

总体目标是什么? 目标是在每次调用特定钩子时都运行一个带有设置参数的函数,并且不早于/晚于调用原始钩子应该是

【问题讨论】:

    标签: php wordpress


    【解决方案1】:

    添加操作不接受任何新变量,也不会将任何变量返回给运行它的函数。但是您可以访问传递给函数的变量。

    function custom_function($arga){
           echo $arga;
    }
    
    add_action ('callname', 'custom_function', 10, 1);// 1= number of arguments accepted, use 2 for 2 etc...must add variables to do action call
    
    
    //sometime later in the code
    do_action('callname', $arga);
    

    如果您想在其中注入变量,则必须稍微回归基础。如果您想访问未传递的函数中的变量,您有 2 个选项:

    1. 从数据库或服务器存储或类似存储中检索它们
    2. 使用全局声明。您可以访问在 do_action 运行时设置的所有变量。

    您很少会为 wordpress 钩子调用 do_action(请参见下面的注释),但您最终可能会遇到这样的情况:您正在编写模板文件(在插件之后运行,然后在主题之后运行)并且您希望将逻辑保留在您可以将do_action() 添加到模板文件中的插件,插件中设置的操作将在此时运行。或者类似地,如果您设计了一个希望能够在主题中修改的插件,您可以在被调用的函数中向后期 wp 钩子添加一个操作,您可以在您的主题中为您的自定义钩子和钩子函数调用 do_action .大量的可能性。

    无论您提前调用 WP 挂钩的逻辑是什么,不要如果您处于 WP 加载模式中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-03
      • 2014-03-13
      • 1970-01-01
      • 2021-06-08
      • 1970-01-01
      • 2011-04-05
      • 2015-11-12
      相关资源
      最近更新 更多