İşte bu konuda bazı rastgele düşünceler:
Soru 1
Büyükanneme ne kadar para gönderdik?
100 sayfa yüklemesi için ona 100 x $ 1 = 100 $ gönderdik.
Burada aslında 100 x do_action( 'init' )
çağrı demek istiyoruz .
İki kez eklediğimiz önemli değildi:
add_action( 'init','send_money_to_grandma' );
add_action( 'init','send_money_to_grandma' );
çünkü geri aramalar ve öncelikler (varsayılan 10) aynıdır .
Küresel diziyi add_action
oluşturan add_filter
bunun nasıl bir sarıcı olduğunu kontrol edebiliriz $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;
}
Ancak önceliği değiştirirsek:
add_action( 'init','send_money_to_grandma', 9 );
add_action( 'init','send_money_to_grandma', 10 );
sayfa başına 2 x 1 TL veya 100 sayfa yüklemesi için 200 TL göndeririz.
Farklı yerlerde geri aramalar varsa:
add_action( 'init','send_money_to_grandma_1_dollar' );
add_action( 'init','send_money_to_grandma_also_1_dollar' );
Soru 2
Sadece büyükannem $ 1 gönderdiğimizden emin olmak istiyorsak
Sayfa yükü başına yalnızca bir kez göndermek istiyorsak, bunu yapmalıyız:
add_action( 'init','send_money_to_grandma' );
çünkü init
kanca sadece bir kez ateşlenir. Sayfa yükleme başına birçok kez tetiklenen başka kancalarımız olabilir.
Hadi arayalım:
add_action( 'someaction ','send_money_to_grandma' );
ancak someaction
sayfa yükleme başına 10 kez tetiklenirse ne olur ?
send_money_to_grandma()
İşlevi ayarlayabiliriz
function send_money_to_grandma()
{
if( ! did_action( 'someaction' ) )
internetofThings("send grandma","$1");
}
veya sayaç olarak statik bir değişken kullanın :
function send_money_to_grandma()
{
static $counter = 0;
if( 0 === $counter++ )
internetofThings("send grandma","$1");
}
Yalnızca bir kez (hiç!) Çalıştırmak istiyorsak wp_options
, Seçenekler API'sı aracılığıyla tabloya bir seçenek kaydedebiliriz :
function send_money_to_grandma()
{
if( 'no' === get_option( 'sent_grandma_money', 'no' ) )
{
update_option( 'sent_grandma_money', 'yes' );
internetofThings( "send grandma","$1" );
}
}
Parasını her gün bir kez göndermek istiyorsak, Geçici API'yı kullanabiliriz
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 );
}
}
hatta wp-cron kullanın.
Ajax çağrılarınız olabileceğini unutmayın. de.
Bunları kontrol etmenin yolları vardır, örneğin DOING_AJAX
Ayrıca akışı kesintiye uğratabilecek yönlendirmeler de olabilir.
Sonra sadece, arka uçta kısıtlamak isteyebilirsiniz is_admin()
ya da değil: ! is_admin()
.
Soru 3
Bu eklenti geliştiricilerinin endişe ettiği bir şey mi?
evet bu önemlidir.
Büyükannemizi çok mutlu etmek istiyorsak:
add_action( 'all','send_money_to_grandma' );
ama bu performans için çok kötü olurdu ... ve cüzdanımız ;-)