Agregue un campo de pago personalizado basado en la cantidad de artículos del carrito en Woocommerce

4 minutos de lectura

Agregue un campo de pago personalizado basado en la cantidad
bosque

En última instancia, estoy tratando de agregar un campo para pagar en WooCommerce cuando un cliente tiene más de una cierta cantidad en su pago. Para este ejemplo, estoy usando 500 y solo intento obtener un mensaje para mostrar en la parte inferior del pago.

He estado probando varias variaciones de código y esto es lo que tengo hasta ahora.

add_action( 'woocommerce_after_checkout_form', 'woocommerce_add_quantity_message', 12 );

function woocommerce_add_quantity_message() {
global $woocommerce;
$total_products = 0;
foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) 
{
$total_products += $values['quantity'];
}

if($total_products >=500 )
{
echo '<div class="card_discount_message"><p>MORE THAN 500 WOAHHHH</p></div>';
}

Cualquier sugerencia sería muy apreciada. También intenté modificar el código que se encuentra aquí sin suerte. Woocommerce agrega una tarifa al carrito según la cantidad.

Agregue un campo de pago personalizado basado en la cantidad
LoicTheAztec

Actualizado

No puede establecer un campo de pago personalizado fuera del formulario de pago.

Por lo tanto, estos campos personalizados solo pueden estar al final dentro del formulario de pago, que se encuentra después de las notas del pedido.

Pruebe el siguiente código que mostrará un campo de pago personalizado una vez que se alcance la cantidad específica del artículo del carrito (después de las notas de pedido):

add_action( 'woocommerce_after_order_notes', 'add_field_based_quantity', 20, 1 );
function add_field_based_quantity( $checkout ) {
    if( WC()->cart->get_cart_contents_count() >= 500 ) {
        echo '<div id="my_custom_checkout_field"><h2>' . __('My Field') . '</h2>';

        woocommerce_form_field( 'my_field_name', array(
            'type'          => 'text',
            'class'         => array('my-field-class form-row-wide'),
            'label'         => __('Fill in this field'),
            'placeholder'   => __('Enter something'),
        ), $checkout->get_value( 'my_field_name' ));

        echo '</div>';
    }
}

El código va en el archivo function.php de su tema secundario activo (o tema activo). Probado y funciona.

ingrese la descripción de la imagen aquí

El código se basa en la documentación oficial de Woocommerce: Agregar un campo de pago especial personalizado

Entonces verá en esa documentación cómo guardar este campo personalizado en el Pedido y cómo podrá mostrarlo también…


Puede agregar un aviso personalizado al final si lo desea con el siguiente código:

add_action( 'woocommerce_after_checkout_form', 'woocommerce_add_quantity_message', 20 );
function woocommerce_add_quantity_message() {
    if( WC()->cart->get_cart_contents_count() >= 500 ) {
        wc_print_notice( __("MORE THAN 500 WOAHHHH !", "woocommerce"), 'notice');
    }
}

El código va en el archivo function.php de su tema secundario activo (o tema activo). probado y funciona.

  • ¡Muchas gracias! El aviso funciona muy bien, así que debería poder trabajar con esto para obtener el resultado final que necesito.

    – Bosque

    10 de julio de 2018 a las 7:32

  • @forest No puede establecer un campo de pago fuera del formulario de pago. Actualicé el código agregando un campo de pago personalizado después de las notas de pedido en la medida de lo posible dentro del formulario de pago. Por favor pruebalo. Tus comentarios serán apreciados.

    – LoicTheAztec

    10 de julio de 2018 a las 8:52

  • EDITAR: Veo que la documentación de woocommerce debería responder estas preguntas Oh, excelente… Lo siento, ¡supongo que tengo algunas preguntas más ahora! ¿Cómo obtengo la entrada del campo de formulario para escribir en el pedido y cómo hago que sea obligatorio solo en estas condiciones y muestre un error si no se completa?

    – Bosque

    10 de julio de 2018 a las 10:18


  • ¡OK! Volviendo de nuevo, un problema… Ahora tengo una comprobación que muestra que todo está bien. Sin embargo, como es condicional, ¡a menudo no se muestra! PERO el error aún impide que alguien se registre. ¿Cómo también hago que el error sea condicional? /** * Procesar el pago */ add_action(‘woocommerce_checkout_process’, ‘my_custom_checkout_field_process’); function my_custom_checkout_field_process() { // Verifica si está configurado, si no lo está agrega un error. si ( ! $_POST[‘my_field_name’] ) wc_add_notice( __( ‘Ingrese algo en este nuevo campo brillante.’ ), ‘error’ ); }

    – Bosque

    10 de julio de 2018 a las 10:39

  • @Forest Deberías hacer una nueva pregunta, por favor. Gracias.

    – LoicTheAztec

    10 de julio de 2018 a las 11:58

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad