Wie mache ich eine Methode aus dem Plugin im Theme verfügbar?

Sagen wir, das war in meinem Plugin:

class pluginslug_foo { public function bar() { //stuff } } 

und ich wollte die Methodenleiste außerhalb des Plugins verfügbar machen, zum Beispiel in einer Theme-Datei, so dass sie mit pluginslug_bar(); aufgerufen werden pluginslug_bar(); .

Ich habe es versucht:

 function pluginslug_get_foo() { $foo = new pluginslug_foo(); return $foo; } function pluginslug_bar() { $bar = $foo->bar; } 

Aber ich habe einen unbekannten Variablenerrors für $ bar bekommen, als ich pluginslug_bar(); ausprobiert pluginslug_bar(); in meinem Thema 🙁

Solutions Collecting From Web of "Wie mache ich eine Methode aus dem Plugin im Theme verfügbar?"

Eine alternative Möglichkeit besteht darin, in Plugins statische classnmethoden zu verwenden und optional functionen als Alias ​​zu schreiben:

im 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 Thema:

 if ( function_exists( 'pluginslug_bar' ) ) { pluginslug_bar(); // echo 'Bar!'; } 

oder

 if ( method_exists('Pluginslug_Foo', 'bar' ) ) { echo Pluginslug_Foo::bar(); // echo 'Bar!'; } 

Natürlich passen statische Methoden und Variablen nicht immer zum scope, und dies ist ein allgemeines theoretisches Beispiel: Ohne Wissen ist Ihr wirklicher scope / Code unmöglich zu sagen, ob es für Sie gut ist oder nicht.

Wenn Sie mit PHP nicht vertraut sind, verwenden Sie einfache Aktionen und Filter in Ihrem Design und registrieren Sie Callbacks für diejenigen in Ihrer Plugin-class.

Ein grundlegendes Beispiel

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'; } } 

Thema

 $foo = apply_filters( 'theme_foo', FALSE ); if ( $foo ) echo "foo is $foo"; do_action( 'theme_bar' ); // prints 'bar' 

Sie haben einen Fehler in Ihren functionen gemacht. pluginslug_bar function pluginslug_bar enthält keine Variable $foo , die Sie zuerst initialisieren müssen:

 function pluginslug_get_foo() { $foo = new pluginslug_foo(); return $foo; } function pluginslug_bar() { $foo = pluginslug_get_foo(); $bar = $foo->bar(); } 

Dann kannst du es in der functions.php Datei deines Themes so nennen:

 if ( function_exists( 'pluginslug_bar' ) ) { pluginslug_bar(); }