У меня есть база данных (календарь), где авторизованные пользователи могут обновлять ячейки таблицы, используя jeditable. Я конвертирую календарь в плагин WordPress для работы на WordPress сайте. Я изучил несколько ответов, описывающих, как использовать jeditable с WordPress AJAX, но я не могу заставить его работать в моем плагине. Плагин jeditable работает на моей странице, но я не могу заставить плагин выполнить фактическое обновление таблицы wpdb.
в моих функциях php файл:
add_action( 'wp_ajax_update_record', 'update_record' );
function update_record() {
global $wpdb;
$field_id = $_POST['field_id'];
$pieces = explode('-', $field_id);
$field=$pieces[0];
$id=$pieces[1];
$newInfo = $_POST['newInfo'];
$table_name = "myCalendar";
$qry_result = $wpdb->update(
$table_name,
array( $field => $newInfo, 'id' => $id ),
array( '%s', '%d' )
);
echo stripslashes($_POST['newInfo']);
wp_die();
}
add_action( 'admin_enqueue_scripts', 'my_cal_scripts' );
add_action( 'wp_enqueue_scripts', 'my_cal_scripts' );
function my_cal_scripts() {
wp_register_script(
'ajax-script',
plugin_dir_url( __FILE__ ) . 'js/my-cal-script.js',
array( 'jquery-jeditable'),
NULL,
TRUE
);
$script_settings = array(
'ajax_url' => admin_url( 'admin-ajax.php' ),
'table_name' => 'myCalendar',
'field_id' => $_POST['field_id'],
'pieces' => explode('-', $field_id),
'field' => $pieces[0],
'id' => $pieces[1],
'newInfo' => $_POST['newInfo'],
'action' => 'update_record'
);
wp_localize_script(
'ajax-script',
'ajax_object',
$script_settings
);
wp_enqueue_script( 'jquery-jeditable' );
wp_enqueue_script( 'ajax-script' );
}
и вот мой сценарий jQuery:
( function( $ ) {
'use strict';
$( document ).ready( function() {
var data = {
'action': ajax_object.update_record,
'id' : ajax_object.field_id,
'name' : ajax_object.newInfo
};
$('.edit').editable(function(value, settings) {
$.post(
ajax_object.ajax_url,
{
submitdata : data,
}, function(response)
{
});
return(value);
},
{
indicator : 'Saving...',
placeholder : '',
tooltip : 'Click to edit, press Enter to save...',
cancel : 'Cancel',
submit : 'Save',
cancelcssclass : 'btn btn-danger',
submitcssclass : 'btn btn-success',
maxlength : 200
});
} );
} )( jQuery );
Похоже, что все работает, за исключением фактической таблицы ‘myCalendar’ не обновляется.
Что мне не хватает?
В КОНЦЕ КОНЦОВ! разобрался с проблемой. Моя функция update_record для ОБНОВЛЕНИЯ базы данных содержит ошибку — она должна быть:
$wpdb->update(
$table_name,
array( $field => $newInfo ),
array( 'id' => $id ),
array( '%s' )
);
Считайте, что проблема решена.
Других решений пока нет …