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 通信平台,包含了邮件通知和站内信功能。