Get shipping methods linked to this zone.
public get_shipping_methods ( $enabled_only = false ) : array | ||
리턴 | array | of objects |
/** * Get shipping zones from the database * @since 2.6.0 * @return array of arrays */ public static function get_zones() { global $wpdb; $raw_zones = $wpdb->get_results("SELECT zone_id, zone_name, zone_order FROM {$wpdb->prefix}woocommerce_shipping_zones order by zone_order ASC;"); $zones = array(); foreach ($raw_zones as $raw_zone) { $zone = new WC_Shipping_Zone($raw_zone); $zones[$zone->get_zone_id()] = $zone->get_data(); $zones[$zone->get_zone_id()]['formatted_zone_location'] = $zone->get_formatted_location(); $zones[$zone->get_zone_id()]['shipping_methods'] = $zone->get_shipping_methods(); } return $zones; }
/** * Get shipping zones from the database * @since 2.6.0 * @return array of arrays */ public static function get_zones() { $data_store = WC_Data_Store::load('shipping-zone'); $raw_zones = $data_store->get_zones(); $zones = array(); foreach ($raw_zones as $raw_zone) { $zone = new WC_Shipping_Zone($raw_zone); $zones[$zone->get_id()] = $zone->get_data(); $zones[$zone->get_id()]['zone_id'] = $zone->get_id(); $zones[$zone->get_id()]['formatted_zone_location'] = $zone->get_formatted_location(); $zones[$zone->get_id()]['shipping_methods'] = $zone->get_shipping_methods(); } return $zones; }
public function __construct($options) { global $wpdb; $this->wpdb = $wpdb; $this->import = $options['import']; $this->count = $options['count']; $this->xml = $options['xml']; $this->logger = $options['logger']; $this->chunk = $options['chunk']; $this->xpath = $options['xpath_prefix']; $this->prices_include_tax = 'yes' === get_option('woocommerce_prices_include_tax', 'no'); $this->payment_gateways = WC_Payment_Gateways::instance()->get_available_payment_gateways(); $this->shipping_methods = WC()->shipping->get_shipping_methods(); if (class_exists('WC_Shipping_Zones')) { $zones = WC_Shipping_Zones::get_zones(); if (!empty($zones)) { foreach ($zones as $zone_id => $zone) { if (!empty($zone['shipping_methods'])) { foreach ($zone['shipping_methods'] as $method) { $this->shipping_zone_methods[] = $method; } } } } else { $zone = new WC_Shipping_Zone(0); $this->shipping_zone_methods = $zone->get_shipping_methods(); } } $tax_classes = array_filter(array_map('trim', explode("\n", get_option('woocommerce_tax_classes')))); if ($tax_classes) { // Add Standard tax class if (!in_array('', $tax_classes)) { $tax_classes[] = ''; } foreach ($tax_classes as $class) { foreach (WC_Tax::get_rates_for_tax_class(sanitize_title($class)) as $rate_key => $rate) { $this->tax_rates[$rate->tax_rate_id] = $rate; } } } add_filter('wp_all_import_is_post_to_skip', array(&$this, 'wp_all_import_is_post_to_skip'), 10, 5); add_filter('wp_all_import_combine_article_data', array(&$this, 'wp_all_import_combine_article_data'), 10, 4); }
</a> <div class="row-actions"> <a href="admin.php?page=wc-settings&tab=shipping&zone_id={{ data.zone_id }}"><?php _e('Edit Shipping Methods', 'woocommerce'); ?> </a> </div> </td> <td class="wc-shipping-zone-region"><?php esc_html_e('Shipping Methods added here will apply to shipping addresses that aren‘t included in any other Shipping Zone.', 'woocommerce'); ?> </td> <td class="wc-shipping-zone-methods"> <?php $worldwide = new WC_Shipping_Zone(0); $methods = $worldwide->get_shipping_methods(); if (!$methods) { echo '<ul><li><a href="#" class="add_shipping_method button">' . __('Add Shipping Method', 'woocommerce') . '</a></li></ul>'; } else { echo '<ul>'; foreach ($methods as $method) { $class_name = 'yes' === $method->enabled ? 'method_enabled' : 'method_disabled'; echo '<li><a href="admin.php?page=wc-settings&tab=shipping&instance_id=' . absint($method->instance_id) . '" class="' . esc_attr($class_name) . '">' . esc_html($method->get_title()) . '</a></li>'; } echo '<li><a href="#" class="add_shipping_method button">' . __('Add Shipping Method', 'woocommerce') . '</a></li>'; echo '</ul>'; } ?> </td> <td class="wc-shipping-zone-actions"></td> </tr>
/** * Handle submissions from assets/js/wc-shipping-zone-methods.js Backbone model. */ public static function shipping_zone_methods_save_changes() { if (!isset($_POST['wc_shipping_zones_nonce'], $_POST['zone_id'], $_POST['changes'])) { 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; } if (!current_user_can('manage_woocommerce')) { wp_send_json_error('missing_capabilities'); exit; } global $wpdb; $zone_id = absint($_POST['zone_id']); $zone = new WC_Shipping_Zone($zone_id); $changes = $_POST['changes']; foreach ($changes as $instance_id => $data) { $method_id = $wpdb->get_var($wpdb->prepare("SELECT method_id FROM {$wpdb->prefix}woocommerce_shipping_zone_methods WHERE instance_id = %d", $instance_id)); if (isset($data['deleted'])) { if ($wpdb->delete("{$wpdb->prefix}woocommerce_shipping_zone_methods", array('instance_id' => $instance_id))) { do_action('woocommerce_shipping_zone_method_deleted', $instance_id, $method_id, $zone_id); } continue; } $method_data = array_intersect_key($data, array('method_order' => 1, 'enabled' => 1)); if (isset($method_data['method_order'])) { $wpdb->update("{$wpdb->prefix}woocommerce_shipping_zone_methods", array('method_order' => absint($method_data['method_order'])), array('instance_id' => absint($instance_id))); } if (isset($method_data['enabled'])) { $is_enabled = absint('yes' === $method_data['enabled']); if ($wpdb->update("{$wpdb->prefix}woocommerce_shipping_zone_methods", array('is_enabled' => $is_enabled), array('instance_id' => absint($instance_id)))) { do_action('woocommerce_shipping_zone_method_status_toggled', $instance_id, $method_id, $zone_id, $is_enabled); } } } wp_send_json_success(array('methods' => $zone->get_shipping_methods())); }
/** * Get the shipping methods for all shipping zones. * * Note: WooCommerce 2.6 intoduces the concept of Shipping Zones * * @return array (Array of) all shipping methods instances */ public function getZonesShippingMethods() { $zones = array(); // Rest of the World zone $zone = new \WC_Shipping_Zone(); $zones[$zone->get_zone_id()] = $zone->get_data(); $zones[$zone->get_zone_id()]['formatted_zone_location'] = $zone->get_formatted_location(); $zones[$zone->get_zone_id()]['shipping_methods'] = $zone->get_shipping_methods(); // Add user configured zones $zones = array_merge($zones, \WC_Shipping_Zones::get_zones()); $shipping_methods = array(); // Format: $shipping_methods[zone_name_method_id] => shipping_method_object // where zone_name is e.g. domestic, europe, rest_of_the_world, and // methods_id is e.g. flat_rate, free_shiping, local_pickup, etc foreach ($zones as $zone) { foreach ($zone['shipping_methods'] as $instance_id => $shipping_method) { // Zone names are converted to all lower-case and spaces replaced with $shipping_methods[$shipping_method->id . '_' . $instance_id] = $shipping_method; } } return $shipping_methods; }
/** * Handle submissions from assets/js/wc-shipping-zone-methods.js Backbone model. */ public static function shipping_zone_methods_save_changes() { if (!isset($_POST['wc_shipping_zones_nonce'], $_POST['zone_id'], $_POST['changes'])) { 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; } if (!current_user_can('manage_woocommerce')) { wp_send_json_error('missing_capabilities'); exit; } global $wpdb; $zone_id = wc_clean($_POST['zone_id']); $zone = new WC_Shipping_Zone($zone_id); $changes = $_POST['changes']; if (isset($changes['zone_name'])) { $zone->set_zone_name(wc_clean($changes['zone_name'])); } if (isset($changes['zone_locations'])) { $zone->clear_locations(array('state', 'country', 'continent')); $locations = array_filter(array_map('wc_clean', (array) $changes['zone_locations'])); foreach ($locations as $location) { // Each posted location will be in the format type:code $location_parts = explode(':', $location); switch ($location_parts[0]) { case 'state': $zone->add_location($location_parts[1] . ':' . $location_parts[2], 'state'); break; case 'country': $zone->add_location($location_parts[1], 'country'); break; case 'continent': $zone->add_location($location_parts[1], 'continent'); break; } } } if (isset($changes['zone_postcodes'])) { $zone->clear_locations('postcode'); $postcodes = array_filter(array_map('strtoupper', array_map('wc_clean', explode("\n", $changes['zone_postcodes'])))); foreach ($postcodes as $postcode) { $zone->add_location($postcode, 'postcode'); } } if (isset($changes['methods'])) { foreach ($changes['methods'] as $instance_id => $data) { $method_id = $wpdb->get_var($wpdb->prepare("SELECT method_id FROM {$wpdb->prefix}woocommerce_shipping_zone_methods WHERE instance_id = %d", $instance_id)); if (isset($data['deleted'])) { $shipping_method = WC_Shipping_Zones::get_shipping_method($instance_id); $option_key = $shipping_method->get_instance_option_key(); if ($wpdb->delete("{$wpdb->prefix}woocommerce_shipping_zone_methods", array('instance_id' => $instance_id))) { delete_option($option_key); do_action('woocommerce_shipping_zone_method_deleted', $instance_id, $method_id, $zone_id); } continue; } $method_data = array_intersect_key($data, array('method_order' => 1, 'enabled' => 1)); if (isset($method_data['method_order'])) { $wpdb->update("{$wpdb->prefix}woocommerce_shipping_zone_methods", array('method_order' => absint($method_data['method_order'])), array('instance_id' => absint($instance_id))); } if (isset($method_data['enabled'])) { $is_enabled = absint('yes' === $method_data['enabled']); if ($wpdb->update("{$wpdb->prefix}woocommerce_shipping_zone_methods", array('is_enabled' => $is_enabled), array('instance_id' => absint($instance_id)))) { do_action('woocommerce_shipping_zone_method_status_toggled', $instance_id, $method_id, $zone_id, $is_enabled); } } } } $zone->save(); wp_send_json_success(array('zone_id' => $zone->get_id(), 'zone_name' => $zone->get_zone_name(), 'methods' => $zone->get_shipping_methods())); }