WC_Shipping_Method::add_rate PHP Méthode

add_rate() public méthode

Add a shipping rate. If taxes are not set they will be calculated based on cost.
public add_rate ( array $args = [] )
$args array (default: array())
    public function add_rate($args = array())
    {
        $args = wp_parse_args($args, array('id' => $this->get_rate_id(), 'label' => '', 'cost' => '0', 'taxes' => '', 'calc_tax' => 'per_order', 'meta_data' => array(), 'package' => false));
        // ID and label are required
        if (!$args['id'] || !$args['label']) {
            return;
        }
        // Total up the cost
        $total_cost = is_array($args['cost']) ? array_sum($args['cost']) : $args['cost'];
        $taxes = $args['taxes'];
        // Taxes - if not an array and not set to false, calc tax based on cost and passed calc_tax variable. This saves shipping methods having to do complex tax calculations.
        if (!is_array($taxes) && false !== $taxes && $total_cost > 0 && $this->is_taxable()) {
            $taxes = 'per_item' === $args['calc_tax'] ? $this->get_taxes_per_item($args['cost']) : WC_Tax::calc_shipping_tax($total_cost, WC_Tax::get_shipping_tax_rates());
        }
        // Round the total cost after taxes have been calculated.
        $total_cost = wc_format_decimal($total_cost, wc_get_price_decimals());
        // Create rate object
        $rate = new WC_Shipping_Rate($args['id'], $args['label'], $total_cost, $taxes, $this->id);
        if (!empty($args['meta_data'])) {
            foreach ($args['meta_data'] as $key => $value) {
                $rate->add_meta_data($key, $value);
            }
        }
        // Store package data
        if ($args['package']) {
            $items_in_package = array();
            foreach ($args['package']['contents'] as $item) {
                $product = $item['data'];
                $items_in_package[] = $product->get_name() . ' × ' . $item['quantity'];
            }
            $rate->add_meta_data(__('Items', 'woocommerce'), implode(', ', $items_in_package));
        }
        $this->rates[$args['id']] = $rate;
    }