web-dev-qa-db-ja.com

このクラス内でクラス外から関数にアクセスする方法 WP プラグイン?

私はと呼ばれるWPプラグインを開発しています。 DD_Awesome_Pluginこれが私のコードです(クラス関数内に追加のコードロジックを含まない簡易版)。

class DD_Awesome_PLugin {

    public function __construct()
    {

    }

    public function add_menu_page()
    {
        add_options_page('DD Awesome PLugin', 'DD Awesome PLugin', 'administrator', __FILE__, array('DD_Awesome_PLugin', 'display_options_page'));
    }

    public function display_options_page()
    {
        $plugin_options = get_option('dd_my_awesome_plugin');
        echo "Here we go admin!";

        /* and after echo I need to triger a function "trigger_me_from_class()" that is located outside of the class. */
    }

}


add_action('admin_menu', function() {
    DD_Awesome_PLugin::add_menu_page();
});

add_action('admin_init', function() {
    new DD_Awesome_PLugin();
    include_once dirname(__FILE__) . ('/simple_html_dom.php');
});


 /* just trigger this function "trigger_me_from_class" from "display_options_page" function (situated in DD_Awesome_plugin class above) */
public function trigger_me_from_class()
{
    $str = date('Y-m-d H:i:s', time());
    wp_mail('[email protected]', 'DD success message', "Success at $str." );
}
1
Derfder

クラスインスタンスの静的ゲッターを作成します。

class DD_Awesome_Plugin
{
    /**
     * Plugin main instance.
     *
     * @type object
     */
    protected static $instance = NULL;

    /**
     * Access plugin instance. You can create further instances by calling
     * the constructor directly.
     *
     * @wp-hook wp_loaded
     * @return  object T5_Spam_Block
     */
    public static function get_instance()
    {
        if ( NULL === self::$instance )
            self::$instance = new self;

        return self::$instance;
    }

    public function add_menu_page()
    {
        add_options_page(
            'DD Awesome PLugin', 
            'DD Awesome PLugin', 
            'administrator', 
            __FILE__, 
            array( $this, 'display_options_page' )
        );
    }
}

そして今、あなたはプラグインのインスタンスを取得します:

add_action('admin_menu', function() {
    DD_Awesome_Plugin::get_instance()->add_menu_page();
});

または

add_action( 
    'admin_menu', 
    array( DD_Awesome_Plugin::get_instance(), 'add_menu_page' ) 
);
3
fuxia