WordPress类,使用Add_action调用成员函数不起作用

时间:2013-07-31 作者:tester2001

我正在学习创建一个WP插件作为一个类。然而,在调用我的函数时,add\\u操作似乎不起作用;它在使用$this->init()时工作。

示例:

    class test
{

    public $age = NULL;

    public function __construct()
    {
        //register an activation hook
        register_activation_hook( __FILE__, array( &$this, \'installplugin\' ) );

        add_action(\'init\', array( &$this, \'init\' ) ); //this doesn\'t work
        //$this->init(); //This WORKS!

    }

    function installplugin()
    {

        add_option( \'age\', 45 );
        $this->init();  

    }

    function init()
    {

        $age = get_option( \'age\' );
        $this->age = $age;



    }

    function printAge(  )
    {
        echo "The age is " . $this->age . "<br />";
    }

}
因此,运行后:

$learnObj =  new learnable_test();

$learnObj->printAge();
它只打印:“年龄是”

但是如果我没有注释掉add\\u操作(\'init\',…)然后使用$this->init(),这似乎可行,打印“年龄是45”

我错过了什么?

1 个回复
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成

嗯,它不能也不会像你想要的那样工作。

让我们看看你到底在做什么。

在构造函数中,您有:

add_action(\'init\', array( &$this, \'init\' ) ); //this doesn\'t work
所以你加上init 对象到WPs的方法init 钩WP运行时init 行动,然后你的init 方法将运行到,但不早也不晚。

然后你可以这样做:

$learnObj =  new learnable_test();

$learnObj->printAge();
所以您创建了类的对象。它将添加$learnObj->init 至WPsinit

如果您在WPs之后调用这两行init 钩子已经做了,什么都不会发生。

如果你以前给他们打过电话(我想是的),你的$learnObj->init 将在WPs期间执行init 行动(和age 将设置变量)。

但在第二行,你想访问这个age 变量这里还没有设置,因为WP还没有执行init 行动$learnObj->init 也没有被执行。

结束

相关推荐

注意:未定义索引:SUPPRESS_FILTERS

我正在做一个主题的除虫工作,我希望有人能帮助我。我使用JustinTadlock创建的这个函数在博客页面上显示自定义帖子类型,并且将wp debug设置为true,我会收到一个通知:未定义索引:suppress\\u filters消息。代码如下:// Custom Post Type for the public blog posts to show on Index or blog page add_filter( \'pre_get_posts\', \'my_get_posts\' );&