每次发布新帖子时向管理员发送通知电子邮件

时间:2017-11-07 作者:Ninja

我想发送电子邮件给管理员的每一个新发布的帖子。我在用钩子

add_action(\'publish_post\' \'custom_send_admin_email\');
但上面的钩子会发送电子邮件,如果在帖子中也有任何更新,我不想发生。是否有任何钩子或调整只在第一次发布帖子时发送邮件,而不是针对帖子中的每个更新?

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

您可以使用transition_post_status

<?php
add_action( \'transition_post_status\', \'custom_send_admin_email\', 10, 3 );

function custom_send_admin_email( $new_status, $old_status, $post ) {
    if ( \'publish\' === $new_status && \'publish\' !== $old_status ) {
        // Consider sending an email here.
    }
}
下面是第二个示例,它还检查特定的帖子类型。请注意$post 是的实例WP_Post, 因此,如果您需要了解有关该帖子的更多信息,可以访问其所有属性。

<?php
add_action( \'transition_post_status\', \'custom_send_admin_email\', 10, 3 );

function custom_send_admin_email( $new_status, $old_status, $post ) {
    if ( \'post\' === $post->post_type && \'publish\' === $new_status && \'publish\' !== $old_status ) {
        // Consider sending an email here.
    }
}
再进一步,我们可以设置一个post meta值,将帖子标记为已经发送到管理员的电子邮件地址。这使得它更聪明,能够处理一些棘手的情况。例如,当一个帖子从trash 地位publish 地位

我们还可以发送状态更改为的电子邮件future, 这表明该帖子计划在未来某个日期发布。这样,管理员就可以在预定提前发布的时候收到电子邮件,而不是在实际发布供公众查看的那天。

<?php
add_action( \'transition_post_status\', \'custom_send_admin_email\', 10, 3 );

function custom_send_admin_email( $new_status, $old_status, $post ) {
    if ( \'post\' === $post->post_type && in_array( $new_status, array( \'publish\', \'future\' ), true ) && ! in_array( $old_status, array( \'publish\', \'future\' ), true ) ) {
        if ( ! get_post_meta( $post->ID, \'emailed_to_admin\', true ) ) {

            // Consider sending an email here.
            // ...

            // Flag email as having been sent now.
            update_post_meta( $post->ID, \'emailed_to_admin\', time() );
        }
    }
}

结束