私は最初のWordPressプロジェクトを開始しようとしています。コアをオーバーライドするカスタマイズされたコアコードを別々の関数/ファイルに移動するタスクがあります(これにより、将来アップグレードするときに保守しやすくなります)。
私は研究をしてきました、そしてそれはadd_filter
とapply_filter
とdo_action
とadd_action
が行くべき道であるように見えます。私はまだそれらがどのように機能するのかについてまだ確信が持てません。これらのメソッドは、コアメソッドを上書きするために使用しますか?誤解しない限り、add
またはreplace
の行にあると感じたときはadd_filter
がoverwrite
という単語を使用しているため、私は混乱しています。
this (タコスに関するもの)の最初の答えを読みました。
そのため、著者がadd_filterの使い方を説明するのに使用した3つのステップがありました。
ステップ1:$ taco変数の静的な値
<?php $taco = 'chicken'; ?>
ステップ2:
<?php
$taco = apply_filters( 'get_taco', 'chicken' );
?>
ステップ3:
<?php
add_filter( 'get_taco', 'my_special_order' );
function my_special_order( $content ) {
return 'shredded beef';
}
?>
それで、この状況ではapply_filter
は動的メソッドをその場で作成してchicken
文字列を返させるだけなのでしょうか?それとも、ここではget_taco
と呼ばれるコアWordPressメソッドがあり、apply_filter
を使用することが元の機能が何であっても上書きするのに役立つだろうという仮定はありますか?
また、あなただけのapply_filter
があなたがadd_filter
したことができるのか?つまり、最初にapply_filter('get_taco');
AND add_filter('get_taco', 'my_special_order');
を定義しなかった場合、function my_special_order ($content) ...
は機能しませんか。
これらのフィルタをfunctions.phpファイルに入れますか?質問であなたを砲撃してすみません、私はRailsからRubyから来ているので、私はWordPressで完全に無知です。
誤解がない限り、add_filterは置換または上書きの行にあると感じるとadd_filterがWord addを使用するため、混乱します。
あなたは誤解しています。 add_action
とadd_filter
はどちらも関数コールバックを一種のキューに挿入します。同じフックに多くのコールバックを追加することができ、それらは優先順位が3番目のパラメータとして含まれている場合を除いて追加された順序で起動します。
それで、この状況では、apply_filterは動的メソッドをその場で作成し、それをチキンストリングを返させるだけなのでしょうか。
apply_filters
- 's'に注意してください - 多かれ少なかれフィルタを作成しますが、通常それは文字列ではなく変数に渡され、その変数はそれを変更してそれを返します。
フィルタ 'slugs'は、原則としてWordPress Coreの関数やメソッドの名前ではありませんが、一部の関数には同じ名前のフィルタがあります。たとえば、the_content()
はthe_content
フィルタを呼び出します。
フックは通常関数全体をオーバーライドするのではなく、それらの一部だけをオーバーライドしますが、例外とほぼ例外があります。
また、add_filteredしたものだけをapply_filterできますか?
いいえ、その逆です。 add_filter
なのはapply_filter
なものだけです。あなたはadd_filter('whatever','abc');
を使うことができますが、どこかにapply_filter('whatever',...
がなければ何も起こりません。
ほとんど同じことがadd_action
/do_action
にも当てはまりますが、アクションは値を返すのではなく、何かをするためのものです。
フックはページロードのさまざまな時点で、また関数やメソッドのさまざまな場所で実行されます。たとえば、save_post
は wp_insert_post
の末尾付近で実行され、pre_get_posts
はget_posts
クラスの WP_Query
メソッドの先頭付近で実行されます。他のものは ページロードの途中で そして関数やメソッドではまったく実行されません。それらは、情報を変更または追加する、あるいは他の機能を実行する、ページをリダイレクトするなどの必要性がある場合はいつでも(開発者によって決定されるように)実行します。
私はあなたがそれが少し間違っていると思います。
フィルタとアクションは、フックに「割り当てる」機能です。多くの場所でWordPressはdo_action
またはapply_filter
関数を呼び出します。これらの関数の最初のパラメータはフック名です。
例えばあなたが見るとき
do_action('blabla');
これは、 'blabla'フックに割り当てられているすべてのアクションが呼び出されることを意味します。
add_filter
とadd_action
は何も上書きしません。それはまさにそれが言うことをします - それは与えられたフックにあなたの機能を割り当てます。
だからあなたのステップ2。フィルタget_taco
を静的な値chicken
に適用する。そしてフィルタを適用することによって、私はそれがget_taco
フックに割り当てられたすべての関数を呼び出すことを意味します。
あなたのステップ3.は新しい関数my_special_order
を作成し、それをget_taco
フックに割り当てます。 apply_filter('get_taco')
呼び出しがあるたびに、あなたの関数が呼び出されます。
与えられたフックに割り当てられたフィルタ/アクションがなければ、なにもしません。
あなたはここでこのトピックについてもっと読むことができます: http://codex.wordpress.org/Plugin_API