add_shipping_method() public méthode

Add a shipping method to this zone.
public add_shipping_method ( string $type ) : integer
$type string shipping method type
Résultat integer new instance_id, 0 on failure
 /**
  * Save shipping and tax options.
  */
 public function wc_setup_shipping_taxes_save()
 {
     check_admin_referer('wc-setup');
     $enable_shipping = isset($_POST['woocommerce_calc_shipping']);
     $enable_taxes = isset($_POST['woocommerce_calc_taxes']);
     if ($enable_shipping) {
         update_option('woocommerce_ship_to_countries', '');
     } else {
         update_option('woocommerce_ship_to_countries', 'disabled');
     }
     update_option('woocommerce_calc_taxes', $enable_taxes ? 'yes' : 'no');
     update_option('woocommerce_prices_include_tax', sanitize_text_field($_POST['woocommerce_prices_include_tax']));
     if ($enable_shipping && !empty($_POST['shipping_cost_domestic'])) {
         // Create a domestic shipping zone
         $zone = new WC_Shipping_Zone($zone_data['zone_id']);
         $zone->set_zone_name(__('Domestic', 'woocommerce'));
         $zone->set_zone_order(1);
         $zone->add_location(WC()->countries->get_base_country(), 'country');
         $zone->save();
         // Add a flat rate shipping method to this domestic zone
         $instance_id = $zone->add_shipping_method('flat_rate');
         $shipping_method = new WC_Shipping_Flat_Rate($instance_id);
         $option_key = $shipping_method->get_instance_option_key();
         // Update rate settings
         $costs = array();
         $costs[] = wc_format_decimal(sanitize_text_field($_POST['shipping_cost_domestic']));
         if ($item_cost = sanitize_text_field($_POST['shipping_cost_domestic_item'])) {
             $costs[] = $item_cost . ' * [qty]';
         }
         $shipping_method->instance_settings['cost'] = implode(' + ', array_filter($costs));
         $shipping_method->instance_settings['enabled'] = 'yes';
         $shipping_method->instance_settings['type'] = 'order';
         update_option($option_key, $shipping_method->instance_settings);
     }
     if ($enable_shipping && !empty($_POST['shipping_cost_worldwide'])) {
         // Add a flat rate shipping method to the worldwide zone
         $zone = WC_Shipping_Zones::get_zone(0);
         $instance_id = $zone->add_shipping_method('flat_rate');
         $shipping_method = new WC_Shipping_Flat_Rate($instance_id);
         $option_key = $shipping_method->get_instance_option_key();
         // Update rate settings
         $costs = array();
         $costs[] = wc_format_decimal(sanitize_text_field($_POST['shipping_cost_worldwide']));
         if ($item_cost = sanitize_text_field($_POST['shipping_cost_worldwide_item'])) {
             $costs[] = $item_cost . ' * [qty]';
         }
         $shipping_method->instance_settings['cost'] = implode(' + ', array_filter($costs));
         $shipping_method->instance_settings['enabled'] = 'yes';
         $shipping_method->instance_settings['type'] = 'order';
         update_option($option_key, $shipping_method->instance_settings);
     }
     if ($enable_taxes && !empty($_POST['woocommerce_import_tax_rates'])) {
         $locale_info = (include WC()->plugin_path() . '/i18n/locale-info.php');
         $tax_rates = array();
         $country = WC()->countries->get_base_country();
         $state = WC()->countries->get_base_state();
         if (isset($locale_info[$country])) {
             if (isset($locale_info[$country]['tax_rates'][$state])) {
                 $tax_rates = $locale_info[$country]['tax_rates'][$state];
             } elseif (isset($locale_info[$country]['tax_rates'][''])) {
                 $tax_rates = $locale_info[$country]['tax_rates'][''];
             }
             if (isset($locale_info[$country]['tax_rates']['*'])) {
                 $tax_rates = array_merge($locale_info[$country]['tax_rates']['*'], $tax_rates);
             }
         }
         if ($tax_rates) {
             $loop = 0;
             foreach ($tax_rates as $rate) {
                 $tax_rate = array('tax_rate_country' => $rate['country'], 'tax_rate_state' => $rate['state'], 'tax_rate' => $rate['rate'], 'tax_rate_name' => $rate['name'], 'tax_rate_priority' => isset($rate['priority']) ? absint($rate['priority']) : 1, 'tax_rate_compound' => 0, 'tax_rate_shipping' => $rate['shipping'] ? 1 : 0, 'tax_rate_order' => $loop++, 'tax_rate_class' => '');
                 WC_Tax::_insert_tax_rate($tax_rate);
             }
         }
     }
     wp_redirect(esc_url_raw($this->get_next_step_link()));
     exit;
 }
    /**
     * shipping_zone_methods function.
     * 
     * @access public
     * @return void
     */
    function shipping_zone_methods($zone_id)
    {
        global $woocommerce, $wpdb;
        $zone = new WC_Shipping_Zone($zone_id);
        if (!$zone->exists()) {
            wp_redirect(remove_query_arg('zone'));
            exit;
        }
        if (!empty($_GET['add_method']) && !empty($_GET['method_type']) && !empty($_GET['_wpnonce']) && wp_verify_nonce($_GET['_wpnonce'], 'woocommerce_add_method')) {
            $type = strtolower(trim($_GET['method_type']));
            if ($method_id = $zone->add_shipping_method($type)) {
                wp_redirect(add_query_arg('method', $method_id, add_query_arg('zone', $zone_id, admin_url('admin.php?page=shipping_zones'))));
                exit;
                //echo '<div class="updated success"><p>' . __( 'Shipping method successfully added', 'wc_table_rate' ) . ' <a href="' . add_query_arg( 'method', $method_id, add_query_arg( 'zone', $zone_id, admin_url( 'admin.php?page=shipping_zones' ) ) ) . '" class="button" style="margin-left: 10px;">' . __( 'Configure method', 'wc_table_rate' ) . '</a></p></div>';
            }
        }
        if (!empty($_GET['delete_method']) && !empty($_GET['_wpnonce']) && wp_verify_nonce($_GET['_wpnonce'], 'woocommerce_delete_method')) {
            $method_id = absint($_GET['delete_method']);
            if ($zone->delete_shipping_method($method_id)) {
                echo '<div class="updated success"><p>' . __('Shipping method successfully deleted', 'wc_table_rate') . '</p></div>';
            }
        }
        if (!empty($_GET['method']) && $_GET['method'] > 0) {
            $method_id = (int) $_GET['method'];
            $this->shipping_zone_method_settings($zone, $method_id);
            return;
        }
        ?>
		<div class="wrap woocommerce">
			<div class="icon32 icon32-woocommerce-delivery" id="icon-woocommerce"><br /></div>
			<h2><a href="<?php 
        echo admin_url('admin.php?page=shipping_zones');
        ?>
"><?php 
        _e('Shipping Zones', 'wc_table_rate');
        ?>
</a> &gt; <?php 
        echo $zone->zone_name;
        ?>
 <a href="<?php 
        echo wp_nonce_url(add_query_arg('method_type', 'table_rate', add_query_arg('add_method', 'true')), 'woocommerce_add_method');
        ?>
" class="add-new-h2"><?php 
        _e('Add Shipping Method', 'wc_table_rate');
        ?>
</a></h2>
			
			<?php 
        $this->list_shipping_zone_methods();
        ?>
	
		</div>
		<?php 
        $woocommerce->add_inline_js("\n\t\t\t// Delete\n\t\t\tjQuery('a.submitdelete').click( function(){\n\t\t\t\tvar answer = confirm('" . __('Are you sure you want to delete this method?', 'wc_table_rate') . "');\n\t\t\t\tif ( answer ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t});\n\t\t");
    }
 /**
  * Handle submissions from assets/js/wc-shipping-zone-methods.js Backbone model.
  */
 public static function shipping_zone_add_method()
 {
     if (!isset($_POST['wc_shipping_zones_nonce'], $_POST['zone_id'], $_POST['method_id'])) {
         wp_send_json_error('missing_fields');
         exit;
     }
     if (!wp_verify_nonce($_POST['wc_shipping_zones_nonce'], 'wc_shipping_zones_nonce')) {
         wp_send_json_error('bad_nonce');
         exit;
     }
     // Check User Caps
     if (!current_user_can('manage_woocommerce')) {
         wp_send_json_error('missing_capabilities');
         exit;
     }
     $zone_id = wc_clean($_POST['zone_id']);
     $zone = new WC_Shipping_Zone($zone_id);
     $instance_id = $zone->add_shipping_method(wc_clean($_POST['method_id']));
     wp_send_json_success(array('instance_id' => $instance_id, 'zone_id' => $zone->get_id(), 'zone_name' => $zone->get_zone_name(), 'methods' => $zone->get_shipping_methods()));
 }