WordPress开发,我们经常在更新文章或分类时使用save_post或create_post_tag等hooks来添加一些额外的数据。这些钩子在发布或更新数据时触发,如果时间处理不当,就会出现死循环,导致更新数据时死循环。例如,当我们保存一个帖子时,我们需要将一个函数挂接到save_post挂钩上。该函数的作用是修改帖子标题,在帖子标题前加上作者姓名。我们通过调用wp_update_post函数来显示此修改。示例代码如下。add_action('save_post','wprs_update_post');函数wprs_update_post($post_id){$title=get_the_title($post_id);$title="一把刀:".$标题;$args=['ID'=>$post_id,'post_title'=>$title,];wp_update_post($args);}在上面的代码中,“save_post”挂钩发生在调用wp_update_post函数期间。通过“save_post”钩子,我们再次调用wp_update_post函数。在此函数中,“save_post”挂钩再次运行。于是,程序继续不知疲倦地运行着。有经验的程序员可能很容易发现这个问题,但计算机并不知道这是一个死循环。我们不能责怪计算机,毕竟它只是一台没有头脑的机器。我们能做的就是在开发过程中尽量小心谨慎,避免死循环。那么,如何解决WordPress中的这个无限循环呢?其实方法很简单。如何避免WordPress中的死循环还是上面的代码,我们稍微修改一下就可以完美的避免这个死循环。以下是修改后的代码。与上面无限循环的代码相比,我们只增加了两行。add_action('save_post','wprs_update_post');functionwprs_update_post($post_id){//获取帖子标题并在帖子标题前添加作者$title=get_the_title($post_id);$title="一把刀:".$标题;$args=['ID'=>$post_id,'post_title'=>$title,];//更新帖子remove_action('save_post','wprs_update_post');wp_update_post($args);add_action('save_post','wprs_update_post');}原理很简单。在运行“wp_update_post”函数之前,我们先卸载挂在“save_post”钩子上的函数,造成死循环,这样就不会出现“wprs_update_post”函数重复执行的情况。更新文章结束后,我们将再次挂载此钩子以供后续使用。如果在WordPress开发中遇到死循环问题,不妨参考上面的代码进行修改,这样既可以实现我们需要的功能,又不会造成死循环问题。
