これが私のプラグインの中にあるとしましょう:
class pluginslug_foo {
public function bar() {
//stuff
}
}
私はメソッドバーをプラグインの外、例えばテーマファイルで利用できるようにしたいので、pluginslug_bar();
で呼び出せるようにしました。
私は試した:
function pluginslug_get_foo() {
$foo = new pluginslug_foo();
return $foo;
}
function pluginslug_bar() {
$bar = $foo->bar;
}
私のテーマでpluginslug_bar();
を試したところ、$ barに対して未知の変数エラーが発生しました:(
別の方法は、プラグインで静的クラスメソッドを使用し、オプションでエイリアスとして関数を書くことです。
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!';
}
または
if ( method_exists('Pluginslug_Foo', 'bar' ) ) {
echo Pluginslug_Foo::bar(); // echo 'Bar!';
}
もちろん、静的メソッドや変数は必ずしも範囲に収まりません、そしてこれは一般的な理論的な例です:あなたの本当の範囲/コードを知らなければそれがあなたにとって良いかどうかを言うことは不可能です。
PHPに慣れていない場合は、テーマに単純なアクションとフィルタを使用し、プラグインクラスにそれらのコールバックを登録します。
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'
あなたは自分の機能を間違えました。 pluginslug_bar
関数には$foo
変数が含まれていません。最初に初期化する必要があります。
function pluginslug_get_foo() {
$foo = new pluginslug_foo();
return $foo;
}
function pluginslug_bar() {
$foo = pluginslug_get_foo();
$bar = $foo->bar();
}
それからあなたのテーマのfunctions.php
ファイルでは、このようにそれを呼ぶことができます:
if ( function_exists( 'pluginslug_bar' ) ) {
pluginslug_bar();
}