嗨,我使用此插件创建事件https://wordpress.org/plugins/modern-events-calendar-lite/
这是在我的android应用程序上发送通知。https://github.com/dream-space/wp-fcm
我对插件进行了修改,以便在3天前发送即将发生的事件的提醒通知。修改如下所示。
`
function fcm_main_get_option_event(){
$options = get_option(\'fcm_event_setting\');
if(!is_array($options)){
$options = array(
\'event_check\' => 0,
);
}
return $options;
}
if (!wp_next_scheduled(\'my_task_hook\')) {
wp_schedule_event( time(), \'daily\', \'my_task_hook\' );
}
add_action ( \'my_task_hook\', \'my_task_function\' );
`
和发送通知的功能:
`
function my_task_function() {
$options = get_option(\'fcm_event_setting\');
// $is_send_notif = false;
if(!empty($options[\'event_check\'])) {
$is_send_notif = true;
$args = array(
\'post_type\' => \'mec-events\',
\'post_status\' => \'publish\',
\'posts_per_page\' => -1,
);
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
$datetime2 = date("Y-m-d");
$my_meta = get_post_meta(get_the_ID(), \'mec_start_date\', true );
$diff = strtotime($my_meta) - strtotime($datetime2);
$gap = abs(round($diff / 86400));
if($gap == \'3\'){
$is_send_notif = true;
$title = \'Потсетување\';
$event = "POTSETNIK 1";
$body = \'For \'.$gap.\' days :\' .get_the_title();
}
if($is_send_notif == true){
$message = array(
\'title\' => $title,
\'content\' => \'For \'.$gap.\' days:\' .get_the_title()
);
$total = fcm_data_get_all_count();
if($total <= 0) return;
$respon = fcm_notif_divide_send("", $total, $message);
fcm_data_insert_log($title, $content, "ALL", $event, $respon[\'status\']);
}
endwhile;
wp_reset_postdata();
}
}
`
这项工作,但在活动前3天和活动后3天发送通知。
问题出在哪里。
谢谢
SO网友:Jacob Peattie
这是因为您的代码是显式编写的,可以忽略事件是否发生在过去或未来。
请参见此处:
$diff = strtotime($my_meta) - strtotime($datetime2);
如果活动日期在将来,
$diff
将是一个正数,但如果是过去的话,它将是一个负数。接下来的一行是:
$gap = abs(round($diff / 86400));
整个要点
abs()
函数用于确保数字是正数。这意味着无论事件发生在过去还是未来,结果都将完全相同。
如果您只想为即将到来的事件发送通知,那么您需要知道该数字是否为负数。所以只需删除abs()
确保您只检查3
而不是-3
:
$diff = strtotime($my_meta) - strtotime($datetime2);
$gap = round($diff / 86400);
if($gap === 3){
// etc.
}