今天我遇到了这个问题:我正在制作一个小插件来帮助我的网站管理员处理用户帐户。
我已经完成了很多但是我似乎无法创建新用户(使用insert_user的自定义表单)并同时向该用户发送通知邮件(带有wp_mail的自定义html邮件)。
这是我的JS ajax函数:
$(document).on('click','.nc_submit',function(){
var ajaxurladmin = $('#urladminajax').val();
var doc = $('.doc_holder .doc_input').val();
var pass = $('.nc_pass').val();
var name = $('.nc_name').val();
var surname = $('.nc_surname').val();
var email = $('.nc_email').val();
var login = $('.nc_login').val();
var client_type = $('.nc_client_type').val();
var nicename = login.replace(' ','-');
var display_name = name+' '+surname;
var expiry_date = $('.nc_expiry').val();
var today = new Date();
var day = today.getDate();
var month = today.getMonth()+1;
var year = today.getFullYear();
if(expiry_date == 'never'){
var expiry = 'never';
}else{
if(expiry_date == 'year'){
year++;
}else if(expiry_date == 'month'){
month++;
}
var expiry = day+'-'+month+'-'+year;
}
var str_taken_logins = $('.all_users').val();
var taken_logins = str_taken_logins.split(',');
the_message = $('.nc_message');
the_loader = $('.nc_loading_cl');
if($.inArray(login,taken_logins) >= 0){
$('.login_exists').html('Ce login est déjà utilisé').animate({opacity:'1',width:'184px'},300).delay(2000).animate({opacity:'0',width:'0'},300);
}else if(email == '' || login == '' || surname == ''){
$('.login_exists').html('Un ou plusieurs champs requis ne sont pas remplis').animate({opacity:'1',width:'360px'},300).delay(2000).animate({opacity:'0',width:'0'},300);
}else{
the_loader.addClass('in_load');
$.ajax({
type: "POST",
url: ajaxurladmin,
data: {
"action": "dbaddclient",
"display_name":display_name,
"nicename":nicename,
"email":email,
"login":login,
"client_type":client_type,
"pass":pass,
"doc":doc,
"expiry":expiry
}
}).done(function(msg){
if(msg == 'update'){
the_loader.removeClass('in_load');
the_message.animate({opacity:'1',width:'135px'},300).delay(2000).animate({opacity:'0',width:'0'},300);
location.reload();
}
});
}
});
这里没什么好说的,我认为,它运作正常。
现在我的php:
function dbaddclient(){
$display_name = $_POST["display_name"];
$nicename = $_POST["nicename"];
$email = $_POST["email"];
$login = $_POST["login"];
$client_type = $_POST["client_type"];
$pass = $_POST["pass"];
$doc = $_POST["doc"];
$expiry = $_POST["expiry"];
$userdata = array(
'user_login' => $login,
'user_nicename' => $nicename,
'display_name' => $display_name,
'user_pass' => $pass,
'user_email' => $email,
'role' => 'Client'
);
global $wpdb;
wp_insert_user($userdata);
$wpdb->update('ar_users', array('client_type' => $client_type, 'clients_doc' => $doc, 'client_expiry' => $expiry), array('user_login' => $login));
include('ar_mail.php');
echo 'update';die;
}
add_action('wp_ajax_dbaddclient', 'dbaddclient');
add_action('wp_ajax_nopriv_dbaddclient', 'dbaddclient');
最后,我的ar_mail.php文件中的wp_mail函数:
<?php
add_filter( 'wp_mail_content_type', 'wpdocs_set_html_mail_content_type' );
wp_mail($email,'Sender','<p>Bonjour '.$display_name.',</p><p>Votre compte ... a été activé.</p><p>Votre Login est : '.$login.'</p><p>Votre Mot de passe est : '.$pass.'</p>');
remove_filter( 'wp_mail_content_type', 'wpdocs_set_html_mail_content_type' );
function wpdocs_set_html_mail_content_type() {
return 'text/html';
}
?>
当我创建用户时,电子邮件发送正确(并最终在我的垃圾邮件箱中,如果有人有解决方案,我很乐意听到),会发生什么情况, 但用户不再注册(我查看了我的数据库,没有任何迹象)。
我尝试删除“include('ar_mail.php');”部分,然后我的用户创建工作正常......
有谁知道我怎么能通过这个?我真的很高兴!
编辑: 我找到了问题,这是我应该从一开始就做的事情:
<?php
add_filter( 'wp_mail_content_type', 'wpdocs_set_html_mail_content_type' );
$message = '<p>Bonjour '.$display_name.',</p><p>Votre compte ... a été activé.</p><p>Votre Login est : '.$login.'</p><p>Votre Mot de passe est : '.$pass.'</p>';
wp_mail($email,'Sender',$message);
remove_filter( 'wp_mail_content_type', 'wpdocs_set_html_mail_content_type' );
function wpdocs_set_html_mail_content_type() {
return 'text/html';
}
?>
只需确保将html代码作为变量传递给wp_mail。
答案 0 :(得分:0)
简单回答:在将html主体传递给wp_mail()之前,需要先将其变为变量。
像这样:
<?php
add_filter( 'wp_mail_content_type', 'wpdocs_set_html_mail_content_type' );
$message = '<p>Bonjour '.$display_name.',</p><p>Votre compte ... a été activé.</p><p>Votre Login est : '.$login.'</p><p>Votre Mot de passe est : '.$pass.'</p>';
wp_mail($email,'Sender',$message);
remove_filter( 'wp_mail_content_type', 'wpdocs_set_html_mail_content_type' );
function wpdocs_set_html_mail_content_type() {
return 'text/html';
}
?>