WC_Shipping_Method::add_rate()
Add a shipping rate. If taxes are not set they will be calculated based on cost.
Метод класса: WC_Shipping_Method{}
Возвращает
null
. Ничего (null).
Использование
$WC_Shipping_Method = new WC_Shipping_Method(); $WC_Shipping_Method->add_rate( $args );
- $args(массив)
- Arguments .
По умолчанию: array())
Код WC_Shipping_Method::add_rate() WC Shipping Method::add rate WC 9.5.1
public function add_rate( $args = array() ) { $args = apply_filters( 'woocommerce_shipping_method_add_rate_args', wp_parse_args( $args, array( 'id' => $this->get_rate_id(), // ID for the rate. If not passed, this id:instance default will be used. 'label' => '', // Label for the rate. 'cost' => '0', // Amount or array of costs (per item shipping). 'taxes' => '', // Pass taxes, or leave empty to have it calculated for you, or 'false' to disable calculations. 'calc_tax' => 'per_order', // Calc tax per_order or per_item. Per item needs an array of costs. 'meta_data' => array(), // Array of misc meta data to store along with this rate - key value pairs. 'package' => false, // Package array this rate was generated for @since 2.6.0. 'price_decimals' => wc_get_price_decimals(), ) ), $this ); // 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, $args['price_decimals'] ); // Create rate object. $rate = new WC_Shipping_Rate(); $rate->set_id( $args['id'] ); $rate->set_method_id( $this->id ); $rate->set_instance_id( $this->instance_id ); $rate->set_label( $args['label'] ); $rate->set_cost( $total_cost ); $rate->set_taxes( $taxes ); 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'] ] = apply_filters( 'woocommerce_shipping_method_add_rate', $rate, $args, $this ); }