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.

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);
}
Tags:  , , , ,

Answer

  1. Avatar for 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:

    1. Primero, debe obtener el rol actual del usuario para verificar si está en el rol ‘team’ o ‘team2’. Puede utilizar el siguiente código:

    $roles = wp_get_current_user()->roles;
    if (in_array(‘team’, $roles) || in_array(‘team2’, $roles)) {
    // añadir la lógica de la tasa aquí
    }

    1. Reemplace la siguiente línea de código:

    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’))

    1. Añada el código modificado a la función ‘add_remove_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;

    $fee_amount = 5.00;
    
    $roles = wp_get_current_user()->roles;
    if ((in_array('team', $roles) || in_array('team2', $roles)) && WC()->session->get('ship_to_different_address'))
        $cart->add_fee(__('Tasa de envío', 'woocommerce'), $fee_amount);
    

    }

    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.

Comments are closed.