纯代码实现开启WordPress新文章的发布的邮件通知

ShowUNow 发布于 2024-11-09 219 次阅读


前提:需要WordPress已经配置好了smtp服务器,用于基本的邮件发送。

将以下代码放入主题中的functions.php 文件中即可。

//邮件通知
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(){
    global $wpdb;
    $users = $wpdb->get_results("SELECT ID, display_name FROM $wpdb->users");

    // 检查文章状态,首次发布时默认勾选“给用户发送邮件通知”,更新时默认不勾选
    $is_new_post = (get_post_status() != 'publish');
    $yx_checked = $is_new_post ? 'checked' : '';

    echo '<span style="margin:15px 20px 15px 0; display:inline-block;">';
    echo '<label><input type="checkbox" name="yx" value="1" ' . $yx_checked . ' title="勾选此项,将邮件通知博客指定用户"/> 给用户发送邮件通知</label></span>';
    echo '</br><span>发布、更新文章会给选中的用户发送邮件</span><br><br>';

    // 默认首次发布时全选用户,更新时全不选
    $user_checked_status = $is_new_post ? 'checked' : '';

    echo '<div style="margin-top:10px;">';
    foreach ($users as $user) {
        echo '<label style="margin-right:10px;">';
        echo '<input type="checkbox" name="selected_users[]" value="' . esc_attr($user->ID) . '" ' . $user_checked_status . '> ';
        echo esc_html($user->display_name);
        echo '</label>';
    }
    echo '</div>';
}

function newPostNotify($post_ID) {
    // 判断yx是否为空
    if(!isset($_POST['yx'])) return;
    if(wp_is_post_revision($post_ID)) return;
    global $wpdb;

    $get_post_info = get_post($post_ID);
    $is_new_post = ($_POST['original_post_status'] != 'publish');

    // 获取所有选中的用户ID
    $selected_users = isset($_POST['selected_users']) ? $_POST['selected_users'] : array();

    // 如果是新文章发布,默认全选
    if ($is_new_post && empty($selected_users)) {
        $selected_users = $wpdb->get_col("SELECT ID FROM $wpdb->users");
    }

    // 获取文章作者信息
    $author_id = $get_post_info->post_author;
    $author_name = get_the_author_meta('display_name', $author_id);

    // 依次给选中的用户发邮件
    foreach ($selected_users as $user_id) {
        $user_email = get_userdata($user_id)->user_email;

        // 邮件标题:博客有新文章
        $subject = '博客有新文章发布';

        // 邮件内容:新文章网址 + URL
        $message = 'Dear all:<br><br>博客更新了一篇新文章:<br>';
        $message .= '文章标题:' . get_the_title($post_ID) . '<br />';
        $message .= '文章作者:' . $author_name . '<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($user_email, $subject, $message, $message_headers);
    }
}
// 钩子,一旦WordPress有新文章发布或文章被修改即刻执行newPostNotify函数
add_action('publish_post', 'newPostNotify');

代码说明

1.用户选择多选框:在 yx_box 函数中,我们使用 selected_users[] 复选框来列出所有用户,并默认根据文章的状态(首次发布或更新)设置选中状态。

2.文章发布状态检查:在 newPostNotify 函数中,我们判断文章是否首次发布。如果是首次发布且未选择任何用户,默认选择所有用户。

3.邮件发送:仅给在多选框中选中的用户发送邮件。

4.“给用户发送邮件通知”选项默认勾选:通过检查 $is_new_post,首次发布时自动勾选此选项,而在更新时默认取消勾选。

5.用户列表默认勾选状态:同样使用 $is_new_post 设置用户复选框的默认状态,首次发布时全选,更新时全不选。

临时起意搭建的博客,不知道能坚持下去多久。
最后更新于 2024-11-12