Comment rendre la méthode du plugin disponible dans le thème?
3 réponses
- votes
-
- 2013-10-01
Une autrefaçonest d'utiliser desméthodes de classe statiques dans lesplugins,et éventuellement d'écrire desfonctions comme alias:
dans leplugin:
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(); } }
dans lethème:
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,lesméthodeset les variables statiquesne correspondentpastoujours à laportée,et ceciest unexemplethéoriquegénéral: sans savoir votre véritableportée/codeestimpossible de dire si c'estbonpour vous ounon.
An alternative way is to use static class methods in plugins, and optionally write functions as alias:
in Plugin:
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(); } }
in Theme:
if ( function_exists( 'pluginslug_bar' ) ) { pluginslug_bar(); // echo 'Bar!'; }
or
if ( method_exists('Pluginslug_Foo', 'bar' ) ) { echo Pluginslug_Foo::bar(); // echo 'Bar!'; }
Of course static methods and variables not always fit the scope, and this is a general theoric example: without know your real scope/code is impossible to say if it's good for you or not.
-
- 2013-10-01
Si vousn'êtespastrèsfamilier avec PHP,utilisez des actionset desfiltres simples dans votrethème,et enregistrez des rappelspour ceux de votre classe deplugin.
Unexemplebasique
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'; } }
Thème
$foo = apply_filters( 'theme_foo', FALSE ); if ( $foo ) echo "foo is $foo"; do_action( 'theme_bar' ); // prints 'bar'
If your aren’t very familiar with PHP, use simple actions and filters in your theme, and register callbacks for those in your plugin class.
A basic example
Plugin
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'; } }
Theme
$foo = apply_filters( 'theme_foo', FALSE ); if ( $foo ) echo "foo is $foo"; do_action( 'theme_bar' ); // prints 'bar'
-
Votreexemplefonctionnepourmoi,mais seulement après avoir ajouté quelque chose comme `$plugin_obj=new Plugin_Class;` dans la sectionplugin ou la sectionthème.Your example does work for me, but only after I add something like `$plugin_obj = new Plugin_Class;` in the plugin section or theme section.
- 0
- 2015-12-21
- Daniel Dropik
-
@DanielDropik Ehbien,oui,vous devez créer uneinstance d'objet de la classe,sinon le coden'estjamais appelé.Iln'estpasnécessaire que ce soit uneinstancepublique.@DanielDropik Well, yes, you have to create an object instance of the class, other wise the code is never called. It doesn't have to be a public instance.
- 0
- 2015-12-21
- fuxia
-
- 2013-10-01
Vous avez commis uneerreur dans vosfonctions.Lafonction
pluginslug_bar
ne contientpas de 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 lefichier
functions.php
de votrethème,vouspouvez l'appeler comme ceci:if ( function_exists( 'pluginslug_bar' ) ) { pluginslug_bar(); }
You have made a mistake in your functions.
pluginslug_bar
function doesn't contain$foo
variable, you need to initialize it first:function pluginslug_get_foo() { $foo = new pluginslug_foo(); return $foo; } function pluginslug_bar() { $foo = pluginslug_get_foo(); $bar = $foo->bar(); }
Then in your theme's
functions.php
file you can call it like this:if ( function_exists( 'pluginslug_bar' ) ) { pluginslug_bar(); }
Disons que c'était dansmonplugin:
et je voulais rendre labarre deméthode disponiblepour une utilisationen dehors duplugin,parexemple dans unfichier dethème afin qu'ellepuisse être appelée avec
pluginslug_bar();
.J'aiessayé:
Maisj'aieu uneerreur de variableinconnuepour $bar lorsquej'aiessayé
pluginslug_bar();
dansmonthème :(