设计个性化 WordPress 通信平台,第 4 部分

4.1 实现邮件通知功能

WordPress 通信平台应该有邮件通知功能,因为有时候用户可能无法登录平台及时查看信息。我们可以使用 PHPMailer 库来实现邮件发送功能。PHPMailer 是 PHP 语言的一个邮件发送类库,使用起来可以更加简单方便。

4.1.1 安装 PHPMailer 库

在项目根目录下运行以下命令:

composer require phpmailer/phpmailer

运行成功后,会在项目根目录下的 vendor 目录下看到 PHPMailer 的源码文件。

4.1.2 编写邮件发送代码

在发送邮件之前,我们需要在 config.php 文件中设置邮件服务器的相关信息:

define('MAIL_HOST', 'smtp.163.com');

define('MAIL_PORT', 465);

define('MAIL_USERNAME', '你的Email账号');

define('MAIL_PASSWORD', '你的Email密码');

define('MAIL_FROM_ADDRESS', '你的Email账号');

define('MAIL_FROM_NAME', '你的姓名');

然后在 send_mail.php 文件中编写邮件发送代码:

require_once 'vendor/autoload.php';

require_once 'config.php';

function send_mail($subject, $body, $to) {

$mail = new PHPMailer\PHPMailer\PHPMailer();

$mail->isSMTP();

$mail->Host = MAIL_HOST;

$mail->SMTPAuth = true;

$mail->Username = MAIL_USERNAME;

$mail->Password = MAIL_PASSWORD;

$mail->SMTPSecure = 'ssl';

$mail->Port = MAIL_PORT;

$mail->setFrom(MAIL_FROM_ADDRESS, MAIL_FROM_NAME);

$mail->addAddress($to);

$mail->isHTML(true);

$mail->Subject = $subject;

$mail->Body = $body;

$mail->AltBody = $body;

if(!$mail->send()) {

error_log('发送邮件失败: ' . $mail->ErrorInfo);

return false;

} else {

return true;

}

}

4.1.3 调用邮件发送函数

在需要发送邮件的地方直接调用上面编写的 send_mail 函数即可:

$subject = '邮件标题';

$body = '邮件正文';

$to = '收件人Email地址';

send_mail($subject, $body, $to);

4.2 实现站内信功能

站内信是指用户之间在网站内部发送消息,而不是通过电子邮件等外部方式发送。在 WordPress 通信平台中,我们可以通过添加一个站内信的功能模块,来实现用户之间的消息交互。

4.2.1 前端部分

在前端部分,我们需要添加一个“站内信”菜单项,用于展示当前用户的站内信列表,并且点击站内信列表可以跳转到站内信详情页。代码如下:

<ul class="nav">

<li><a href="index.php">首页</a></li>

<li><a href="message.php">站内信</a></li>

<li><a href="profile.php">个人资料</a></li>

<li><a href="logout.php">退出登录</a></li>

</ul>

在站内信页面中,我们需要使用 AJAX 技术从后端获取用户的站内信列表,并且在页面上动态展示。代码如下:

<div class="message-list"></div>

<script>

$(document).ready(function() {

$.get('api.php?action=get_messages', function(data) {

var messages = JSON.parse(data);

var html = '';

for(var i = 0; i < messages.length; i++) {

html += '<a href="message.php?id=' + messages[i].id + '">' + messages[i].title + '</a><br>';

}

$('.message-list').html(html);

});

});

</script>

4.2.2 后端部分

在后端部分,我们需要编写一个名为 get_messages 的 API,用于获取当前用户的站内信列表。代码如下:

function get_messages() {

global $wpdb;

$user_id = get_current_user_id();

$table_name = $wpdb->prefix . 'messages';

$sql = $wpdb->prepare("SELECT * FROM $table_name WHERE receiver_id=%d ORDER BY id DESC", $user_id);

$results = $wpdb->get_results($sql);

echo json_encode($results);

exit;

}

我们还需要编写一个名为 message 的页面,用于展示当前用户的站内信详情。代码如下:

function message() {

global $wpdb;

$user_id = get_current_user_id();

$table_name = $wpdb->prefix . 'messages';

$id = $_GET['id'];

$sql = $wpdb->prepare("SELECT * FROM $table_name WHERE receiver_id=%d AND id=%d", $user_id, $id);

$message = $wpdb->get_row($sql);

if(!$message) {

header('Location: message.php');

exit;

}

$wpdb->update($table_name, array('read_at' => current_time('mysql')), array('id' => $id));

echo '<h2>' . $message->title . '</h2>';

echo '<p>' . $message->content . '</p>';

}

在发送站内信时,我们需要将站内信的数据插入到数据库中,并且通过邮件通知收件人。代码如下:

function send_message($title, $content, $receiver_id) {

global $wpdb;

$table_name = $wpdb->prefix . 'messages';

$data = array(

'title' => $title,

'content' => $content,

'sender_id' => get_current_user_id(),

'receiver_id' => $receiver_id,

'sent_at' => current_time('mysql')

);

$wpdb->insert($table_name, $data);

$receiver_email = get_user_meta($receiver_id, 'email', true);

if($receiver_email) {

$subject = '你有一条新的站内信';

$body = '你收到了来自 ' . get_userdata(get_current_user_id())->display_name . ' 的一条站内信,请登录网站查看。';

send_mail($subject, $body, $receiver_email);

}

}

至此,我们已经实现了一个简单的 WordPress 通信平台,包含了邮件通知和站内信功能。

后端开发标签