【问题标题】:How to correctly do a do_action/add_action with a plugin class in PHP?如何在 PHP 中使用插件类正确执行 do_action/add_action?
【发布时间】:2015-02-04 10:40:46
【问题描述】:

我认为问题是有太多人试图回答一个问题,比如这里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' ) );

或者其他什么,比如根本不用上课?

谢谢

【问题讨论】:

    标签: php wordpress class


    【解决方案1】:

    第一个例子最好。您达到了相同的结果,但在第一个示例中,您的所有钩子都包含在您的类中(封装)。

    没有任何理由将这些钩子添加到类之外。

    http://en.wikipedia.org/wiki/Encapsulation_%28object-oriented_programming%29

    【讨论】:

    • 谢谢。另外作为一个子问题,您是否建议在同一个 __construct 中使用多个 add_actions,或者为每个类设置一个单独的类会更好?
    【解决方案2】:

    这在一定程度上取决于您认为最好的方法。如果您以类的形式编写 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
        }
    }
    

    这个变种有好处

    • a) 非静态代码不需要关心实例化和注册。这在一定程度上取决于您的插件的详细程度,直到这对您的代码设计产生真正的影响,但是将对象实例化与使用分开并没有那么错误。
    • 和 b) 只有在加载插件时才会实例化它。这是因为插件::init 方法在plugins_loaded 钩子上被调用。这得益于静态插件工厂方法。

    【讨论】:

    • 就我而言,我说的是自定义主题,但无论如何感谢我在制作插件时会记住这一点
    • 对于你有类似的钩子来初始化代码的主题,同样的原则适用。
    猜你喜欢
    • 2015-07-17
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 2018-11-04
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    相关资源
    最近更新 更多