WordPress do_action和add_action;在add_action调用中运行参数

时间:2015-05-06 21:58:37

标签: php wordpress

我目前正在为WordPress编写一个插件,我对add_actiondo_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. 反正它无效!
  3. 所以,从中我学到了:

    1. 我使用add_action挂钩WP的现有函数
    2. do_action是为新钩子保留的,真的不能想到一个有用的情况,应该先调用一个钩子,然后再调用一次?
    3. 所以,我现在的问题是:如何将变量传递给add_action代码? Codex没有提及任何有关参数的内容,那么我的选择是什么? 或者,我的逻辑和理解是否有缺陷?

      总体目标是什么?目标是每次调用特定的钩子时都有一个带有set参数的函数,并且原始钩子不会在之前/之后被调用。它应该是

1 个答案:

答案 0 :(得分:0)

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

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. 中检索它们
  3. 使用全局声明。您可以访问在运行do_action时设置的所有变量。
  4. 你很少会为wordpress钩子调用do_action(参见下面的注释),但你最终可能会遇到编码模板文件的情况(在插件之后运行,然后在主题之后运行)并且你想保持你的逻辑您可以将do_action()添加到模板文件中的插件,插件中设置的操作将在该点运行。或者类似地,如果您设计一个您希望能够在主题中修改的插件,您可以将一个动作添加到已故的wp钩子,在被调用的函数中,您可以在主题中为您的自定义钩子和钩子函数调用do_action 。充满了各种可能性。

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