私はadd_filterとapply_filterのWordPress Codexを数え切れないほど読んだことがありますが、今日のwoocommerceのソースコードを読むまでは、apply_filterの動作を理解できない、またはどうやって理解できないのか、それは新しいフックを作成します、そして、いつ/どこで新しいフックのために関数が定義されますか?
ワードプレスコーデックスをもう一度確認する
CODEX:apply_filters(string $ tag、mixed $ value)フィルタフックに追加された関数を呼び出します。
Filter hook $ tagにアタッチされたコールバック関数は、この関数を呼び出すことによって呼び出されます。この関数は、$ tagパラメータを使用して指定された新しいフックの名前でこの関数を呼び出すだけで、新しいフィルタフックを作成するために使用できます。
この関数では、追加の引数を追加してフックに渡すことができます。
//私たちのフィルタコールバック関数
function example_callback( $string,
> $arg1, $arg2 ) {
> // (maybe) modify $string
> return $string; } add_filter( 'example_filter', 'example_callback', 10, 3 );
/ *上記のadd_filter()関数を使用して 'example_filter'に「フック」した 'example_callback'関数を呼び出してフィルタを適用します。 - > 'example_filter'はフィルタフックの$タグです。 - > 'filter me'はフィルタリングされている値です。 - > $ arg1と$ arg2はコールバックに渡される追加の引数です。
$value = apply_filters( 'example_filter', 'filter me', $arg1, $arg2 );
あなたはそれらがapply_filtersを使う一つの方法を示しているのを見ることができます:それは、関数が定義されて$タグにリンクされるadd_filtersと組み合わせてです。使い方は直感的です。あなたはそれを定義し、あなたはそれを使います。
それで、他のシナリオについてはどうですか、その場で新しいフィルタフックを作成します...あなたの何人かがまだ何を言っているならば?コーデックスのその部分をもう一度読み直すことができます。
この関数は、$ tagパラメータを使用して指定された新しいフックの名前でこの関数を呼び出すだけで、新しいフィルタフックを作成するために使用できます。
したがって、add_filterはこの状況では使用されません。これが私の質問につながります。なぜここでフィルタフックを作成しているのですか?オンザフライで作成されるフィルタフックに関数をどのように関連付けますか?
Apply_filterコーデックスでは、これを行う方法や理由の一例を示していませんが、これは見落としですが、私はgithubでwoocommerceのソースを調べながら、これらのフィルターフックのインスタンスを見つけ続けます。
たとえば、ウーコマースでは、apply_filterが次のように使用されています。
function woocommerce_get_product_thumbnail( $size = 'woocommerce_thumbnail', $deprecated1 = 0, $deprecated2 = 0 ) {
global $product;
$image_size = apply_filters( 'single_product_archive_thumbnail_size', $size );
return $product ? $product->get_image( $image_size ) : '';
}
タグを検索しました
single_product_archive_thumbnail_size
'githubのwoocommerceリポジトリにあります。ここに見られるようにそれのただ一つの発生だけあります。では、どうやって使うのでしょうか。
Githubのwoocommerceリポジトリで
single_product_archive_thumbnail_size
タグを検索しました。ここに見られるように、それはたった一つしかありません。では、どのように使用しますか?
WooCommerceの作者はこのフィルターを追加して、他の開発者が製品のアーカイブサムネイルサイズを変更できるようにしました。 WooCommerceはこのフィルター自体を使用していない可能性がありますが、使用できます。
single_product_archive_thumbnail_size
フィルターを使用する方法は次のとおりです。この仮想シナリオでは、WooCommerceで定義されたsingle_product_archive_thumbnail_size
を、そのテーマがアクティブになった場合にkruddock
テーマで定義された画像サイズkruddock_archive_thumbnail
でオーバーライドします。
/**
* If the kruddock theme is active, use the kruddock_archive_thumbnail
* image size for WooCommerce's single_product_archive_thumbnail_size
*
* @param string $size name of thumbnail size
*/
add_filter( 'single_product_archive_thumbnail_size', 'single_product_archive_thumbnail_size' );
function wpse_single_product_archive_thumbnail_size( $size ) {
$theme = wp_get_theme();
if ( 'kruddock' == $theme->name || 'kruddock' == $theme->parent_theme ) {
$size = 'kruddock_archive_thumbnail';
}
return $size;
}
動的フックの良い例は、 options に定義されているものです。例:
apply_filters( "option_{$option}", mixed $value, string $option )
Kruddock APIという名前のプラグインがあるとします。このプラグインには、 WP設定API を使用してkruddock_api_url
という名前の設定を保存するオプションがあります。
プラグインを使用する開発者は、option_kruddock_api_url
フィルターを使用して、kruddock_api_url
の保存値を実際に変更せずにget_option( 'kruddock_api_url' )
によって返される値を変更できます(フィルターの性質上、オンザフライの値)andKruddock APIの開発者としてあなたがいなくてもkruddock_api_url
の値を変更するための特定のフィルターを提供したことがあるプラグイン。
WP Settings APIを使用すると、動的フィルターoption_{$option}
を使用して、オプションをその場で変更できます。この例の動的フックを別の開発者が使用する方法を次に示します。
add_filter( 'option_kruddock_api_url', 'wpse_option_kruddock_api_url' );
function wpse_option_kruddock_api_url( $value ) {
// Use a different API URL than the default.
$value = 'https://subdomain.example.com';
return $value;
}