2015-08-21 81 views
1
register_activation_hook(__FILE__, 'cron_post_activation'); 
add_action('post_event', 'cron_post'); 
function cron_post_activation() { 
    wp_schedule_event(time(), 'hourly', 'post_event'); 
} 

function cron_post() { 
//Do stuff 
} 

这不是默认情况下工作 - 找到困难的方式!Wordpress cron aka时间表?

调试了几个小时我的几个帖子声称,你需要添加下一行到WP-config.php文件绊倒后:

define('DISABLE_WP_CRON', true); 

1)什么是背后的逻辑是什么?禁用某些东西以使其工作对我来说没有意义。

2)如何设置自己的间隔?文档指出您只能使用'每小时','双向'和'每日'。

回答

1

是的,您需要禁用WP_CRON,但是,您还需要在WordPress之外设置自己的cron作业来触发事件。默认情况下,WP的cron功能只有在有人浏览网站时才会启动,即使这样也不能保证它能够准时运行。如果您需要在特定时间或间隔发生某些事情,它根本没有用。

假设你是一个* nix的服务器,我对如何做到这一点找到了最好的解释上是:

http://bitswapping.com/2010/10/using-cron-to-trigger-wp-cron-php/

它的要点是你关闭触发的WordPress的方式其自己的调度程序,然后直接按照您在服务器上使用cron程序设置的时间表访问该系统。它所做的是建立一个准系统WP环境,在其中执行任务而不发送任何HTML。如果您的工作设置为每分钟访问一次,这可以比直接ping您的网站主页带来更好的性能。

而关于“关闭它使其工作”的观点 - 是的,这似乎违反直觉。实际上关掉的是检查是否执行cron任务的系统。通过解决这个问题,你基本上正在建立一个直接通往该系统的渠道,并告诉它每当你告诉它时都要做这项工作。您正在将系统中的差异排除在外。

+0

需要确定的问题:如果我使用“wp_schedule_event”,是否需要禁用它? – AWA

+0

它应该。但是,如果您想在不同于所提供的每小时,每天,每两小时选项的情况下使用wp_schedule_event()函数,则需要使用'cron_schedules'过滤器设置自定义时间表。你可以在这里了解更多: https://codex.wordpress.org/Plugin_API/Filter_Reference/cron_schedules 如果你不需要计时,并且只是希望在每次cron作业加载站点时运行一些东西,那么你可以编写你自己的动作,并让它在每个负载下执行。 –