How can I send the mail once?

时间:2021-06-08 作者:ddisdevelpgelis

我正在开发一个市场插件。如果供应商在我设定的日期范围内不接受订单,订单将被取消。为此,我确定了订单日期+3天的时间段。到目前为止,一切顺利。

例如,
截止日期($last\\u time):1623593126
今天:$now/(unix Today)
订单代码:$Order\\u number

根据上述场景,我正在使用wp\\U邮件向一个电子邮件地址发送一封电子邮件,表明订单未被接受。问题从这里开始。Wordpress邮件无法按我的要求工作。如果实现了该场景,即如果供应商不接受订单,则会发送一封电子邮件。但是,每次刷新页面时,此邮件都会一次又一次出现。我如何防止这种情况?因此,邮件只能寄一次。如果你能帮忙,我会很高兴的。我已经搜索了大约3天,但找不到解决方案。我的代码如下:

foreach ( $user_orders as $order ) {

//...codes...

if($now>$last_time) {
    $order_number = $order->get_order_number(); 
    $to = \'[email protected]\';
    $subject = \'Failed order \';
    $body = \'#\'.$order_number. \' order number failed;
    $headers = array(\'Content-Type: text/html; charset=UTF-8\');
    wp_mail( $to, $subject, $body, $headers );

}

//...codes...

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

您可以使用meta创建一次性操作

像这样的

$order_id = $order->get_id();

if (get_post_meta($order_id, \'is_mail_sent\', true)) return;

update_post_meta($order_id, \'is_mail_sent\', true);
在打开if

此代码将首先检查is_mail_sent 为true,如果为true,它将从函数返回(退出)。

如果第一次不是真的,那么它将继续执行代码的其余部分,并设置is_mail_sent 为true以防止将来发送邮件

你也可以这样做

$order_id = $order->get_id();

if($now>$last_time && !get_post_meta($order_id, \'is_mail_sent\', true)) {
    update_post_meta($order_id, \'is_mail_sent\', true);

    $order_number = $order->get_order_number(); 
    $to = \'[email protected]\';
    $subject = \'Failed order \';
    $body = \'#\'.$order_number. \' order number failed;
    $headers = array(\'Content-Type: text/html; charset=UTF-8\');
    wp_mail( $to, $subject, $body, $headers );
}
这将执行相同的检查,但仅包装代码的邮件部分

相关推荐

更改wp-admin/plugins.php上统计的插件数量

我已成功地使用从插件页面隐藏我的插件$wp_list_table 然而,顶部的分页仍然将插件列为“所有(3)”等。我成功地改变了$wp_list_table 的数组_pagination_args = total_items.但它仍然在页面顶部呈现插件-“全部(3)”。有什么办法可以解决这个问题吗?我找到了WP_Plugins_List_Table::prepare_items()具有全局$totals 变量,但我不确定我将如何改变这一点,在这个函数中$totals = array(); fore