I want to send a reminder email “x” days after an initial email was send.
The admin can choose after how many days they want to send a reminder (after the date of the initial mail).
This amount is stored in this function and returns an integer (for example 14)
public function getAmountDayReminder(): int { return get_field('send_reminder_after_amount_day', $this->getId()); }
The date/time of that the initial email was send is stored in this function
public function setWasNotified() { update_post_meta($this->getId(), self::META_WAS_NOTIFIED, time()); }
Now I want to write an if statement so that the reminder will be send out “x” days after the date of the initial mail was send.
I guess it will look something like this:
if(!$entry->wasNotified() && !$entry->wasReminded()) { $remindDate = $entry->setwasNotified() + $this->getAmountDayReminder(); if ($remindDate === //current time) { $entry->remind(); } }
This won’t work because I have to covert the output of setwasNotified()
and getAmountDayReminder()
so that I can add them.
Is this a good solution and how would I execute this exactly?
Advertisement
Answer
I would use the DateTime modify to add getAmountDayReminder() to the time where the first notification has been sent and then compare this to the current time.
Something like that:
<?php $reminded = DateTime::createFromFormat( 'U', $entry->setwasNotified()); $now = new DateTime(); if ($now > $reminded->modify($this->getAmountDayReminder() .' day')) { print('Need to send reminder'); } else { print('Do not send reminder'); }
Do not forget to store whether you already sent the reminder. And doing such things in a cron job is probably a good idea.