我想在wordpress admin中只发送电子邮件发布新帖子
当我点击任何东西时,它会向用户发送邮件,如何将其限制为只添加新的邮件以向用户发送邮件
function wpse_19040_notify_admin_on_publish( $new_status, $old_status, $post ) {
if ( $new_status !== \'publish\' || $old_status === \'publish\' )
return;
if ( ! $post_type = get_post_type_object( $post->post_type ) )
return;
global $wpdb;
$newsletterdata = $wpdb->get_results("SELECT * FROM ".$wpdb->prefix."newsletter");
foreach ( $newsletterdata as $newsletteremailall )
{
$newsletteremailall = $newsletteremailall->email;
if(filter_var($newsletteremailall, FILTER_VALIDATE_EMAIL))
{
$subject = $post->post_title;
$message = \'Our new post is here \'."\\n".\'Post Title: \' .$post->post_title. "\\n"."click here to visit post: " . get_permalink( $post->ID );
wp_mail( $newsletteremailall, $subject, $message );
}
else
{
}
}
}
add_action( \'transition_post_status\', \'wpse_19040_notify_admin_on_publish\', 10, 3 );
最合适的回答,由SO网友:Petar Petrov 整理而成
根据@Fredrik的回答更新了状态代码,因为他的答案更准确要在发布时触发此操作,您可以将第一个if更改为
if ( $new_status === \'inherit\' && $old_status === \'new\' )
这样,您的代码应该只在发布帖子时触发。
编辑:
关于代码的一些注释。
if ( ! $post_type = get_post_type_object( $post->post_type ) )
这不会起任何作用,因为这是一个变量的赋值。这意味着,您将获得当前的帖子类型,并将其分配给
$post_type
它总是会过去的。
我认为你想要实现的是,这只适用于特定的职位类型。如果是这种情况,请将此行更改为:
if ( \'my_custom_post_type\' !== get_post_type_object( $post->post_type ) )
在哪里
my_custom_post_type
应该是您希望为其发送电子邮件的帖子类型。
对于此行:
$newsletteremailall = $newsletteremailall->email;
覆盖初始变量是一种不好的做法。也许可以说出它的名字
$email
而不是
$newsletteremailall
, 因为您以后可能需要它,但您将无法再访问它。
SO网友:Fredrik
如果你像这样设置第一个If,它只会在你创建新帖子时向你发送这些邮件。当你在不同的状态之间改变它时就不会了。这适用于所有帖子类型,您可以(如前所述)查看$post\\u类型并将其更改为您的自定义帖子类型,否则无论帖子类型如何,都会触发它。
function wpse_19040_notify_admin_on_publish( $new_status, $old_status, $post ) {
if ( $old_status === \'new\' && $new_status === \'inherit\' )
if ( ! $post_type = get_post_type_object( $post->post_type ) )
return;
global $wpdb;
$newsletterdata = $wpdb->get_results("SELECT * FROM ".$wpdb->prefix."newsletter");
foreach ( $newsletterdata as $newsletteremailall )
{
$newsletteremailall = $newsletteremailall->email;
if(filter_var($newsletteremailall, FILTER_VALIDATE_EMAIL))
{
$subject = $post->post_title;
$message = \'Our new post is here \'."\\n".\'Post Title: \' .$post->post_title. "\\n"."click here to visit post: " . get_permalink( $post->ID );
wp_mail( $newsletteremailall, $subject, $message );
}
else
{
}
}
}
add_action( \'transition_post_status\', \'wpse_19040_notify_admin_on_publish\', 10, 3 );