在特定时间执行一次我的函数

时间:2016-09-26 作者:Rick Spanjers

在我们的WordPress网站上,我们正在使用Events Manager Pro插件。这允许我们创建事件。然而,我们需要在活动结束日期后1天向与会人员发送一封感谢电子邮件。

我已经写好了:

add_action( \'em_bookings_added\', \'mail_after_completion\' );
function mail_after_completion (){

global $wpdb;

/*Get the email of who booked */
$person_id = $wpdb->get_var("SELECT person_id FROM mbc_em_bookings ORDER BY booking_date DESC LIMIT 1");
$person_email = $wpdb->get_var( $wpdb->prepare("SELECT user_email FROM mbc_users WHERE ID = %s",$person_id));

/*Get the event finish date */
$event_id = $wpdb->get_var("SELECT event_id FROM mbc_em_bookings ORDER BY booking_date DESC LIMIT 1");
$event_end_date = $wpdb->get_var( $wpdb->prepare("SELECT event_end_date FROM mbc_em_events WHERE event_id = %s",$event_id));


/*Send E-mail to the person who just booked */


    $to = \'$person_email\';  
    $subject = "Thank you for attending";
    $content = "Thank you for attending the event at $event_end_date";
    $status = wp_mail($to, $subject, $content);

    }
 ?>
无论何时预订活动,此功能都会向某人发送电子邮件。然而,我希望这发生在活动结束后1天。我调查了CRON和wp_schedule_single_event() 很多,但似乎不知道如何正确使用它。

如果有人能对此有所了解,我们将不胜感激

亲切的问候!

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

所以要点是你有你的功能,你把它挂在一个动作中,然后你告诉WordPress在它的时间表上的某个时间启动这个动作。您可以使用的内置明细表包括:

  • hourly
  • twicedaily
  • daily
If you wanted to fire your event every hour, 您可以这样做:

<?php

wp_schedule_event(time(), \'hourly\', \'em_bookings_added\');
If you want to get a task to run at a specific time, 您只需传递一个unix时间戳作为第一个参数:

<?php

$future_time = mktime(10,0,0,30,9,2016); // 2016-09-30 10:00:00 UTC
wp_schedule_event($future_time, \'hourly\', \'em_bookings_added\');
如果有任何要传递给操作的参数,可以将其作为第四个参数传递。

您还可以指定希望操作运行的时间,这是第一个参数。但是请注意,WordPress cron依赖于访问站点的人来运行,并不像真正的cron工作那样准确;无访问者==没有cron运行。

然而,解决这个问题的一种方法是在您自己的服务器上设置一个cron作业来触发wp-cron.php 手动:

摘自Tom McFarlin的《真棒》article on WordPress cron

// wp-config.php
define(\'DISABLE_WP_CRON\', true);  

// in your crontab
/15 * * * wget -q -O - http://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
更多信息,请访问https://codex.wordpress.org/Function_Reference/wp_schedule_event