web-dev-qa-db-ja.com

同じアクションに複数回フックするとメモリが消えますか?

現在私はpre_get_posts上で動く3つの関数を持っています。私はこれを次のように呼びます。

add_action( 'pre_get_posts', 'private_groups' );
add_action( 'pre_get_posts', 'search_results' );
add_action( 'pre_get_posts', 'name_profiles' );

これにより、私は関数をきちんと分離した状態に保つことができますが、一度組み合わせた関数を呼び出すのではなく、リソースを使い果たすのではなく、同じアクションを3回呼び出すのですか。

7
SinisterBeard

私はあなたが意味すると思います

add_action( 'pre_get_posts', 'private_groups' );
add_action( 'pre_get_posts', 'search_results' );
add_action( 'pre_get_posts', 'name_profiles' );

versus

add_action( 'pre_get_posts', 'combined_into_single_callback' );

あなたはちょうどを使用して違いを確認することができます。 memory_get_usage()timer_stop() 。それを手助けするためのたくさんの良いプラグインがあります。

それらは無関係なコールバックであり、おそらく保守がより簡単であるように思われるので、私は最初のものに行くと言うでしょう。

private_groups()search_results()そしてname_profiles()combined_into_single_callback()の間で、あなたがそこで実行するコールバック関数にほとんど依存すると私は予想するでしょう。

フックの設定自体は、グローバル配列内の3つの新しい追加要素にすぎないため、リソースを使い果たしてはいけません。

pre_get_postsを使用するときに注意する必要があるのは、対応するWP_Queryインスタンスのみをターゲットとし、すべてのインスタンスに対して高価なコードブロックを実行しないようにすることです。

5
birgire