2015-02-25 6 views
0

Я использую функцию сортировки jQuery внутри плагина Wordpress, чтобы пользователь мог установить порядок отображения нескольких элементов списка. Когда пользователь повторно заказывает элементы, jquery .ajax() должен отправить запрос на скрипт обработки, чтобы обновить таблицу.Правильный способ использования AJAX для обновления базы данных Wordpress

Это JQuery:

jQuery("#sortable").sortable({ 
    update : function() { 
     var serial = jQuery('#sortable').sortable('serialize'); //split up each li into an array item 
     jQuery("body").css("cursor", "progress"); 
     jQuery.ajax({ 
      url: "../wp-content/plugins/libhours/includes/_process.php", 
      type: "post", 
      data: serial, 
      success: function(msg){ 
       jQuery("body").css("cursor", "default"); 
      }, 
      error: function(){ 
       alert("Error updating the table via AJAX."); 
       jQuery("body").css("cursor", "default"); 
      } 
     }) 
    } 
}); 

URL-адрес находится, и все работает, пока я не получаю сообщение об ошибке из файла _process.php

Call to a member function update() on a non-object in ... _process.php 

Я не понимаю эту проблему, если, скажем, , Я обращаюсь к файлу _process.php через форму представления; вставка и обновление записей работают нормально. Вот функция обновления для справки ...

function cp_libhours_update_area_order($data) { 
    global $wpdb, $table_prefix; 

    $i = 1; //our counter to set the rank of each record NOTE: start at 1...0 will be reserved for new entries 
    foreach ($data as $area) { 
    // Execute statement: 
    $update_sql = $wpdb->update($table_prefix . library_areas, 
     array(
      'displayOrder' => $i 
     ), 
     array(
      'id' => $area 
     ) 
    ); 
    $i++; 
    } 
} 
if(isset($_POST['area'])) cp_libhours_update_area_order($_POST['area']); 

ответ

1

Это не способ сделать вызов AJAX в WordPress. В настоящее время вы выполняете прямой вызов AJAX в файле _process.php. Вызов будет работать, но он не загружается в пределах области WordPress. Есть 2 решения:

1) Включить WP-load.php внутри файла _process.php, или:

2) (лучший вариант) Сделайте это the WordPress way: определить свое действие с add_action ('wp_ajax_my_action' , 'my_action_callback') и выполнить вызов AJAX в файл admin_ajax Wordpress. Посмотрите эту страницу для получения дополнительной информации: http://codex.wordpress.org/AJAX_in_Plugins

+0

Perfect. № 2 - это, безусловно, путь. Благодарю. – Ravioli87

+0

Хорошо! Пожалуйста :) –

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