在wordpress发布文章时邮件通知所有用户,并在发布文章页面选择是否发送邮件

如果你的wordpress网站开放了注册,并且在你发布文章的时候,想要邮件通知所有的注册用户,那么可以通过一些插件来实现。

但是这些插件无法实现的是,是否发送我需要根据单篇文章来决定,也就是在发布文章的时候,可以有个选择框,勾上就向所有用户发送邮件通知,不勾就不通知。

在经历过一番测试后,发现可以直接通过添加代码的方式来实现这个功能。

//邮件通知
function add_yx_box (){
  add_meta_box('yx_box', '邮件通知', 'yx_box','post','normal','high');
}
add_action('add_meta_boxes','add_yx_box');
function yx_box(){
  echo '<span style="margin:15px 20px 15px 0; display:inline-block;"><label><input type="checkbox" name="yx" value="1" title="勾选此项,将邮件通知博客所有注册用户"/> 给用户发送邮件通知</label></span></br>发布、更新文章会给用户发送邮件';
}

function newPostNotify($post_ID) {
    // 判断yx是否为空
     if(!isset($_POST['yx']))return;
     if(wp_is_post_revision($post_ID))return;
     global $wpdb;
     $blogurl   = get_bloginfo('url');    //获取首页链接
     $get_post_info = get_post($post_ID);
     if ( $get_post_info->post_status == 'publish' && $_POST['original_post_status'] != 'publish' ) {
         // 读数据库,获取所有用户的email
         $wp_user_email = $wpdb->get_results("SELECT DISTINCT * FROM $wpdb->users");
         // 依次给每个Email发邮件
        foreach ( $wp_user_email as $email ) {
            $user_id = $email->ID;
            //用户是否接收
            //if (!zib_msg_is_allow_receive($user_id, 'posts'))return;
            $fsemail = $email->user_email;
             // 邮件标题:博客有新文章
            $subject = '博客有新文章发布';
             // 邮件内容:新文章网址:+ URL
            $message = 'Dear all:<br><br>博客更新了一篇新文章:<br>';
	    $message .= '文章标题:' . get_the_title($post_ID) . '<br />';
	    $message .= '文章网址:<a href="' . get_permalink($post_ID) . '">' . get_permalink($post_ID) . '</a><br />';
             // 发邮件
	    $message_headers = "Content-Type: text/html; charset=\"utf-8\"\n";
             wp_mail($fsemail, $subject, $message, $message_headers);
         }
     }
}
// 钩子,一旦WordPress有新文章发布或文章被修改即刻执行newPostNotify函数
add_action('publish_post', 'newPostNotify');

将这段代码放到主题文件夹functions.php文件夹中即可。

此外建议可以安装个smtp插件,可以查看发送情况,设置对外发送邮件的邮箱,推荐免费的fluent SMTP。

发表评论

您的电子邮箱地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据