Disons que c'était dans mon plugin:
class pluginslug_foo {
public function bar() {
//stuff
}
}
et je voulais rendre la barre de méthode disponible pour une utilisation en dehors du plug-in, par exemple dans un fichier de thème afin de pouvoir l'appeler avec pluginslug_bar();
.
J'ai essayé:
function pluginslug_get_foo() {
$foo = new pluginslug_foo();
return $foo;
}
function pluginslug_bar() {
$bar = $foo->bar;
}
Mais j'ai eu une erreur de variable inconnue pour $ bar quand j'ai essayé pluginslug_bar();
dans mon thème :(
Une autre méthode consiste à utiliser des méthodes de classe statiques dans les plugins et éventuellement à écrire des fonctions sous forme d'alias:
class Pluginslug_Foo {
static $foo = 'Bar!';
public static function bar() {
return self::$foo;
}
}
if ( ! function_exists( 'pluginslug_bar' ) ) {
function pluginslug_bar() {
echo Pluginslug_Foo::bar();
}
}
if ( function_exists( 'pluginslug_bar' ) ) {
pluginslug_bar(); // echo 'Bar!';
}
ou
if ( method_exists('Pluginslug_Foo', 'bar' ) ) {
echo Pluginslug_Foo::bar(); // echo 'Bar!';
}
Bien sûr, les méthodes statiques et les variables ne correspondent pas toujours à la portée, et il s'agit d'un exemple théorique général: sans connaître votre véritable portée/code, il est impossible de dire si c'est bon pour la santé ou non.
Si vous n'êtes pas très familiarisé avec PHP, utilisez des actions et des filtres simples dans votre thème et enregistrez des rappels pour ceux de votre classe de plug-in.
class Plugin_Class
{
public function __construct()
{
$this->register_callbacks();
}
protected function register_callbacks()
{
add_filter( 'theme_foo', array( $this, 'foo' ) );
add_action( 'theme_bar', array( $this, 'bar' ) );
}
public function foo()
{
return 'foo';
}
public function bar()
{
print 'bar';
}
}
$foo = apply_filters( 'theme_foo', FALSE );
if ( $foo )
echo "foo is $foo";
do_action( 'theme_bar' ); // prints 'bar'
Vous avez commis une erreur dans vos fonctions. La fonction pluginslug_bar
ne contient pas la variable $foo
, vous devez d'abord l'initialiser:
function pluginslug_get_foo() {
$foo = new pluginslug_foo();
return $foo;
}
function pluginslug_bar() {
$foo = pluginslug_get_foo();
$bar = $foo->bar();
}
Ensuite, dans le fichier functions.php
de votre thème, vous pouvez l'appeler comme suit:
if ( function_exists( 'pluginslug_bar' ) ) {
pluginslug_bar();
}