请尝试以下重新访问和增强的代码版本,检查当前用户ID是否与所请求订单ID的已注册驱动程序ID订单元数据匹配。
我添加了一个用户ID的隐藏输入字段和一个显示处理消息的隐藏消息框。
表格:
<?php if ( is_user_logged_in()) : ?>
<form id="expense_form" class="expense_form" action="" method="post">
<label for="order-id"><?php _e('Order ID'); ?>:</label>
<input class="exp_order_no" id="exp_order_no" type="text" pattern="[0-9]*" placeholder="Enter the Order Number" required>
<label for="expense"><?php _e('Expense'); ?>:</label>
<input class="expense_amt" id="expense_amt" type="text" pattern="[0-9]*" placeholder="Enter the expense amount" required>
<label for="reason"><?php _e('Reason for Expense'); ?>:</label>
<textarea class="expense_reason" id="expense_reason" id="reason" name="reason" rows="4" placeholder="<?php _e('Enter Message'); ?>" required></textarea>
<p id="message-response" style="display:none;"></p>
<input type="submit" class="exp_but" id="exp_but" value="<?php _e('Submit'); ?>">
<input type="hidden" id="user_id" name="user_id" value="<?php echo get_current_user_id(); ?>">
</form>
<?php endif; ?>
jQuery代码
jQuery(function($) {
$('#expense_form').on('submit', function(e) {
e.preventDefault();
$.ajax({
url: '<?php echo admin_url('admin-ajax.php'); ?>',
type: 'POST',
data: {
action: 'add_order_expense_cf',
order_id: $('#exp_order_no').val(),
user_id: $('#user_id').val(),
expense: $('#expense_amt').val(),
reason: $('#expense_reason').val()
},
success: function( response ) {
const color = response.success ? 'green' : 'red',
message = response.data;
$('#message-response').html(response.data).css('color',color).fadeIn().delay(2000).fadeOut();
console.log(response);
},
error: function( error ) {
$('#message-response').html('Something went wrong, try later please.').css('color','red').fadeIn().delay(2000).fadeOut();
console.log(error);
}
});
});
});
PHP:
add_action( 'wp_ajax_add_order_expense_cf', 'add_order_expense_custom_fields' );
add_action('wp_ajax_nopriv_add_order_expense_cf', 'add_order_expense_custom_fields');
function add_order_expense_custom_fields() {
if( isset($_POST['order_id']) && isset($_POST['user_id']) ) {
$order = wc_get_order( intval($_POST['order_id']) );
if( ! is_a($order, 'WC_Order') ) {
wp_send_json_error( __('Wrong order number, please retry.') );
}
$driver_id = (int) $order->get_meta('lddfw_driverid');
if( $driver_id === 0 || intval($_POST['user_id']) !== $driver_id ) {
wp_send_json_error( __('Sorry you are not allowed to request expenses on that order number.') );
}
$order->update_meta_data( 'Driver Expense', floatval($_POST['expense']) );
$order->update_meta_data( 'Driver Expense Reason', sanitize_textarea_field($_POST['reason']) );
$order->save();
wp_send_json_success( __('Data has been successfully sent and saved.') );
}
wp_send_json_error( __('Something went wrong, please try later.') );
}
测试并工作。