2016-03-08 5 views
0

Я пытаюсь отправить значение в мою базу данных wordpress (таблица wp_usermeta) при нажатии кнопки.Wordpress jQuery отправить значение в базу данных

Вот что я знаю, до сих пор, я знаю, что я должен отправить значение с помощью AJAX, я также знаю, что WordPress имеет функцию для обновления таблицы wp_usermeta, то есть:

update_user_meta($user_id, 'dashboard_onboarding_status', 'myValue'); 

Хорошие новости что myValue не является переменной - я просто хочу отправить слово «complete» в db. Это также скрипт администратора - я не уверен, что это имеет значение, как вызвать URL-адрес ajax.

Вот что я codewise:

В моей основной файл JS, у меня есть следующий AJAX скрипт:

$('.skizzar_onabording_dashboard #next.step5').click(ajaxSubmit); 

    function ajaxSubmit(){ 
     jQuery.ajax({ 
      type:"POST", 
      url: "/wp-admin/admin-ajax.php", 
      data: { 
       "value" : "completed" 
      }, 
      success:function(data){ 
       console.log(data); 
      } 
     }); 

     return false; 
    } 

Таким образом, когда пользователь нажимает на .skizzar_onabording_dashboard #next.step5, которые должны вызвать функцию AJAX.

Затем в моем главном файле плагина PHP У меня есть следующие:

function myFunction(){ 
    global $wpdb; 
    $user_id = get_current_user_id(); 

    $completed = $_POST['value']; 
    update_user_meta($user_id, 'onboarding_status', $completed); 
    die(); 
} 
add_action('wp_ajax_myFunction', 'myFunction'); 

Я думаю, что само собой разумеется, это не работает, но я очень знакомы с использованием AJAX и я ca't выяснить Зачем. Похоже, это должно быть просто, хотя - по сути, я просто хочу нажать кнопку и добавить «завершен» к ключу «onboarding_status» в таблице usermeta.

ответ

0

добавить АЯКС функцию действия

function ajaxSubmit(){ 
    var data = { 
     'action': 'myFunction', 
     'value' : 'completed' 
    }; 
    jQuery.post("/wp-admin/admin-ajax.php", data, function(response) { 
     console.log(response); 
    }); 
} 
2

Почти все, что вам нужно находится here.

Сначала вам нужно будет localize ваш admin-ajax.php, так как его называют url: "/wp-admin/admin-ajax.php" - это не очень хорошая практика.

wp_localize_script('some_handle', 'ajax_post_to_db', array(
    'ajaxurl' => admin_url('admin-ajax.php'), 
)); 

Тогда ваш Ajax скрипт для вызова:

add_action('wp_ajax_my_action', 'my_action_callback'); 

function my_action_callback() { 
    global $wpdb; 
    $user_id = get_current_user_id(); 

    $completed = $_POST['value']; 
    update_user_meta($user_id, 'onboarding_status', $completed); 
    die(); 
} 

И, наконец, Ajax в ваших JS файл

$('.skizzar_onabording_dashboard #next.step5').on('click', function(){ 
    ajaxSubmit(); 
}); 

function ajaxSubmit(){ 
    jQuery.ajax({ 
     type:'POST', 
     dataType: 'html', 
     url: ajax_post_to_db.ajaxurl, 
     data: { 
      action: 'my_action_callback' 
     }, 
     success: function(data){ 
      console.log(data); 
     }, 
     error : function (jqXHR, textStatus, errorThrown) { 
      console.log(jqXHR + ' :: ' + textStatus + ' :: ' + errorThrown); 
     }, 
    }); 

    return false; 
} 

Это должно быть.

ОТКАЗ

Я никогда не 100% уверен, что если это

data: { 
    action: 'my_action_callback' 
}, 

или

data: { 
    'action': 'my_action_callback' 
}, 

Но попробовать и посмотреть, что один даст вам вашу функцию обратного вызова. Я почти уверен, что это будет первый.

Также вы можете проверить возврат вызова ajax в своем инспекторе. Просто перейдите на вкладку «Сеть» и выберите XHR, и вы увидите admin-ajax.php, и когда вы нажмете на нее, вы увидите все соответствующие данные, которые он отправляет (заголовки, ответ и т. Д.).

+0

Поздравляем, это очень полный ответ :) Просто добавление информации 'action' и' 'action'' будет делать то же самое. –

+0

Спасибо :) Я никогда не уверен на 100%, если тот или другой будет работать, поэтому я ставлю отказ от ответственности, только в том случае, если он не работает в одном случае: D –

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