插件功能中的WordPress管理通知

时间:2017-02-20 作者:Bullman

我有一个wordpress插件类示例。我在勾搭woocommercewoocommerce_saved_order_items 我想创建一个管理通知。添加来自\\uu construct的操作有效,但当我想在钩子函数中创建通知时,它不会出现,问题在哪里?

 class SomeClass {

        private static $instance;


        public function __construct() {
            add_action(\'woocommerce_saved_order_items\',array($this,\'orderStatusChange\'),10,1);
            add_action(\'admin_notices\', array($this,\'simple_notice\')); // This works
        }

        public static function getInstance() {
            if(!self::$instance)
                self::$instance = new SomeClass();

            return self::$instance;
        }


        public function orderStatusChange($orderID){
            add_action(\'admin_notices\', \'simple_notice\');//This not works
        }



        function simple_notice(){
            ?>
            <div class="updated notice is-dismissible">
                <p>Thank you for using this plugin! <strong>You are awesome</strong>.</p>
            </div>
            <?php
        }

    }


    SomeClass::getInstance();

1 个回复
SO网友:Krzysiek Dróżdż

你的问题很简单。这个钩子的回调不是一个简单的函数,而是类的某个方法。

如果添加如下操作:

add_action(\'admin_notices\', \'simple_notice\');
您告诉WP有一个简单的函数simple_notice 当钩子admin_notices 已处理。但是代码中没有这样的函数。

您要调用的函数是类中的方法,因此您不仅要传递函数的名称,还要传递给定类的对象,以便WP能够调用此方法。(您在\\uu构造中正确地完成了这项工作)。

这条线有效

add_action(\'admin_notices\', array($this, \'simple_notice\')); // This works
因为该方法是以完整的细节传递的,作为描述对象及其调用方法的数组。