我认为问题在于有太多人试图回答问题,例如https://wordpress.stackexchange.com/questions/48085/add-action-reference-a-class
在我的情况下,我在主题模板中使用了do_action
哪个最好......
class mytheme_do_header_content{
public function __construct() {
add_action( 'mytheme_do_header', array( $this, 'mytheme_do_header_content_make' ) );
}
function mytheme_do_header_content_make(){
//some code goes here
}
public function __destruct() {
}
}
new mytheme_do_header_content();
或者
class mytheme_do_header_content{
public function __construct() {
//some code goes here
}
public function __destruct() {
}
}
add_action( 'mytheme_do_header', array( $this, 'mytheme_do_header_content_make' ) );
还是其他不喜欢上课的东西?
由于
答案 0 :(得分:0)
第一个例子是最好的。你得到了相同的结果,但在第一个例子中,所有的钩子都包含在你的类中(封装)。
没有任何理由在课堂外添加这些钩子。
http://en.wikipedia.org/wiki/Encapsulation_%28object-oriented_programming%29
答案 1 :(得分:0)
这取决于你认为最好的东西。如果你以类的形式编写Wordpress插件,那么类的一个(静态)方法最好知道它如何实例化它自己。该方法还可以涵盖插件的注册:
add_action('plugins_loaded', array('mytheme_do_header_content', 'init'), 5);
class mytheme_do_header_content
{
static function init() {
$plugin = new self();
add_action('mytheme_do_header', array($plugin, 'mytheme_do_header_content_make'));
}
function mytheme_do_header_content_make() {
//some code goes here
}
}
此变体具有好处
::init
挂钩上调用了插件plugins_loaded
方法。这得益于静态插件工厂方法。