Hier sind einige zufällige Gedanken dazu:
Frage 1
Wie viel Geld haben wir an Oma geschickt?
Für 100 Seiten haben wir ihr 100 x $ 1 = $ 100 geschickt.
Hier meinen wir eigentlich 100 x do_action( 'init' )
Anrufe.
Es war egal, dass wir es zweimal hinzugefügt haben mit:
add_action( 'init','send_money_to_grandma' );
add_action( 'init','send_money_to_grandma' );
weil die Rückrufe und Prioritäten (Standard 10) identisch sind .
Wir können überprüfen, wie das add_action
nur ein Wrapper für add_filter
das globale $wp_filter
Array ist:
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;
}
Wenn wir jedoch die Priorität geändert haben:
add_action( 'init','send_money_to_grandma', 9 );
add_action( 'init','send_money_to_grandma', 10 );
Dann würden wir ihr 2 x 1 USD pro Seite oder 200 USD für 100 Seiten senden.
Dasselbe gilt, wenn die Rückrufe unterschiedlich waren:
add_action( 'init','send_money_to_grandma_1_dollar' );
add_action( 'init','send_money_to_grandma_also_1_dollar' );
Frage 2
Wenn wir sicherstellen wollen, dass wir nur Oma $ 1 schicken
Wenn wir es nur einmal pro Laden der Seite senden möchten, sollte dies folgendermaßen aussehen:
add_action( 'init','send_money_to_grandma' );
weil der init
haken nur einmal abgefeuert wird. Möglicherweise gibt es andere Hooks, die pro Seitenladevorgang mehrmals ausgelöst werden.
Lass uns anrufen:
add_action( 'someaction ','send_money_to_grandma' );
aber was passiert, wenn someaction
10 mal pro Seite gezündet wird?
Wir könnten die send_money_to_grandma()
Funktion mit anpassen
function send_money_to_grandma()
{
if( ! did_action( 'someaction' ) )
internetofThings("send grandma","$1");
}
oder verwenden Sie eine statische Variable als Zähler:
function send_money_to_grandma()
{
static $counter = 0;
if( 0 === $counter++ )
internetofThings("send grandma","$1");
}
Wenn wir es nur einmal (je!) Ausführen möchten, registrieren wir möglicherweise eine Option in der wp_options
Tabelle über die 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" );
}
}
Wenn wir ihr einmal täglich Geld senden möchten, können wir die Transient-API verwenden
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 );
}
}
oder auch den wp-cron benutzen.
Beachten Sie, dass Sie möglicherweise Ajax-Aufrufe haben. auch.
Es gibt Möglichkeiten, diese zu überprüfen, z. B. mit DOING_AJAX
Es kann auch Umleitungen geben, die den Fluss unterbrechen können.
Dann könnten wir nur an das Backend zu beschränken, is_admin()
oder nicht: ! is_admin()
.
Frage 3
Ist das etwas, worüber sich Plugin-Entwickler Sorgen machen?
ja das ist wichtig
Wenn wir unsere Oma sehr glücklich machen wollen, machen wir:
add_action( 'all','send_money_to_grandma' );
aber das wäre sehr schlecht für die leistung ... und unsere brieftasche ;-)