Как вставить новый мета-ключ пользователя в базу данных в WordPress - PullRequest
0 голосов
/ 06 декабря 2018

Я хочу создать пользовательскую регистрацию для WordPress, и мне нужно создать новое пользовательское поле для каждого профиля.Например, поле телефона.все поля работают, кроме телефона, поля дополнительной информации и изображения профиля, и я не знаю, в чем проблема.так вот мой код в registration.php

<input type="text" class="input" id="firstname" name="firstname" placeholder="First name" required>
<input type="text" class="input" id="lastname" name="lastname" placeholder="Last name" required>
<input type="email" class="input" name="mail" id="mail" placeholder="E-mail" required>
<input type="password" id="password" minlength="8" class="input" name="password" placeholder="Password" required>
<input type="file" class="input" id="profileimg" name="profileimg" title="Profile image" placeholder="Profile image">
<input type="button" class="input buttonSubmitFile" value="Profile image">
<input type="text" class="input" minlength="11" id="tel" name="tel" placeholder="Mobile " required>
<input type="submit" class="btnSubmit btn-Blue" value=Register>
    <script>
          var submit_button      = $(".btnSubmit"); 
     $(submit_button).click(function(e){
              e.preventDefault();
                 var fname = $( "#firstname" ).val();
                  var lname = $( "#lastname" ).val();
                  var mail = $( "#mail" ).val();
                  var tel = $( "#tel" ).val();
                  var pass = $( "#password" ).val();
                 var uid = $( "#userid" ).val();
               var aFormData = new FormData();
     aFormData.append("profileimg", $('#profileimg')[0].files[0]); 
              aFormData.append("action", "trip_register_ajax"); 
              aFormData.append("f_name", fname); 
              aFormData.append("l_name", lname); 
              aFormData.append("e-mail", mail); 
              aFormData.append("mob", tel); 
              aFormData.append("pass", pass);
              aFormData.append("u_id",uid);
      jQuery.ajax({
                    url : '<?php echo admin_url( 'admin-ajax.php'); ?>',
                    type : 'post',
                    processData: false,
                    contentType: false,
                    dataType: "json",
                        data :  aFormData  ,
                        success : function( response ) {
                            $('.message-response').show().html(JSON.stringify(response));
                        },
                        error: function(response) {
                            $('.message-response').show().html(response.responseText);
                        }
                  }); 
             }); 
    </script>

и в моих функциях .php

    add_action( 'wp_ajax_nopriv_trip_register_ajax', 'trip_register_ajax' );
add_action( 'wp_ajax_trip_register_ajax', 'trip_register_ajax' );
function trip_register_ajax() {
    $firstname=$_POST['f_name'];
    $lastname=$_POST['l_name'];
    $mail=$_POST['e-mail'];
    $tel=$_POST['mob'];
    $extra_information = $_POST['information'];
    $upload_image= $_FILES['profileimg']['name'];
    $filepath = "uploads/".$upload_image;
    $filetmp  = $_FILES["profileimg"]["tmp_name"];
    move_uploaded_file($_FILES['profileimg']['tmp_name'], __DIR__.'/../../uploads/'. $upload_image);
    $nicename=$firstname." ".$lastname;
$userdata = array(
        'user_login'  =>  $nicename,
        'first_name'       => $firstname,
        'last_name'   => $lastname,
        'user_email'    => $mail,
        'user_pass'   =>  $_POST['pass'] 
    );
$exists_email = email_exists( $mail );
$exists_username = username_exists( $mail );
if ( $exists_email || $exists_username) {

    echo "Your Email Already Registered";
}else{
   $user_id = wp_insert_user( $userdata ) ;
    $childsdetails = maybe_unserialize($childsdetails);
    update_user_meta( $user_id, 'user_child_details', $childsdetails );
    update_user_meta( $user_id, 'user_extra_info', $extra_information, false ); 
     update_user_meta( $user_id, 'user_mob', $tel , false );
        echo "You Have Registered Successfuly";
       }
    die;
   }

1 Ответ

0 голосов
/ 07 декабря 2018

При вставке / обновлении не используйте 4-й параметр, если хотите вставить ИЛИ обновление независимо от предыдущего значения.См. https://codex.wordpress.org/Function_Reference/update_user_meta#Parameters.

Указав четвертый параметр, вы говорите, ТОЛЬКО обновляйте существующие мета-записи, где metavalue = $ prev_value.

Используйте

update_user_meta( $user_id, 'user_extra_info', $extra_information ); 
update_user_meta( $user_id, 'user_mob', $tel );

, если вы счастливыперезаписать любую существующую мета-запись этим ключом, ИЛИ

https://codex.wordpress.org/Function_Reference/add_user_meta

Также иногда полезно проверить возвращаемые значения.Например:

add_user_meta( $user_id, 'user_mob', $tel, true );  

вернет false, если мета-запись уже существует.

и обратите внимание на разнообразие возвращаемых значений для update_user_meta:

  • Meta ID, еслиключ не существует;
  • true при успешном обновлении;
  • false при ошибке или если $ meta_value совпадает с существующим мета-значением в базе данных.

Я думаю, что теперь он возвращает FALSE, потому что запись с userid, 'usermob', false не существует, и если вы использовали

update_user_meta( $user_id, 'user_mob', $tel );

, он вернет meta_id для вставки (новая запись) или TRUE (если это было обновление)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...