Por mi querida vida, no puedo entender cómo evitar el proceso de envío de pedidos de Woocommerce para permitir que se agregue un token de tarjeta como entrada oculta antes de que se envíe el formulario para poder publicarlo en el pedido recibido. El estándar e.preventDefault(); no funciona aquí.
var form = jQuery("#form-checkout"); form.addEventListener("submit", function (event) { event.preventDefault(); // Add token to the form var tokenInput = document.createElement("input"); tokenInput.setAttribute("name", "token"); tokenInput.setAttribute("type", "hidden"); tokenInput.setAttribute("value", "test"); form.appendChild(tokenInput); });Código que se acerca:
var form = jQuery("#form-checkout"); form.on('checkout_place_order', function() { // Add token to the form var tokenInput = document.createElement("input"); tokenInput.setAttribute("name", "token"); tokenInput.setAttribute("type", "hidden"); tokenInput.setAttribute("id", "token"); tokenInput.setAttribute("value", "test"); form.appendChild(tokenInput); if(jQuery("#token").length > 0) { return true; } else { return false; } });Cuando se devuelve falso, se evita el envío y se agrega el campo. Cuando se devuelve verdadero, el campo también se agrega pero no se publica nada. Esto probablemente se deba a que el campo se agrega después del envío pero antes de la llamada ajax.
La única forma que se me ocurre es agregar primero el campo -> devolver falso -> luego ejecutar la función nuevamente con verdadero. Pero, por supuesto, después de falso no se ejecuta nada. ¿Cuál sería una forma de abordar esto? (cualquier ayuda es apreciada)