我有一个自定义的帖子类型immobile
使用使用工具集类型创建的一些自定义字段。
我需要发送和电子邮件的标题和自定义字段时,一个新的immobile
保存为草稿或已发布。
我设法做到了almost 一切。我的代码如下:
add_action( \'auto-draft_to_draft\', \'my_send_email\', 99 );
add_action( \'auto-draft_to_publish\', \'my_send_email\', 99 );
add_action( \'draft_to_publish\', \'my_send_email\', 99 );
function my_send_email( $post ) {
if ( $post->post_type == \'immobile\' ) {
wp_mail(
\'email@example.com\',
\'New immobile saved as \' . $post->post_status,
\'Title: \' . $post->post_title . \'. Ref: \' . get_post_meta( $post->ID, \'wpcf-reference\', true ),
array(\'Content-Type: text/html; charset=UTF-8\')
);
}
}
不幸的是,我的自定义字段没有显示在电子邮件中,可能是因为它在我使用的挂钩后被保存。
完美的解决方案是一个挂钩:
已启动after 帖子元已保存,请允许我检查帖子的post\\u状态before 它被保存了我试了一下钩子post updated
但我得到了相同的结果:自定义字段不显示。
我可以用哪个钩子?或者我应该尝试一种完全不同的方法?
SO网友:leitmotiv
我想您需要先处理post请求。你必须这样做,因为古腾堡两次打钩。
function transition_post_status_handler( $new_status, $old_status, $post ) {
if ( defined( \'REST_REQUEST\' ) && REST_REQUEST ) {
send_mail_on_publish( $new_status, $old_status, $post );
set_transient( \'post_status_updater_flag\', \'done\', 10 );
} else {
if ( false === get_transient( \'post_status_updater_flag\' ) )
send_mail_on_publish( $new_status, $old_status, $post );
}
}
add_action( \'transition_post_status\', \'transition_post_status_handler\', 10, 3 );
然后您可以调用该函数来发送电子邮件。在这一点上,我认为你有可用的元数据。
function send_mail_on_publish( $new_status, $old_status, $post ) {
if ( \'publish\' == $new_status && \'immobile\' == get_post_type($post) ) {
// Check if not an autosave
if ( wp_is_post_autosave( $post->ID ) )
return;
// Check if not a revision
if ( wp_is_post_revision( $post->ID ) )
return;
// Send email
}
}