仅在创建新帖子时执行SAVE_POST操作

时间:2016-03-18 作者:Nas Atchia

enter image description here

我有一个Custom Post Type 已命名Task. 我创建了一个函数,用于向所选代理发送电子邮件,通知已分配新任务。功能如下:

function real_estate_send_mail_to_agent() {
    global $post;

    // If this is just a revision, don\'t send the email.
    if ( wp_is_post_revision( $post->ID ) ) {
        return;
    }

    // Exit function if post type is not equal to task
    if ( $post->post_type !== \'task\' ) {
        return;
    }

    // Email header
    $headers .= "MIME-Version: 1.0\\r\\n";
    $headers .= "Content-Type: text/html; charset=ISO-8859-1\\r\\n";

    // Recipient
    $agent = get_field_object("agent", $post->ID);// Get agent object from user_table
    $emailTo = (string) $agent[\'value\'][\'user_email\']; // Get agent email

    $agent_display_name = $agent[\'value\'][\'display_name\']; // Get agent display name

    // Email Subject
    $subject = "New Task: " .wp_strip_all_tags(get_the_title($post->ID));;

    // Email Body
    $message = "Hi <b>".$agent_display_name."</b><br/>"
    $message .= "You have been assigned a new task <br/>";
    $message .= "Please have a look at it ".get_permalink( $post->ID );

    // Send the mail
    wp_mail( $emailTo, $subject, $message, $headers );
}
add_action(\'save_post\', \'real_estate_send_mail_to_agent\', 11);
该函数将电子邮件发送给代理,这很好。问题是,即使帖子updatedmove to trash.

我希望只有在使用save_post. 我需要使用的原因save_post 是因为我必须从中的用户对象获取代理电子邮件User Field Type 使用ACF插件。如果我使用publish\\u post,则不会发送电子邮件,因为它无法获取代理电子邮件。请帮忙。

1 个回复
SO网友:Adam

这个save_post 操作还向回调传递三个参数,其中一个是$update 表示保存的帖子是否为现有帖子。

/**
 * Save post metadata when a post is saved.
 *
 * @param int $post_id The post ID.
 * @param post $post The post object.
 * @param bool $update Whether this is an existing post being updated or not.
 */
function save_post_callback( $post_id, $post, $update ) {

    if ( $update ) {
        return;
    }

    //business logic...

}

add_action( \'save_post\', \'save_post_callback\', 10, 3 );
请参见:

相关推荐