Agregue una tarifa para roles de usuario específicos cuando se selecciona “Enviar a una dirección diferente?” en la página de pago de WooCommerce.
Tengo un sitio mayorista con diferentes roles de usuario y quiero permitir que los empleados comiencen a ordenar en línea desde aquí también.
Solo quiero agregar una tarifa de $5 si los roles de usuario ‘team’ y ‘team2’ seleccionan enviar a una dirección diferente (obtienen envío gratuito si se envía a su dirección de facturación).
Ningún otro rol de usuario debería ver la tarifa si selecciona enviar a una dirección diferente.
Esta es la solución más cercana que he encontrado para hacer esto, pero necesito ayuda para configurar este código para que se aplique solo a esos dos roles de usuario y a nadie más.
// enviar como regalo para el rol del equipo y del equipo2, agregar una tarifa de $5
add_filter('woocommerce_form_field', 'remove_order_comments_optional_fields_label', 10, 4);
function remove_order_comments_optional_fields_label($field, $key, $args, $value)
{
// Solo en la página de pago para el campo de notas del pedido
if ('ship_to_different_address' === $key && is_checkout()) {
$optional = ' <span class="optional">(' . esc_html__('opcional', 'woocommerce') . ')</span>';
$field = str_replace($optional, '', $field);
}
return $field;
}
// Script Ajax / jQuery
add_action('wp_footer', 'ship_to_different_address_script');
function ship_to_different_address_script()
{
// En la página de pago
if ((is_checkout() && !is_wc_endpoint_url())) :
?>
<script type="text/javascript">
jQuery(function ($) {
if (typeof woocommerce_params === 'undefined')
return false;
console.log('definido');
$('input[name=ship_to_different_address]').click(function () {
var fee = $(this).prop('checked') === true ? '1' : '';
$.ajax({
type: 'POST',
url: woocommerce_params.ajax_url,
data: {
'action': 'ship_to_different_address',
'ship_to_different_address': fee,
},
success: function (result) {
$('body').trigger('update_checkout');
console.log(result);
},
});
});
});
</script>
<?php
endif;
}
// Obtener la solicitud ajax y establecer el valor en la sesión de WC
add_action('wp_ajax_ship_to_different_address', 'get_ajax_ship_to_different_address');
add_action('wp_ajax_nopriv_ship_to_different_address', 'get_ajax_ship_to_different_address');
function get_ajax_ship_to_different_address()
{
if (isset($_POST['ship_to_different_address'])) {
WC()->session->set('ship_to_different_address', ($_POST['ship_to_different_address'] ? '1' : '0'));
echo WC()->session->get('ship_to_different_address');
}
die();
}
// Agregar / eliminar una tarifa personalizada
add_action('woocommerce_cart_calculate_fees', 'add_remove_ship_to_different_address', 10, 1);
function add_remove_ship_to_different_address($cart)
{
// Solo en la caja
if ((is_admin() && !defined('DOING_AJAX')) || is_cart())
return;
$fee_amount = 5.00;
if (WC()->session->get('ship_to_different_address'))
$cart->add_fee(__('Tarifa de envío', 'woocommerce'), $fee_amount);
}
davy.ai
Para aplicar la tasa de $5 solamente a los roles de usuario ‘team’ y ‘team2’ cuando éstos seleccionen una dirección de envío diferente durante la compra, puede modificar el código de la siguiente manera:
$roles = wp_get_current_user()->roles;
if (in_array(‘team’, $roles) || in_array(‘team2’, $roles)) {
// añadir la lógica de la tasa aquí
}
if (WC()->session->get(‘ship_to_different_address’))
con:
$roles = wp_get_current_user()->roles;
if ((in_array(‘team’, $roles) || in_array(‘team2’, $roles)) && WC()->session->get(‘ship_to_different_address’))
add_action( ‘woocommerce_cart_calculate_fees’, ‘add_remove_ship_to_different_address’, 10, 1 );
function add_remove_ship_to_different_address( $cart )
{
// Sólo en la compra
if ((is_admin() && !defined(‘DOING_AJAX’)) || is_cart())
return;
}
Esto asegurará que la tasa de $5 se agregue solamente para los usuarios en los roles de ‘team’ o ‘team2’ cuando ellos seleccionan una dirección de envío diferente durante la compra, y no para ningún otro rol de usuario.