En un archivo de plantilla, necesito obtener los nuevos datos de la interfaz cuando un usuario hace doble clic y cambia el registro en una tabla. Probé y la consola muestra que la solicitud es correcta, sin embargo, independientemente de lo que intenté, el administrador-Ajax siempre devuelve una solicitud incorrecta. El código PHP que espera la solicitud en el archivo de plantilla es:
add_action( "wp_ajax_update_records", "update_records" ); add_action( "wp_ajax_nopriv_please_login", "please_login" ); function update_records(){ global $wpdb; $colName = "'" . $_POST['upd_column'] . "'"; $wpdb->update('Reservations', array( $colName => $_POST['upd_value'] ), array( 'ReservationID' => $_POST['record_id'] ) ); wp_die(); }; function please_login() { echo "You must log in to work"; die(); }El código jQuery que envía la solicitud es:
jQuery('#work td').dblclick( function dolly_script() { var text = jQuery(this).text(); var headerName = jQuery(this).attr('headers'); jQuery(this).text(''); jQuery('<input />').appendTo(jQuery(this)).val(text).select().blur( function() { var newVal = jQuery(this).val(); var selectionID = jQuery(this).closest("tr").children("td[headers='ReservationID']").text(); jQuery(this).parent().text(newVal).find('input').remove(); jQuery.ajax({ url: '../wp-admin/admin-ajax.php', type: 'POST', dataType : "json", data: JSON.stringify({ action: 'update_records', record_id: selectionID, upd_column: headerName, upd_value: newVal }) }) }) }); Probé también sin JSON.stringify y sin tipo de datos.
En el archivo de funciones también he agregado:
wp_register_script( 'dolly_script', '/wp-content/themes/bootcms/work.js'); $myAjax = array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ); wp_localize_script( 'dolly_script', 'ajax_url', $myAjax ); wp_enqueue_script( 'dolly_script' );Dentro de "add_action('wp_enqueue_scripts', 'myfunction');" declaración.
Si alguien pudiera ayudar es muy apreciado, pasé un día entero pero no encontré ninguna solución.
Resolví el problema. Aquí está la solución en caso de que ayude a otros:
Moví la función PHP al archivo functions.php.