นี่คือความคิดสุ่มเกี่ยวกับสิ่งนี้:
คำถามที่ 1
เราส่งเงินให้คุณยายเท่าไหร่?
สำหรับการโหลด 100 หน้าเราได้ส่ง 100 x $ 1 = $ 100 ให้เธอ
ที่นี่เราหมายถึงการ100 x do_action( 'init' )
โทร
ไม่สำคัญว่าเราจะเพิ่มสองครั้งด้วย:
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 ต่อหน้าโหลดหรือ $ 200 สำหรับการโหลด 100 หน้า
เหมือนกันถ้าการเรียกกลับที่แตกต่างกัน:
add_action( 'init','send_money_to_grandma_1_dollar' );
add_action( 'init','send_money_to_grandma_also_1_dollar' );
คำถาม # 2
ถ้าเราต้องการให้แน่ใจว่าเราส่งยาย $ 1 เท่านั้น
หากเราต้องการส่งเพียงครั้งเดียวต่อการโหลดหน้าเว็บสิ่งนี้ควรทำ:
add_action( 'init','send_money_to_grandma' );
เพราะinit
เบ็ดถูกยิงเพียงครั้งเดียว เราอาจมีตะขออื่น ๆ ที่ยิงได้หลายครั้งต่อการโหลดหน้าเว็บ
โทรมา:
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
ตารางผ่านทางAPI ตัวเลือก :
function send_money_to_grandma()
{
if( 'no' === get_option( 'sent_grandma_money', 'no' ) )
{
update_option( 'sent_grandma_money', 'yes' );
internetofThings( "send grandma","$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' );
แต่สิ่งนี้จะไม่ดีสำหรับประสิทธิภาพ ... และกระเป๋าเงินของเรา ;-)