es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Ir a pagar sin retornar a ninguna pasarela de pagos en Woocommerce.

Me gustaría tener un botón personalizado debajo del botón de “Realizar pedido” para permitir que el cliente obtenga un pedido y termine en el estado de “Pendiente de pago” sin pagar ahora.

No quiero utilizar una pasarela de pago de “Pagar más tarde”, porque no requiere ningún compromiso por parte del cliente para pagar, es solo para obtener una factura proforma.

Quiero que incluso si se selecciona una pasarela de pago de forma predeterminada al hacer clic en “solicitar una factura proforma”, no se devuelva ningún pago y el cliente pueda pagar más tarde. (un poco diferente a elegir un pago “contra reembolso” o “con cheque”)

Intenté el gancho add_filter('woocommerce_order_needs_payment','__return_false'); dentro de un add_action('woocommerce_checkout_process','create_order'); en un botón de envío personalizado, pero no funciona.

Supongo que es posible porque encontré WC_Checkout::process_order_without_payment(int $order_id) en la documentación de WooCommerce.
¿Es posible?

Espero que sea comprensible.

Gracias de antemano.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para agregar un botón personalizado debajo del botón “Realizar pedido” que permita al cliente crear un pedido sin pagar y terminar en el estado de “Pago pendiente”, puede utilizar los siguientes pasos:

    1. Cree una función personalizada que cree el pedido sin requerir pago. Puede usar la función WC_Checkout::process_order_without_payment( $order_id ) para esto.
    2. Agregue la función personalizada a un hook de acción que se activará cuando se haga clic en el botón personalizado. Puede usar el hook de acción woocommerce_review_order_after_submit para esto.

    3. Agregue un poco de código para crear el botón personalizado y activar el hook de acción. Puede usar el siguiente código:

    add_action( 'woocommerce_review_order_after_submit', 'custom_button' );
    function custom_button() {
        echo '<button id="custom_submit" class="button alt" type="submit" name="custom_submit" value="custom_submit">' . __( 'Solicitar una cotización', 'woocommerce' ) . '</button>';
    }
    
    add_action( 'woocommerce_checkout_process', 'custom_process_checkout' );
    function custom_process_checkout() {
        if ( isset( $_POST['custom_submit'] ) ) {
            $order_id = wc_create_order();
            WC_Checkout::process_order_without_payment( $order_id );
            wc_add_notice( __( 'Se ha creado su cotización', 'woocommerce' ), 'success' );
        }
    }
    

    Esto creará un botón personalizado con la etiqueta “Solicitar una cotización” y, cuando se haga clic, creará un nuevo pedido sin requerir pago y mostrará un mensaje de éxito.

    Tenga en cuenta que esto no utilizará la pasarela de pago “Pagar después”, sino que simplemente creará una cotización que el cliente podrá pagar más tarde utilizando cualquier método de pago que elija.

Comments are closed.