Este es un gran 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 radio de pago personalizados para Elija tipos de embalaje premium, opciones de envoltura de regalos, servicios específicos O lo que sea que pueda aumentar su AOV (valor promedio de pedido).
La selección de botones de radio debe funcionar con «AJAX», lo que significa que tan pronto como se elige el botón de radio, el pago debe actualizar para mostrar las tarifas y los totales actualizados.
Algo similar (y también más complejo, como ofrecer productos adicionales) se logra por el Complemento de complementos de checkout wooCommerce Vendido 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.
Php Snippet: agregue una tarifa dinámica basada en botones de radio personalizados @ WooCommerce Checkout
/** * @snippet Dynamic Fee @ WooCommerce Checkout * @how-to businessbloomer.com/woocommerce-customization * @author Rodolfo Melogli, Business Bloomer * @testedwith WooCommerce 3.9 * @community https://businessbloomer.com/club/ */ // 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 ''; echo 'Customize Your Order!
'; woocommerce_form_field( 'radio_choice', $args, $chosen ); echo ''; } // 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'] ); } }