wordpress:在同一个函数

时间:2016-05-27 08:06:28

标签: php wordpress wordpress-theming

今天我遇到了这个问题:我正在制作一个小插件来帮助我的网站管理员处理用户帐户。

我已经完成了很多但是我似乎无法创建新用户(使用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。

1 个答案:

答案 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';
}
?>