이것에 대한 임의의 생각은 다음과 같습니다.
질문 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 달러 또는 100 페이지로드시 200 달러를 보냅니다.
콜백이 다른 경우 동일합니다.
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을 사용하십시오.
아약스 호출이있을 수 있습니다. 게다가.
예를 들어 DOING_AJAX
흐름을 방해 할 수있는 리디렉션이있을 수도 있습니다.
그런 다음 백엔드로만 제한 is_admin()
하거나 제한 하지 않을 수 ! is_admin()
있습니다.
질문 # 3
이것이 플러그인 개발자들이 걱정하는 것입니까?
예, 이것이 중요합니다.
할머니를 매우 행복하게하려면 다음과 같이하십시오.
add_action( 'all','send_money_to_grandma' );
그러나 이것은 성능이 매우 나쁠 것입니다 ... 그리고 지갑 ;-)