it-roy-ru.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