Woocommerce 自定义装运方式重新计算

Woocommerce 自定义装运方式重新计算,woocommerce,hook-woocommerce,shipping-method,Woocommerce,Hook Woocommerce,Shipping Method,我正在创建一个自定义的运输方法。它工作正常,但当我使用航运计算器,它不会刷新 <?php /** * Plugin Name: Expresso Jundiaí for WooCommerce * Plugin URI: https://valoremarketing.com.br * Description: Adds Expresso Jundiaí shipping methods to your WooCommerce

我正在创建一个自定义的运输方法。它工作正常,但当我使用航运计算器,它不会刷新

<?php
/**
 * Plugin Name:          Expresso Jundiaí for WooCommerce
 * Plugin URI:           https://valoremarketing.com.br
 * Description:          Adds Expresso Jundiaí shipping methods to your WooCommerce store.
 * Author:               Valore + NSC
 * Author URI:           https://valoremarketing.com.br
 * Version:              1.0.0
 * License:              GPLv2 or later
 *
 */

if (!defined('ABSPATH')) {
    exit;
}

/*
 * Check if WooCommerce is active
 */
if (in_array('woocommerce/woocommerce.php', apply_filters('active_plugins', get_option('active_plugins')))) {

    function expresso_jundiai_shipping_method()
    {
        if (!class_exists('Expresso_Jundiai_Shipping_Method')) {

            class Expresso_Jundiai_Shipping_Method extends WC_Shipping_Method
            {
                 private $args = '';

                /**
                 * Constructor
                 *
                 * @access public
                 * @return void
                 */
                public function __construct($instance_id = 0)
                {
                    $this->id = 'expresso-jundiai';
                    $this->title = 'Expresso Jundiaí';
                    $this->instance_id = absint($instance_id);
                    $this->method_title = __('Expresso Jundiaí Entregas', 'expresso-jundiai');
                    $this->method_description = __('Entregas feitas por Expresso Jundiaí', 'expresso-jundiai');

                    /**
                     * Utilized to woocommerce to verify the supported features by the shipping method
                     */
                    $this->supports = array(
                        'shipping-zones',
                        'instance-settings',
                        'instance-settings-modal',
                        'settings'
                    );
                    $this->init();
                }

                /**
                 * Init your settings
                 *
                 * @access public
                 * @return void
                 */
                public function init()
                {
                    $this->init_form_fields();
                    $this->init_settings();

                    /// Actions.
                    add_action('woocommerce_update_options_shipping_' . $this->id, array($this, 'process_admin_options'));
                }

                /**
                 * Define settings field for this shipping
                 *
                 * To access the fields:
                 * $shipping_methods = WC()->shipping->get_shipping_methods();
                 * foreach ( $shipping_methods as $key => $shipping_method ) {
                 *      $code = $shipping_method->settings->code;
                 * }
                 *
                 * @return void
                 */
                public function init_form_fields()
                {...}


                /**
                 * Get the args needed to make a post request to API target
                 *
                 * @param $package
                 * @return mixed
                 */
                private function get_request_args( $package )
                {...}


                /**
                 * This function is used to calculate the shipping cost.
                 * Within this function we can check for weights, dimensions and other parameters in package.
                 *
                 * @access public
                 * @param mixed $package
                 * @return void
                 */
                public function calculate_shipping( $package = array() )
                {
                    $args       = $this->get_request_args( $package );
                    $uri        = $this->get_option( 'apiUri' );
                    $response   = $this->request_to_api( $uri, $args );

                    if ($response !== NULL) {
                        $this->add_rate( array(
                            'id' => $this->id,
                            'label' => $this->title,
                            'package' => $package,
                            'cost' => $response->vlrFrete,
                        ) );
                    }
                }

                /**
                 * Calculates the cubage of all products.
                 *
                 * @param $package
                 * @return float|int
                 */
                private function get_total_cubage( $package ) {
                    $total = 0;

                    foreach ( $package['contents'] as $item_id => $values )
                    {
                        $_product = $values['data'];
                        $height = (float) $_product->get_height();
                        $width  = (float) $_product->get_width();
                        $length = (float) $_product->get_length();

                        $total += $height * $width * $length;
                    }

                    return ( ($total > 0) ? ( $total/1000000 ) : 0 );
                }

                /**
                 * @param $package
                 * @return int
                 */
                private function get_total_volumes( $package ) {
                    $total = 0;

                    foreach ( $package['contents'] as $item_id => $values ) {
                        $total += (int) $values['quantity'];
                    }

                    return $total;
                }


                /**
                 * Calculate the total wheight of all products of the order
                 * @param $package
                 * @return float|int
                 */
                private function get_order_total_weight( $package ) {

                    $total = 0;

                    foreach ( $package['contents'] as $item_id => $values )
                    {
                        $_product = $values['data'];
                        $_product_weight = (float) $_product->get_weight();
                        $total += $_product_weight * $values['quantity'];
                    }

                    $total = wc_get_weight( $total, 'kg' );

                    return $total;
                }

                /**
                 * @param $uri
                 * @param $args
                 * @return mixed|void
                 */
                private function request_to_api( $uri, $args )
                {
                    $response = wp_remote_post( $uri, $args );
                    var_dump($args, $response);
                    if ( is_wp_error( $response ) || '200' != wp_remote_retrieve_response_code( $response )) {
                        return;
                    }
                    $body = json_decode( wp_remote_retrieve_body( $response ) );
                    if ( empty( $body ) )
                        return;
                    return $body;
                }

            }
        }
    }
    add_action('woocommerce_shipping_init', 'expresso_jundiai_shipping_method');

    /**
     * Adds the name of class into shipping methods
     *
     * @param $methods
     * @return array
     */
    function add_expresso_jundiai_shipping_method($methods)
    {
        /**
         * The key of the array $method must match the shipping method id
         */
        $methods['expresso-jundiai'] = 'Expresso_Jundiai_Shipping_Method';
        return $methods;
    }

    add_filter('woocommerce_shipping_methods', 'add_expresso_jundiai_shipping_method');
}

成功了!!!我想是因为。。。我一点也不知道它起作用了!!!我想是因为。。。我一点也不知道