安排每月第二个星期四举行活动

时间:2012-02-07 作者:Josh Allen

我正在开发一个电子邮件系统,他们希望它能自动在每月的第二个星期四发送电子邮件。我已经整理好PHP,并准备发出回调来发送电子邮件,但在cron和安排事件方面,我是一个完全的新手。

基本上,我有:

echo date(\'M d Y\', strtotime(\'first thursday this month\'));
echo date(\'M d Y\', strtotime(\'-5 hours\'));
if(date(\'MdY\',strtotime(\'first thursday this month\')) == date(\'MdY\',strtotime(\'-5 hours\'))){
    send_emails();
}else{
    echo \'DO NOT SEND EMAILS\';
}
因此,它会检查当前日期(时区为5小时)是否是一个月的“第二个”星期四(PHP出错并在该日期上加上一周)。

我不确定我是否需要这样做来安排活动或做些什么。目前,它在访问插件页面时运行,但我希望它是自己的进程,无论是否访问页面都可以运行。

非常感谢您的帮助!

谢谢

1 个回复
最合适的回答,由SO网友:Ian Dunn 整理而成

WordPress允许您添加定制的cron时间表,这通常是您在这种情况下想要做的,与wp_schedule_event(). 但是,它们是基于时间间隔而不是特定的日期/时间工作的。例如,

add_filter( \'cron_schedules\', \'addCustomCronIntervals\' );
function addCustomCronIntervals( $schedules )
{
    $schedules[ self::PREFIX . \'debug\' ] = array(
        \'interval\'  => 60 * 2,
        \'display\'   => \'Every 2 minutes\'
    );

    return $schedules;
}
因此,您可以使用当前的方法来实现这一点,但您还需要设置一个瞬态,以确保不会每次加载页面时都发送电子邮件。

$firstThursday = date_i18n( \'Ymd\', strtotime( \'first thursday this month\', current_time( \'timestamp\' ) ) );
$today = date_i18n( \'Ymd\', current_time( \'timestamp\' ) );
if( strcmp( $firstThursday, $today ) === 0 && ! get_transient( \'alreadySentEmails\' ) )
{
    send_emails();
    set_transient( \'alreadySentEmails\', 60 * 60 * 24 );
}
请注意,您应该使用WordPress\'date_i18n()current_time() 函数而不是PHPdate()time() - 哪一个strtotime() 隐式调用-,以便正确处理时区。

还请注意relative formats 是PHP 5.3的新手,因此请确保您的服务器是最新的。

结束

相关推荐

Timepicker-插件没有显示-DatePicker工作正常吗?

UPDATE看来这可能是一个问题, $(\"#opening_time\").datetimepicker(); $(\"#opening_time_end\").timepicker(); $(\"#closing_time_end\").timepicker(); 如果有datetimepicker 在a之前呼叫timepicker 然后timepicker 不起作用。我不明白,因为我有datepicker 工作和一切都是以同样的方式包含的。我错过了什么?成功地添加