2016-05-27 5 views
1

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.

+0

Ok, fand das Problem und es ist ziemlich dumm ... nur musste meine HTML-Code eine Variable und nennen es in wp_mail() – ken

+0

Wenn Sie gefunden Lösung, fügen Antwort mit Lösung, ansonsten lösche die Frage. – Milap

Antwort

0

Einfache Antwort: Sie müssen den HTML-Body eine Variable vor der Übergabe an wp_mail() setzen.

So:

<?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'; 
} 
?> 
Verwandte Themen