A melhor maneira de usar sua turma sem conhecer o objeto é uma ação . Você registra a ação antes que os arquivos de tema para apresentação sejam carregados, o WordPress manipulará o restante.
Exemplo de código:
<?php # -*- coding: utf-8 -*-
/**
* Plugin Name: Plugin Action Demo
*/
add_action( 'init', array ( 'Plugin_Action_Demo', 'init' ) );
class Plugin_Action_Demo
{
/**
* Creates a new instance.
*
* @wp-hook init
* @see __construct()
* @return void
*/
public static function init()
{
new self;
}
/**
* Register the action. May do more magic things.
*/
public function __construct()
{
add_action( 'plugin_action_demo', array ( $this, 'print_foo' ), 10, 1 );
}
/**
* Prints 'foo' multiple $times.
*
* Usage:
* <code>do_action( 'plugin_action_demo', 50 );</code>
*
* @wp-hook plugin_action_demo
* @param int $times
* @return void
*/
public function print_foo( $times = 1 )
{
print str_repeat( ' foo ', (int) $times );
}
}
Agora você pode chamar do_action( 'plugin_action_demo', 50 );
em algum lugar do seu tema ou em outro plugin, e você não precisa mais se preocupar com o funcionamento interno da classe.
Se você desativar o plug-in, ainda assim estará seguro: o WordPress apenas ignora ações desconhecidas e o do_action()
não causará nenhum dano. Além disso, outros plugins podem remover ou substituir a ação, por isso você criou uma boa mini-API com um add_action()
.
Você também pode criar um singleton:
<?php # -*- coding: utf-8 -*-
/**
* Plugin Name: Plugin Singleton Demo
*/
class Plugin_Singleton_Demo
{
protected static $instance = NULL;
/**
* Creates a new instance if there isn't one.
*
* @wp-hook init
* @return object
*/
public static function get_instance()
{
NULL === self::$instance and self::$instance = new self;
return self::$instance;
}
/**
* Not accessible from the outside.
*/
protected function __construct() {}
/**
* Prints 'foo' multiple $times.
*
* @param int $times
* @return void
*/
public function print_foo( $times = 1 )
{
echo str_repeat( ' foo ', (int) $times );
}
}
Agora, print_foo()
está acessível por:
Plugin_Singleton_Demo::get_instance()->print_foo();
Eu não recomendo o padrão Singleton. Tem alguns sérios inconvenientes .