I was define following script for deleting multiple data. Please check the attached image. I will select multiple title and click deleted title button data will be deleted. I checked the log there is showing following error. I cant understand how to fix this error.
IDs received for deletion: Array
(
[0] => 10
1 => 8
)
check error: %d,%d
Prepared query for deletion: DELETE FROM wp_slf_schedule_post_title_log WHERE id IN (%d,%d)
IDs received for deletion: 0
PHP script
public function otslf_delete_multiple_blog_title() {
//check_ajax_referer('ai-seo-content-nonce', 'nonce');
if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['nonce'] ) ), 'ai-seo-content-nonce' ) ) {
wp_send_json_error( __( 'Invalid nonce.', 'super-fast-blog-ai' ) );
}
error_log( $_POST['nonce'] ); // Debugging line
global $wpdb;
$table_name = $wpdb->prefix . 'slf_schedule_post_title_log';
$ids = isset($_POST['id']) ? array_map('intval', $_POST['id']) : [];
error_log('IDs received for deletion: ' . print_r($ids, true)); // Debugging line
$placeholders = implode(',', array_fill(0, count($ids), '%d'));
$query = "DELETE FROM $table_name WHERE id IN ($placeholders)";
error_log('check error: ' . $placeholders); // Debugging line
error_log('Prepared query for deletion: ' . $query); // Debugging line
$deleted = $wpdb->query($wpdb->prepare($query, $ids)); // phpcs:ignore WordPress.DB.DirectDatabaseQuery
error_log('IDs received for deletion: ' . $deleted);
if ($deleted !== false) {
wp_send_json_success(['message' => 'Selected titles deleted successfully.']);
} else {
wp_send_json_error(['message' => 'Failed to delete selected titles.']);
}
}
jQuery script
jQuery(document).ready(function($) {
jQuery('#select_title').click(function() {
let isChecked = jQuery(this).is(':checked');
jQuery('input[name="select_title[]"]').prop('checked', isChecked);
});
jQuery('#delete-selected').click(function(e) {
e.preventDefault();
let id = jQuery('input[name="select_title[]"]:checked').map(function() {
return jQuery(this).val();
}).get();
console.log('Selected IDs:', id);
if (id.length === 0) {
jQuery.toast({ text: "Please select at least one title to delete.",
heading: 'Failed',
icon: 'error',
showHideTransition: 'fade',
allowToastClose: true,
hideAfter: 3000,
stack: 5,
position: 'top-right',
});
}
jQuery.ajax({
url: ajax_ob.ajax_url,
type: 'POST',
data: {
action: 'otslf_delete_multiple_blog_title',
id: id,
nonce: ajax_ob.nonce
},
beforeSend: function(xhr) {
jQuery('#delete-selected').append('<span class="loading-spinner"></span>');
},
success: function(response) {
console.log('Response:', response);
if (response.success) {
jQuery('input[name="select_title[]"]:checked').closest('tr').remove();
jQuery.toast({
text: "!Selected Title Deleted Successfully",
heading: 'success',
icon: 'success',
showHideTransition: 'fade',
allowToastClose: true,
hideAfter: 4000,
stack: 15,
position: { left : 'auto', right : 100, top : 153, bottom : 'auto' },
textAlign: 'left',
loader: true,
loaderBg: '#9EC600',
});
/* setTimeout(function() {
location.reload();
}, 2000); */
} else {
jQuery.toast({ text: "Please select at least one title to delete.",
heading: 'Failed',
icon: 'error',
showHideTransition: 'fade',
allowToastClose: true,
hideAfter: 3000,
stack: 5,
position: 'top-right',
});
}
},
complete: function() {
jQuery('#delete-selected').find('.loading-spinner').remove();
},
error: function(xhr, status, error) {
jQuery.toast({ text: 'An error occurred: ' + error,
heading: 'NOTE',
icon: 'error',
showHideTransition: 'fade',
allowToastClose: true,
hideAfter: 3000,
stack: 5,
position: 'top-right',
});
}
});
});
});