Berikut adalah beberapa pemikiran acak tentang ini:
Pertanyaan 1
Berapa banyak uang yang kami kirim ke nenek?
Untuk 100 halaman memuat, kami mengiriminya 100 x $ 1 = $ 100.
Di sini yang kita maksud sebenarnya adalah 100 x do_action( 'init' )
panggilan.
Tidak masalah bahwa kami menambahkannya dua kali dengan:
add_action( 'init','send_money_to_grandma' );
add_action( 'init','send_money_to_grandma' );
karena callback dan prioritas (default 10) identik .
Kita dapat memeriksa bagaimana add_action
ini hanyalah pembungkus untuk add_filter
yang membangun $wp_filter
array global :
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;
}
Namun, jika kami mengubah prioritas:
add_action( 'init','send_money_to_grandma', 9 );
add_action( 'init','send_money_to_grandma', 10 );
maka kami akan mengirimnya 2 x $ 1 per halaman memuat atau $ 200 untuk 100 halaman memuat.
Sama jika panggilan baliknya berbeda:
add_action( 'init','send_money_to_grandma_1_dollar' );
add_action( 'init','send_money_to_grandma_also_1_dollar' );
Pertanyaan # 2
Jika kami ingin memastikan kami hanya mengirim nenek $ 1
Jika kami hanya ingin mengirimnya sekali per pemuatan halaman , maka ini harus dilakukan:
add_action( 'init','send_money_to_grandma' );
karena init
kailnya hanya sekali ditembakkan. Kami mungkin memiliki kait lain yang menyala berkali-kali per pemuatan halaman.
Mari kita panggil:
add_action( 'someaction ','send_money_to_grandma' );
tetapi apa yang terjadi jika someaction
kebakaran 10 kali per memuat halaman?
Kita dapat menyesuaikan send_money_to_grandma()
fungsi dengan
function send_money_to_grandma()
{
if( ! did_action( 'someaction' ) )
internetofThings("send grandma","$1");
}
atau gunakan variabel statis sebagai penghitung:
function send_money_to_grandma()
{
static $counter = 0;
if( 0 === $counter++ )
internetofThings("send grandma","$1");
}
Jika kami hanya ingin menjalankannya sekali saja!, Maka kami mungkin mendaftarkan opsi di wp_options
tabel melalui API Opsi :
function send_money_to_grandma()
{
if( 'no' === get_option( 'sent_grandma_money', 'no' ) )
{
update_option( 'sent_grandma_money', 'yes' );
internetofThings( "send grandma","$1" );
}
}
Jika kami ingin mengirim uang kepadanya sekali setiap hari, maka kami dapat menggunakan API Sementara
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 );
}
}
atau bahkan menggunakan wp-cron.
Perhatikan bahwa Anda mungkin memiliki panggilan ajax. demikian juga.
Ada beberapa cara untuk memeriksanya, misalnya dengan DOING_AJAX
Mungkin juga ada pengalihan, yang dapat mengganggu aliran.
Maka kita mungkin ingin membatasi untuk backend saja, is_admin()
atau tidak: ! is_admin()
.
Pertanyaan # 3
Apakah ini sesuatu yang dikhawatirkan pengembang plugin?
ya ini penting.
Jika kita ingin membuat nenek kita sangat bahagia, kita akan melakukannya:
add_action( 'all','send_money_to_grandma' );
tapi ini akan sangat buruk untuk kinerja ... dan dompet kami ;-)