php - wp_mail 不断发送相同的邮件
问题描述
我想用来wp_mail
向我发送一些数据,但这应该只做一次。为了避免连续发送邮件,我创建了一个额外的选项。然而,当我测试它时,它仍然一遍又一遍地发送相同的邮件。
我的代码如下:
function track_details_admin() {
if( ! current_user_can('administrator') && ! is_admin ) {
return false;
}
$tracking = get_option('track_details');
// mail settings
$send_mail = wp_mail( $to, $subject, $message, $headers );
// Send mail only if it wasn't sent before
if( $tracking === false && $tracking != '1' ) {
$send_mail;
}
// If email is sent succesfully update option so it won't be sent again
if( $send_mail ) {
//If option already exists, update else create new
if ( $tracking !== false ) {
update_option( 'track_details', '1' );
} else {
add_option( 'track_details', '1' );
}
}
}
add_action( 'admin_init', 'track_details_admin', 99 );
在选项表中,我可以看到该选项是在发送邮件后'track_details'
创建并设置的。1
非常感谢您在正确方向上的任何帮助。
解决方案
您可以尝试以下脚本,该脚本具有不同的方法来检测是否发送了邮件。我使用的实际上$is_sent
是变量,0
但是一旦发送电子邮件或 if 语句为真,该$is_sent
值将被更新并变为1
function track_details_admin() {
if( ! current_user_can('administrator') && ! is_admin ) {
return false;
}
$tracking = get_option('track_details');
// mail settings
$send_mail = wp_mail( $to, $subject, $message, $headers );
$is_sent = 0;
// Send mail only if it wasn't sent before
if( $tracking === false && $tracking != '1' ) {
$send_mail;
$is_sent = 1;
}
// If email is sent succesfully update option so it won't be sent again
if( $is_sent == 1 ) {
//If option already exists, update else create new
if ( $tracking !== false ) {
update_option( 'track_details', '1' );
} else {
add_option( 'track_details', '1' );
}
}
}
add_action( 'admin_init', 'track_details_admin', 99 );
推荐阅读
- ruby-on-rails - Postgres 将选定的 json_agg'regated 字符串视为一个数组
- jenkins - Jenkins - 选择要提取的分支和多个文件
- c# - 模型内部的变量在访问时不显示正确的值
- python - Pandas:将具有字典列表的列表附加到现有数据框
- sql - Oracle函数删除表(如果存在)
- enums - 从 Swagger UI 上的枚举列表(下拉列表)中删除“空”枚举值
- javascript - 三个js可以复用灯吗?
- javascript - VS Code 不接受 Node.js 代码中的可选链接运算符
- python - FileNotFoundError:[Errno 2] 没有用于登录多进程(gunicorn)环境python的此类文件或目录
- typescript - 数组索引字符串或数字的类型?