在保存/更新CPT时发送电子邮件(而不是在创建时)

时间:2015-08-18 作者:drake035

我的CPT中有一个文件字段。当管理员将文件上传到此字段时,我需要生成一封电子邮件。有没有一种简单的方法可以做到这一点,或者我必须创建一个插件?

5 个回复
SO网友:Domain

如果您已经注册了该CPT并添加了上载功能,那么您只能在其中编写电子邮件功能。然而,如果它来自任何其他插件或主题,那么您要么需要编辑其代码,要么需要创建一个插件(如果有足够的挂钩可用)。

如果没有可用的自定义挂钩,您将使用一些通用WordPress挂钩,例如。save_post 对于您的附件,请确保在运行电子邮件功能之前检查您的CPT的帖子类型,否则它将应用于所有附件。

e、 g.您可以查看save_post 挂钩,如果post_typeattachment 当前屏幕是您的CPT,然后发送电子邮件。

SO网友:Milo

第三个参数传递给save_post 行动($update) 将是false 关于初始岗位创建和true 用于任何后续后期保存。

您还可以使用post_updated 操作,该操作不会在初始后期创建时触发。

SO网友:C C

如果您的文件上载使用的是Media Manager(upload.php),那么该文件最终将成为帖子的附件。如果这是真的,那么:

add_action(\'add_attachment\', \'my_email_function\', 10, 1);
就是如何做到这一点-依赖于“add\\u attachment”钩子的触发。

当然,您需要为my_email_function($post_ID), 它应该检查$current\\u用户的角色以及附件父帖子的post\\u类型,以确保在条件正确时发送电子邮件。我没有对此进行测试,但应该非常接近正确:

function my_email_function($post_ID) {
    global $current_user;
    $cur_user = get_currentuserinfo();

    $parent_post = wp_get_post_parent_id( $post_ID );
    if ( $parent_post ) // make sure we got a post back, not "false"
        if ( ( \'my_cpt\' === $parent_post->post_type ) && user_can( $cur_user, \'administrator\' ) ) {  
       // do email function here
    }
}

SO网友:gmazzap

每次上传文件时,都会新建一个附件帖子,所以post_updated hook或的第三个参数save_post 胡克帮不了你。

您说过您有一个管理员可以上传文件的“字段”。这让我猜测您正在CPT中使用一些自定义字段来存储附件ID或url。

在这种情况下,您可以使用updated_postmeta 钩子以侦听用于存储值的元键上的更改。

请注意,此挂钩仅在字段更新时触发,因此在首次保存时不会触发。

未经测试和概念验证的示例代码为:

add_action( \'updated_postmeta\', function( $metaId, $postId, $metaKey, $metaValue ) {

   // replace "your-meta-key" with the actual meta key where attachment info is saved
   if (  $metaKey !== \'your-meta-key\' )
     return; // do nothing if the meta key is not the right one 

   // replace "your-ctp-slug" with the actual CPT slug
   if ( get_post_field( \'post_type\', $postId ) !== \'your-ctp-slug\' )
     return; // do nothing if the post type is not the right one

   // if here, the field where attachment is stored has been updated, send the email

   wp_mail(
     \'[email protected]\',
     \'Attachment updated.\'
     "The attachment {$metaValue} has been updated"
   );

}, 10, 4 ); 

SO网友:84em

也许是这样的。(未经测试)

add_action(\'post_updated\', \'custom_post_updated_actions\', 10, 3);

function custom_post_updated_actions($post_ID, $post_after, $post_before) {

    if(\'custom-post-type-slug\' == $post_after->post_type) {

        // run wp_mail() function here.  
        // You could pass any data from the $post_after and 
        // $post_before objects that you wish (both are object type WP_Post)
    }
}

结束

相关推荐

"Reply-to Address" Email

我在过去几天的网络上搜索了;回复地址“;但运气不好,所以,我来了。在我的wordpress网站上,有多个店主可以销售他们的产品。当访问者购买某个物品(由不同的所有者列出)时,该特定所有者会收到一封电子邮件通知(请注意,在结账过程中必须输入访问者的电子邮件地址)然而,电子邮件来自;“管理”;电子邮件帐户。我搜索了如何设置“;“回复”;地址,以便所有者可以直接回复客户的电子邮件地址,而不是管理员帐户。下面是我看到的一个我正在努力实现的示例:在此图像中,该站点为abc.ca 以及[email protected]