您可以使用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() );
}
}
}