heute Ich habe dieses Problem: Ich mache ein kleines Plugin, um dem Administrator meiner Website zu helfen, sich um Benutzerkonten zu kümmern.wordpress: benutze insert_user() und wp_mail in der gleichen Funktion
Ich bin ziemlich fertig, aber ich kann anscheinend nicht in der Lage sein, einen neuen Benutzer (benutzerdefiniertes Formular mit insert_user) zu erstellen und eine Benachrichtigungs-E-Mail an diesen Benutzer (benutzerdefinierte HTML-Mail mit wp_mail) gleichzeitig zu senden .
Hier ist meine JS Ajax-Funktion:
$(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();
}
});
}
});
Nichts Besonderes hier zu sagen, ich denke, es funktioniert gut.
Jetzt ist meine 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');
Und schließlich meine wp_mail Funktion in meiner ar_mail.php Datei:
<?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';
}
?>
Was passiert, ist, dass, wenn ich einen Benutzer erstellen, wird die E-Mail richtig gesendet (und endet in meiner Spam-Box, wenn jemand eine Lösung hat, würde ich mich freuen, es zu hören), aber der Benutzer ist nicht mehr registriert (ich überprüfte meine Datenbank, kein Zeichen o passen).
Ich habe versucht, die "include ('ar_mail.php');" Teil und dann funktioniert meine Benutzerkreation gut ...
Weiß jemand wie ich das durchstehen könnte? Ich wäre wirklich glücklich!
EDIT: ich das Problem gefunden, hier ist das, was ich von Anfang an hätte tun sollen:
<?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';
}
?>
einfach sicherstellen, dass der HTML-Code übergeben wird als Variable wp_mail.
Ok, fand das Problem und es ist ziemlich dumm ... nur musste meine HTML-Code eine Variable und nennen es in wp_mail() – ken
Wenn Sie gefunden Lösung, fügen Antwort mit Lösung, ansonsten lösche die Frage. – Milap