• Hola, tengo un problema. Cuando configuro woocommerce los pagos contra reembolso. No actualiza los precios que le defino en mi pluguin personalizado. os dejo el codigo por si alguien me puede ayudar.

    ?php
    
    class Softomark_Plugin_WooCommerce_Handler {
    
        public function __construct() {
    
            add_action('wp_enqueue_scripts', [$this, 'softomark_enqueue_scripts']);
    
            add_filter('woocommerce_settings_api_form_fields_cod', [$this, 'add_cod_custom_settings']);
    
            add_action('woocommerce_cart_calculate_fees', [$this, 'softomark_apply_cod_fees'], 20);
    
            add_filter('parse_query', [$this, 'dl_filtrar_pedidos_pago']);
    
            add_action('restrict_manage_posts', [$this, 'dl_anadir_filtro_forma_pago_pedidos']);
    
        }
    
        public function softomark_enqueue_scripts() {
    
            if (is_checkout()) {
    
                wp_enqueue_script(
    
                    'softomark-update-cart',
    
                    plugin_dir_url(__FILE__) . 'update-cart.js',
    
                    array('jquery'),
    
                    '1.0.0',
    
                    true
    
                );
    
            }
    
        }
    
        public function add_cod_custom_settings($form_fields) {
    
            $form_fields['cod_fixed_fee'] = array(
    
                'title'       => __('Tarifa fija', 'softomark-plugin-base'),
    
                'type'        => 'number',
    
                'description' => __('Tarifa fija que se añadirá al total del pedido.', 'softomark-plugin-base'),
    
                'default'     => 0,
    
                'desc_tip'    => true,
    
            );
    
            $form_fields['cod_percentage_fee'] = array(
    
                'title'       => __('Porcentaje de la venta', 'softomark-plugin-base'),
    
                'type'        => 'number',
    
                'description' => __('Porcentaje que se añadirá basado en el total del pedido.', 'softomark-plugin-base'),
    
                'default'     => 0,
    
                'desc_tip'    => true,
    
                'custom_attributes' => array(
    
                    'step' => '0.1',
    
                    'min' => '0',
    
                )
    
            );
    
            return $form_fields;
    
        }
    
        public function softomark_apply_cod_fees($cart) {
    
            if (is_admin() && !defined('DOING_AJAX')) return;
    
            if (did_action('woocommerce_cart_calculate_fees') >= 2) return;  // Evitar la recursión
    
            $payment_gateways = WC()->payment_gateways->payment_gateways();
    
            if (WC()->session->get('chosen_payment_method') == 'cod') {
    
                $cod_fixed_fee = $payment_gateways['cod']->settings['cod_fixed_fee'];
    
                $cod_percentage_fee = $payment_gateways['cod']->settings['cod_percentage_fee'];
    
                $fee = $cod_fixed_fee + ($cart->cart_contents_total * $cod_percentage_fee / 100);
    
                $cart->add_fee(__('Tarifa de contra reembolso', 'softomark-plugin-base'), $fee);
    
                WC()->shipping->reset_shipping();
    
            }
    
        }
    
        public function dl_anadir_filtro_forma_pago_pedidos() {
    
            global $typenow;
    
            if ('shop_order' !== $typenow) {
    
                return;
    
            }
    
            $methods = WC()->payment_gateways->payment_gateways();
    
            echo '<select name="payment_method" id="dropdown_payment_method">
    
                    <option value="">' . __('Todos los métodos de pago', 'text_domain') . '</option>';
    
            foreach ($methods as $method) {
    
                if ('yes' === $method->enabled) {
    
                    echo '<option value="' . esc_attr($method->id) . '">' . esc_html($method->get_title()) . '</option>';
    
                }
    
            }
    
            echo '</select>';
    
        }
    
        public function dl_filtrar_pedidos_pago($query) {
    
            global $pagenow, $typenow;
    
            if ('edit.php' !== $pagenow || 'shop_order' !== $typenow || !isset($_GET['payment_method']) || empty($_GET['payment_method'])) {
    
                return;
    
            }
    
            $payment_method = sanitize_text_field($_GET['payment_method']);
    
            $query->set('meta_query', array(
    
                array(
    
                    'key' => '_payment_method',
    
                    'value' => $payment_method,
    
                ),
    
            ));
    
        }
    
    }
    document.addEventListener('DOMContentLoaded', function() {
        var checkoutForm = document.querySelector('form.checkout');
        if (checkoutForm) {
            checkoutForm.addEventListener('change', function(event) {
                if (event.target.name === 'payment_method') {
                    // Disparar el evento 'update_checkout' utilizando jQuery
                    jQuery('body').trigger('update_checkout');
                }
            });
        }
    });
    
    
    

    La página con la que necesito ayuda: [accede para ver el enlace]

Viendo 1 respuesta (de un total de 1)
  • Moderador kallookoo

    (@kallookoo)

    Hola

    Prueba quitando el did_action y el reset_shipping . Es lo unico que creo despues de ver el codigo que podria ser el causante.

    Tambien te sugiero que hagas una busqueda en internet ya que existen varios resultados o incluso examines algun plugin que tambien haga lo mismo. Veras algunos en el propio repositorio.

Viendo 1 respuesta (de un total de 1)
  • El debate ‘Woocommerce actualiza los precios contra reembolso’ está cerrado a nuevas respuestas.