2013-03-01 3 views
0

Это является частью кода, который участвует в мой вопрос:Вызов функции вне класса

class My_Box { 
    function __construct($args) { 
    add_action('admin_footer', array(__CLASS__, 'add_templates')); 
    } 
    static function add_templates() { 
    self::add_template('list'); 
    self::add_template('grid'); 
    } 
    private static function add_template($name) { 
    echo html('script',array(/*args*/)); 
    } 
} 

add_action в приведенном выше коде требует аргументов быть строка, как это:

add_action('handle','function_name'); 

Теперь мне нужно запустить оператор add_action вне класса, я понял что-то вроде этого:

add_action('wp_footer', My_Box::add_templates()); 

Это состояние получил сообщение отладки «Notice: неопределенное смещение: 0».

Как правильно закодировать это заявление add_action?

+2

'add_action ('wp_footer', массив ("My_Box", "add_templates"));'? – Passerby

+0

Это не будет работать НАРУШЕНИЕ класса. –

ответ

0

Массива вы передаете в качестве второго аргумента add_action является обратным вызовом. Первое значение в массиве - это имя класса, а второе - это имя статического метода в этом классе. В классе __CLASS__ будет указано имя этого класса. Таким образом, чтобы сделать тот же самый вызов в другом месте, вам просто нужно заменить его на фактическое имя класса, например.

add_action('wp_footer', array('My_Box', 'add_templates'); 

Для получения дополнительной информации о том, как определяются функции обратного вызова см: http://www.php.net/manual/en/language.types.callable.php

1

для выборки в классе

add_action('handle', array(get_class(), 'function_name')); 

вне класса

add_action('handle', array('class_name', 'func_name')); 
+0

'get_class()' и '__CLASS__' эквивалентны здесь – FoolishSeth

0

Checkout это http://codex.wordpress.org/Function_Reference/add_action#Using_add_action_with_a_class

Чтобы использовать add_action крюк, когда ваш плагин или тема построена с использованием классов, добавьте $ это ваш add_action вызов вместе с именем функции в пределах этого класса, например, так:

class MyPluginClass 
{ 
    public function __construct() 
    { 
     //add your actions to the constructor! 
     add_action('save_post', array($this, 'myplugin_save_posts')); 
    } 

    public function myplugin_save_posts() 
    { 
     //do stuff here... 
    } 
} 
Смежные вопросы