2015-10-05 2 views
0

Итак, я следующее обновление пользовательского мета:Пользователь мета обновление не дает никакого значения

<?php if (is_user_logged_in()) { ?> 
    <?php echo '<input class="input" type="text" id="rhc_phone" name="rhc_phone" placeholder="Phone number" value="' .$current_user -> rh_phone. '"/>' ;?>       
    <?php update_user_meta($current_user->ID, 'rh_phone', esc_attr($_POST['rhc_phone'])); ?>    
<?php }else{ ?> 
     <input class="input" type="text" id="rhc_phone" name="rhc_phone" placeholder="Phone number" value=""/> 
<?php } ?> 

Однако, когда я нажимаю отправить, нет никакого значения (даже не предыдущее значение).

Что я делаю неправильно?

Спасибо!

EDIT: Это моя форма, которая передается через AJAX:

<?php 
    $current_user = wp_get_current_user(); 
    $rhcs_close = $_REQUEST['rhc_post_id'];//same as post id 
?> 
<div class="rh_contact_form"> 
    <div class="my_textfield rhc_phone_number_class">  
     <?php if (is_user_logged_in()) { ?> 
      <?php echo '<input class="my_textfield__input" type="text" id="rhc_phone" name="rhc_phone" placeholder="Phone number" value="' .$current_user -> billing_phone. '"/>' ;?> 
     <?php }else{ ?> 
      <input class="my_textfield__input" type="text" id="rhc_phone" name="rhc_phone" placeholder="Phone number" value=""/> 
     <?php } ?>            
    </div> 
    <div class="my_textfield rhc_ask_class">  
     <?php if (is_user_logged_in()) { ?> 
      <?php echo '<input class="my_textfield__input" type="text" id="rhc_ask" name="rhc_ask" placeholder="Ask me" value="' .$current_user -> my_question. '"/>' ;?> 
     <?php }else{ ?> 
      <input class="my_textfield__input" type="text" id="rhc_ask" name="rhc_ask" placeholder="Ask me" value=""/> 
     <?php } ?>            
    </div> 
    <div class="rh_contact_button">   
     <button class="rh_contact_me"> 
      <i class="icons">done</i> 
     </button> 
    </div> 
</div> 
<script type="text/javascript" > 
function my_form_validate(element) { 
    $('html, body').animate({scrollTop: $(element).offset().top-100}, 150); 
    element.effect("highlight", { color: "#F2DEDE" }, 1500); 
    element.parent().effect('shake'); 
    } 

jQuery(document).ready(function($) { 

$('body').on('click', '.rh_contact_me', function() { 

    if($('#rhc_phone').val() === '') { 
     my_form_validate($('#rhc_phone'));    

    } else if($('#rhc_ask').val() === '') {    
     my_form_validate($('#rhc_ask')); 

    } else { 
     var data = { 
      'action': 'my_send_message',     
      'phone': $('#rhc_phone').val(),    
      'to_author': $('#rhc_ask').val() 
     }; 

     var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>'; 
     $.post(ajaxurl, data, function(response) { 
      if(response === 'success'){ 
       alert('Message Sent Successfully!'); 
       $('.rhp_close').click(); 
      } 
     }); 
    } 
}); 
}); 
</script> 

functions.php

class MY_Posts {  
public static function my_send_message() {   
    if (isset($_POST['message'])) {    
     $to = $_POST['to_author']; 
     $headers = 'From: My Page <' . $_POST['email'] . '>'; 
     $subject = "Hi";    
     ob_start();    
     ?> 
     <div> 
      Hi 
     </div>   

     <?php   
     $message = ob_get_contents();    
     ob_end_clean(); 
     $mail = wp_mail($to, $subject, $message, $headers);    
     if($mail){ 
      echo 'success'; 
     } 
    }   
    exit();   
}   
public static function my_mail_content_type() { 
    return "text/html"; 
} 
} 

Таким образом, когда пользователь вводит "номер телефона" и " ask "в форме ниже, он отправляет форму администратору (автор страницы). Но в то же время я пытаюсь сделать так, чтобы он обновлял эти два поля (которые являются мета-ключами пользователя).

Я не уверен, что лучший способ сделать это.

Я предполагаю, что два сценария: (поле «Номер телефона» в качестве примера)

  • Если пользователь уже имеет телефонный номер (предыдущее значение: 123-123-1234) и изменения в чем-то еще (новое значение: 986-984-2343), то оно сохранит новое значение.

  • Если пользователь уже имеет телефонный номер (предыдущее значение: 123-123-1234), и удаляет его (новое значение: нет), то он делает не сохранить новое значение и сохраняет старое значение).

Конечно, если пользователь не вошел в систему, то для работы с ним нет никакой ценности.

+0

* Однако, когда я нажимаю кнопку отправки * - Можете ли вы показать нам весь код? – Script47

+0

Конечно, одна секунда =) –

+0

Я обновил вопрос :) –

ответ

1

Вы не можете отправить запрос AJAX классу. Что вам нужно сделать, это иметь файл обработчика, который будет обрабатывать запрос AJAX и будет запускать функцию, если она получит данные.

handler.php

if (isset($_POST['someKeyBeingSentByAJAX'])) { 
    // Run your function here. 
} 

Вы не можете напрямую отправить запрос AJAX к классу.

Правильного пример

<?php 
class Car {  
    public static function getCarType() { 
     return "Super Car"; 
    } 
} 
?> 

Затем в файле обработчик

<?php 
require_once 'Car.php'; 

if(isset($_POST['getCarType'])) { 
    $result = Car::getCarType(); 

    echo $result; 
} 
?> 

Вы бы разместить ваш запрос AJAX к проводнику, вы могли бы сделать конкретные обработчик для каждого запроса или вы могли бы имеют общий обработчик AJAX, однако этот файл может стать довольно большим и сложным в обслуживании.

+0

Благодарим вас за ответ. Итак, вы говорите, что я не могу просто использовать '" update_user_meta ". Не собираюсь лгать, я немного смущен ха-ха. –

+0

Ну, сама форма прекрасно работает (я могу получить данные формы или электронную почту). Просто я хочу включить '' update_user_meta'' в качестве части формы и не уверен, как это сделать. –

Смежные вопросы