仅包括新值自定义字段的CPT电子邮件通知

时间:2021-02-17 作者:Michael

我有一个自定义的帖子类型«teams» 使用一组不同的自定义字段(ACF)。我不是一个大的程序员,但希望获得一些关于如何创建一个功能的指导,该功能可以在每次WP用户更新一个团队(CPT)时发送一封包含ACF的电子邮件。

我已经找到了实现这一点的插件,但不幸的是,我需要一个更复杂的解决方案。问题是电子邮件应该ONLY 包括实际已更改的自定义字段。因此,我需要循环检查每个自定义字段是否有任何更改,然后只在最终电子邮件中包含具有新值的字段。

我想我是在问这是一项非常困难的任务,还是可以用一种非常简单的方式来完成?所有来源将不胜感激!

2 个回复
SO网友:Fresz

根据你的解释,似乎我们需要wp_mail() 功能和post_updated

wp_mail() 参考号:https://developer.wordpress.org/reference/functions/wp_mail/post_updated 行动挂钩:https://developer.wordpress.org/reference/hooks/post_updated/

<CPT_name> - 将其替换为自定义的post类型密钥。

(未经测试的代码-它应该能让您很好地了解需要做什么)

add_action(\'post_updated\', `send_custom_update`, 10, 3);
function send_custom_update($post_ID, $post_after, $post_before) {

  if(get_post_type($post_ID) == \'<CTP_name>\') {

     $to = \'[email protected]\';
     $subject = get_the_title($post_ID) . \' has been updated!\';
     $body = \'The email body content\';
     $headers = array(\'Content-Type: text/html; charset=UTF-8\');
 
     wp_mail( $to, $subject, $body, $headers );

  }
}
如果你查看这个动作挂钩的文档,你会发现有两个版本的帖子可用——编辑之前和之后。您可以在$body - 但这取决于你。

如果有帮助,请告诉我。

SO网友:Michael

非常感谢你,弗雷兹!这对我帮助很大:)

我从高级自定义字段中找到了另一个钩子(acf/save_posts), 现在有一个可行的(我认为)解决方案!

参考号:https://www.advancedcustomfields.com/resources/acf-save_post/

我刚刚通过检查其中一个自定义字段的新旧值进行了测试,该函数似乎起到了作用。下一个问题;如何才能做到更干净?我有8个自定义字段,用我在下面代码中所做的方式检查它们似乎非常业余。是否有更好的方法为所有8个字段设置“检查旧值与新值”?

add_action(\'acf/save_post\', \'teams_update_notification\', 5);
function teams_update_notification( $post_ID ) {

// Check that it is the correct post type
if(get_post_type($post_ID) == \'teams\') {

// Get post name
$post_title = get_the_title( $post_id );

// New and old field value
$team_name = get_field(\'team_name\', $post->ID);
$team_name_new =  \'\';
    if (isset($_POST[\'acf\'][\'field_12345\'])) {
        $team_name_new = $_POST[\'acf\'][\'field_12345\'];
    }
if ($team_name_new != $team_name) {
$team_name_updated = $_POST[\'acf\'][\'field_12345\'];
}

// SET UP MAIL
$subject = $post_title . \' has been updated\';
$headers = array(\'Content-Type: text/html; charset=UTF-8\');
$message .= $post_title . \'has been updated\' . "\\r\\n";
$message .= $team_name_updated;

// Send email to admin.
wp_mail( \'[email protected]\', $subject, $message, $headers );

}
}

相关推荐

如何覆盖/扩展WordPress函数IS_EMAIL

所以wordpress的核心并没有真正更新unicode域的电子邮件许可。即使是像德语umlauts(äÄöÖÜß)这样的简单特殊字符也不允许出现在名称的域部分。因此,我一直在考虑向is\\U电子邮件功能添加一个具有高优先级的过滤器,并简单地返回结果。但它似乎并没有像我预期的那样发挥作用。以下是我尝试过的:// Code written in my themes functions.php function kk_email_validation_override( $email ) {&