WooCommerce: agregue tarifas de pago basadas en un botón de opción personalizado

Este es un excelente fragmento de WooCommerce (o complemento, si desea llamarlo así) para aquellos que desean proporcionar tarifas de pago condicionales. Por ejemplo, es posible que deba mostrar botones de opción de pago personalizados para elegir tipos de empaque premium, opciones de envoltura de regalo, servicios específicos o lo que sea que pueda aumentar su AOV (Valor promedio de pedido).

La selección del botón de opción debe funcionar con "Ajax", lo que significa que tan pronto como se elija el botón de opción, el pago debe actualizarse para mostrar las tarifas y los totales actualizados.

Algo similar (y también más complejo, como ofrecer productos adicionales) se logra con el complemento WooCommerce Checkout Add-Ons que  se vende en el mercado oficial de WooCommerce.com. Pero en este caso, queremos echar un vistazo a la codificación personalizada para que tenga algo con lo que jugar. Disfrutar.

Agregue una tarifa dinámica al pago de WooCommerce según la elección del botón de opción personalizado

Fragmento de PHP: agregue una tarifa dinámica basada en botones de radio personalizados @ WooCommerce Checkout

/**
 * @snippet       Dynamic Fee @ WooCommerce Checkout
 * @how-to        Get CustomizeWoo.com FREE
 * @author        Rodolfo Melogli
 * @testedwith    WooCommerce 3.9
 * @donate $9     https://businessbloomer.com/bloomer-armada/
 */
 
// Part 1
// Display Radio Buttons
  
add_action( 'woocommerce_review_order_before_payment', 'bbloomer_checkout_radio_choice' );
  
function bbloomer_checkout_radio_choice() {
     
   $chosen = WC()->session->get( 'radio_chosen' );
   $chosen = empty( $chosen ) ? WC()->checkout->get_value( 'radio_choice' ) : $chosen;
   $chosen = empty( $chosen ) ? '0' : $chosen;
        
   $args = array(
   'type' => 'radio',
   'class' => array( 'form-row-wide', 'update_totals_on_change' ),
   'options' => array(
      '0' => 'No Option',
      '10' => 'Option 1 ($10)',
      '30' => 'Option 2 ($30)',
   ),
   'default' => $chosen
   );
     
   echo '<div id="checkout-radio">';
   echo '<h3>Customize Your Order!</h3>';
   woocommerce_form_field( 'radio_choice', $args, $chosen );
   echo '</div>';
     
}
  
// Part 2
// Add Fee and Calculate Total
   
add_action( 'woocommerce_cart_calculate_fees', 'bbloomer_checkout_radio_choice_fee', 20, 1 );
  
function bbloomer_checkout_radio_choice_fee( $cart ) {
   
   if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;
    
   $radio = WC()->session->get( 'radio_chosen' );
     
   if ( $radio ) {
      $cart->add_fee( 'Option Fee', $radio );
   }
   
}
  
// Part 3
// Add Radio Choice to Session
  
add_action( 'woocommerce_checkout_update_order_review', 'bbloomer_checkout_radio_choice_set_session' );
  
function bbloomer_checkout_radio_choice_set_session( $posted_data ) {
    parse_str( $posted_data, $output );
    if ( isset( $output['radio_choice'] ) ){
        WC()->session->set( 'radio_chosen', $output['radio_choice'] );
    }
}

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir