Dưới đây là một số suy nghĩ ngẫu nhiên về điều này:
Câu hỏi 1
Chúng tôi đã gửi bao nhiêu tiền cho bà?
Để tải 100 trang, chúng tôi đã gửi cho cô ấy 100 x $ 1 = 100 đô la.
Ở đây chúng tôi thực sự có nghĩa là 100 x do_action( 'init' )
các cuộc gọi.
Chúng tôi đã thêm hai lần với:
add_action( 'init','send_money_to_grandma' );
add_action( 'init','send_money_to_grandma' );
bởi vì các cuộc gọi lại và ưu tiên (mặc định 10) là giống hệt nhau .
Chúng ta có thể kiểm tra làm thế nào add_action
chỉ là một trình bao bọc để add_filter
xây dựng $wp_filter
mảng toàn cầu :
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;
}
Tuy nhiên, nếu chúng tôi thay đổi mức độ ưu tiên:
add_action( 'init','send_money_to_grandma', 9 );
add_action( 'init','send_money_to_grandma', 10 );
sau đó chúng tôi sẽ gửi cho cô ấy 2 x $ 1 mỗi lần tải trang hoặc $ 200 cho 100 lần tải trang.
Tương tự nếu các cuộc gọi lại khác nhau:
add_action( 'init','send_money_to_grandma_1_dollar' );
add_action( 'init','send_money_to_grandma_also_1_dollar' );
Câu hỏi 2
Nếu chúng tôi muốn đảm bảo chúng tôi chỉ gửi cho bà ngoại $ 1
Nếu chúng tôi chỉ muốn gửi nó một lần cho mỗi lần tải trang , thì điều này sẽ làm điều đó:
add_action( 'init','send_money_to_grandma' );
bởi vì init
móc chỉ được bắn một lần. Chúng tôi có thể có các móc khác kích hoạt nhiều lần trên mỗi lần tải trang.
Hãy gọi:
add_action( 'someaction ','send_money_to_grandma' );
Nhưng điều gì xảy ra nếu someaction
bắn 10 lần cho mỗi lần tải trang?
Chúng ta có thể điều chỉnh send_money_to_grandma()
chức năng với
function send_money_to_grandma()
{
if( ! did_action( 'someaction' ) )
internetofThings("send grandma","$1");
}
hoặc sử dụng biến tĩnh làm bộ đếm:
function send_money_to_grandma()
{
static $counter = 0;
if( 0 === $counter++ )
internetofThings("send grandma","$1");
}
Nếu chúng tôi chỉ muốn chạy nó một lần (bao giờ!), Thì chúng tôi có thể đăng ký một tùy chọn trong wp_options
bảng thông qua API Tùy chọn :
function send_money_to_grandma()
{
if( 'no' === get_option( 'sent_grandma_money', 'no' ) )
{
update_option( 'sent_grandma_money', 'yes' );
internetofThings( "send grandma","$1" );
}
}
Nếu chúng tôi muốn gửi tiền cho cô ấy mỗi ngày một lần, thì chúng tôi có thể sử dụng API tạm thời
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 );
}
}
hoặc thậm chí sử dụng wp-cron.
Lưu ý rằng bạn có thể có các cuộc gọi ajax. cũng.
Có nhiều cách để kiểm tra, ví dụ như với DOING_AJAX
Cũng có thể có các chuyển hướng, có thể làm gián đoạn dòng chảy.
Sau đó, chúng tôi có thể muốn giới hạn chỉ phụ trợ, is_admin()
hoặc không : ! is_admin()
.
Câu hỏi số 3
Đây có phải là điều mà các nhà phát triển plugin lo lắng?
vâng điều này rất quan trọng
Nếu chúng tôi muốn làm cho bà của chúng tôi rất hạnh phúc, chúng tôi sẽ làm:
add_action( 'all','send_money_to_grandma' );
nhưng điều này sẽ rất tệ cho hiệu suất ... và ví của chúng tôi ;-)