これに関するいくつかのランダムな考えを以下に示します。
質問1
おばあちゃんにいくら送金しましたか?
100ページの読み込みに対して、100 x $ 1 = $ 100を送信しました。
ここで実際に100 x do_action( 'init' )
呼び出しを意味します。
次のように2回追加してもかまいません。
add_action( 'init','send_money_to_grandma' );
add_action( 'init','send_money_to_grandma' );
なぜなら、コールバックと優先度(デフォルト10)は同一だからです。
グローバルアレイを構築するadd_action
ための単なるラッパーでadd_filter
ある方法を確認できます$wp_filter
。
function add_filter( $tag, $function_to_add, $priority = 10, $accepted_args = 1 ) {
global $wp_filter, $merged_filters;
$idx = _wp_filter_build_unique_id($tag, $function_to_add, $priority);
$wp_filter[$tag][$priority][$idx] = array(
'function' => $function_to_add,
'accepted_args' => $accepted_args
);
unset( $merged_filters[ $tag ] );
return true;
}
ただし、優先度を変更した場合:
add_action( 'init','send_money_to_grandma', 9 );
add_action( 'init','send_money_to_grandma', 10 );
ページの読み込みごとに2 x 1ドル、100ページの読み込みごとに200ドルを送ります。
コールバックが異なる場合も同じです:
add_action( 'init','send_money_to_grandma_1_dollar' );
add_action( 'init','send_money_to_grandma_also_1_dollar' );
質問2
おばあちゃんに$ 1だけを送信するようにしたい場合
ページの読み込みごとに1回だけ送信する場合は、次のようにします。
add_action( 'init','send_money_to_grandma' );
なぜならinit
フックは1回のみ起動されます。ページの読み込みごとに何度も起動する他のフックがあるかもしれません。
呼び出しましょう:
add_action( 'someaction ','send_money_to_grandma' );
しかし、someaction
ページの読み込みごとに10回起動するとどうなりますか?
send_money_to_grandma()
関数を調整できます
function send_money_to_grandma()
{
if( ! did_action( 'someaction' ) )
internetofThings("send grandma","$1");
}
または、カウンターとして静的変数を使用します。
function send_money_to_grandma()
{
static $counter = 0;
if( 0 === $counter++ )
internetofThings("send grandma","$1");
}
一度だけ(一度も)実行したい場合はwp_options
、Options APIを使用してテーブルにオプションを登録します。
function send_money_to_grandma()
{
if( 'no' === get_option( 'sent_grandma_money', 'no' ) )
{
update_option( 'sent_grandma_money', 'yes' );
internetofThings( "send grandma","$1" );
}
}
毎日1回送金したい場合は、Transient APIを使用できます
function send_money_to_grandma()
{
if ( false === get_transient( 'sent_grandma_money' ) ) )
{
internetofThings( "send grandma","$1" );
set_transient( 'sent_grandma_money', 'yes', DAY_IN_SECONDS );
}
}
またはwp-cronを使用します。
ajax呼び出しがある場合があることに注意してください。同様に。
それらをチェックする方法があります、例えば DOING_AJAX
フローを中断する可能性のあるリダイレクトもあります。
次に、バックエンドのみに制限したい is_admin()
場合とそうでない場合があります! is_admin()
。
質問#3
これはプラグイン開発者が心配するものですか?
はい、これは重要です。
おばあちゃんをとても幸せにしたい場合は、次のようにします。
add_action( 'all','send_money_to_grandma' );
しかし、これはパフォーマンスにとって非常に悪いでしょう...そして私たちの財布;-)