三分钟热度教程:WordPress插件开发之钩子回调函数被执行多次

11月/25日/WordPress/浏览 107

因为,我只能保持三分钟热度,所以,知识点一定要在三分钟之内讲完……


在 WordPress 中,一些钩子在一次请求中就会执行多次,比如 save_post 钩子。如果,我们在 save_post 钩子上添加了回调函数,这个函数也会被执行多次。


怎么才能,避免自己的回调函数被多次执行呢?首先想到的估计是全局变量 - 搞一个全局的计数变量,执行过一次后就不执行了。


示例代码:


$zhuige_callback_times = 0;
function zhuige_callback()
{
    global $zhuige_callback_times;
    if ($zhuige_callback_times != 0) {
        return;
    }
    $zhuige_callback_times ++;

    // ...
}
add_action('save_post', 'zhuige_callback');


其实,WordPress早就造好轮子了:did_action 函数,可以返回指定钩子执行的次数。要达到我们的要求,只要在钩子第一次执行时执行,其他直接返回即可。


function zhuige_callback()
{
    if (did_action('save_post') !== 1) {
        return;
    }

    // ...
}
add_action('save_post', 'zhuige_callback');


瞄一眼 did_action 函数的源码:


function did_action($hook_name)
{
    global $wp_actions;

    if (!isset($wp_actions[$hook_name])) {
        return 0;
    }

    return $wp_actions[$hook_name];
}


原来也是全局变量……


发表评论

暂无评论,抢个沙发...

客服 工单