最近、プラグインとテーマの開発を始めましたが、両方でいくつかの機能を使用する必要があることに気付きました。
このポストで述べられているように宣言される前に関数/クラスが存在するかどうかを確認することを考えます:関数が存在するかどうかを確認するタイミング
しかし、それは悪い習慣だと考えられています。競合を防ぎ、テーマとプラグインを1つインストールせずにテーマとプラグインを個別に機能させるためのベストプラクティスは何ですか?
最近、プラグインとテーマの開発を始めましたが、両方でいくつかの機能を使用する必要があることに気付きました。
このポストで述べられているように宣言される前に関数/クラスが存在するかどうかを確認することを考えます:関数が存在するかどうかを確認するタイミング
しかし、それは悪い習慣だと考えられています。競合を防ぎ、テーマとプラグインを1つインストールせずにテーマとプラグインを個別に機能させるためのベストプラクティスは何ですか?
回答:
私見最善の方法をテーマに、プラグイン機能をもたらすためにアクションを使用することです。
これをテストするための小さなプラグインを次に示します。
<?php
/** Plugin Name: (#68117) Print Hello! */
function wpse68117_print_hello()
{
echo "Hello World!";
}
add_action( 'wpse68117_say', 'wpse68117_print_hello' );
テーマ内:
<?php
/** Template Name: Test »Print Hello!« Plugin */
get_header();
// Now we call the plugins hook
do_action( 'wpse68117_say' );
この方法では、関数、ファイル、クラス、メソッド、または(これを行わないでください!)グローバルの存在を確認する必要はありません$variable
。WPインターングローバルは、これを既に使用しています。フック名が現在のフィルターであるかどうかを確認し、アタッチします。存在しない場合は、何も起こりません。
次のプラグインでは、1つの引数を取るコールバック関数をアタッチします。
<?php
/** Plugin Name: (#68117) Print Thing! */
function wpse68117_print_thing_cb( $thing )
{
return "Hello {$thing}!";
}
add_filter( 'wpse68117_say_thing', 'wpse68117_print_thing_cb' );
テーマ内:
<?php
/** Template Name: Test »Print Thing!« Plugin */
get_header();
// Now we call the plugins hook
echo apply_filter( 'wpse68117_say_thing', 'World' );
今回は、ユーザー/開発者に引数を追加する可能性を提供します。彼echo/print
は出力を行うことも、さらに処理することもできます(見返りに配列を得た場合)。
3番目のプラグインでは、2つの引数を取るコールバック関数をアタッチしています。
<?php
/** Plugin Name: (#68117) Print Alot! */
function wpse68117_alot_cb( $thing, $belongs = 'is mine' )
{
return "Hello! The {$thing} {$belongs}";
}
add_filter( 'wpse68117_grab_it', 'wpse68117_alot_cb' );
テーマ内:
<?php
/** Template Name: Test »Print Alot!« Plugin */
get_header();
// Now we call the plugins hook
$string_arr = implode(
" "
,apply_filter( 'wpse68117_grab_it', 'World', 'is yours' )
);
foreach ( $string_arr as $part )
{
// Highlight the $thing
if ( strstr( 'World', $part )
{
echo "<mark>{$part} </mark>";
continue;
}
echo "{$part} ";
}
このプラグインにより、2つの引数を挿入できるようになりました。に保存して、$variable
さらに処理することができます。
フィルターとアクションを使用すると、不必要なチェックを回避することでパフォーマンスが向上します(〜1k(?)フィルター検索の速度function_*/class_*/method_*/file_exists
またはグローバルの検索と比較してくださいin_array()
)。プラグインがこれを気にするので、変数を設定しないなどの不要な通知をすべて避けることもできます。