当我发布新帖子时向用户发送电子邮件

时间:2020-07-29 作者:jykmhar123

我想在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 );

2 个回复
最合适的回答,由SO网友:Petar Petrov 整理而成

根据@Fredrik的回答更新了状态代码,因为他的答案更准确

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 );

相关推荐

如何更改GET_POSTS数组上的类别ID

我正在为我的AMP页面制作一个旋转木马,我想重用代码,所以我将其制作成了一个模板,但是,我在更改类别值数组上的ID时遇到了问题,我希望能够插入模板代码,只需选择类别,这样我就可以很好地重用它,而不是像疯子一样复制粘贴它。在过去的几天里,我尝试了一些方法,当代码与旋转木马位于同一页面时,大多数方法都会起作用,然而,当它作为模板时,它会破坏它。这是我用来构建它的代码,我想学习如何更改“category”=>1值。<div class=\"category-slider\"> <