File "class-wc-shipping.php"
Full path: /home/kosmetik/public_html/wp-content/plugins/woocommerce/includes/class-wc-shipping.php
File
size: 7.02 B
MIME-type: text/x-php
Charset: utf-8
Download Open Edit Advanced Editor Back
<?php
use Automattic\Jetpack\Constants;
if (!defined('ABSPATH')) {
exit;
}
class WC_Shipping
{
public $enabled = false;
public $shipping_methods = null;
public $shipping_classes = array();
public $packages = array();
protected static $_instance = null;
public static function instance()
{
if (is_null(self::$_instance)) {
self::$_instance = new self();
}
return self::$_instance;
}
public function __clone()
{
wc_doing_it_wrong(__FUNCTION__, __('Cloning is forbidden.', 'woocommerce'), '2.1');
}
public function __wakeup()
{
wc_doing_it_wrong(__FUNCTION__, __('Unserializing instances of this class is forbidden.', 'woocommerce'), '2.1');
}
public function __get($name)
{
if ('shipping_total' === $name) {
return WC()->cart->get_shipping_total();
}
if ('shipping_taxes' === $name) {
return WC()->cart->get_shipping_taxes();
}
}
public function __construct()
{
$this->enabled = wc_shipping_enabled();
if ($this->enabled) {
$this->init();
}
}
public function init()
{
do_action('woocommerce_shipping_init');
}
public function get_shipping_method_class_names()
{
$shipping_methods = array('flat_rate' => 'WC_Shipping_Flat_Rate', 'free_shipping' => 'WC_Shipping_Free_Shipping', 'local_pickup' => 'WC_Shipping_Local_Pickup');
$maybe_load_legacy_methods = array('flat_rate', 'free_shipping', 'international_delivery', 'local_delivery', 'local_pickup');
foreach ($maybe_load_legacy_methods as $method) {
$options = get_option('woocommerce_' . $method . '_settings');
if ($options && isset($options['enabled']) && 'yes' === $options['enabled']) {
$shipping_methods['legacy_' . $method] = 'WC_Shipping_Legacy_' . $method;
}
}
return apply_filters('woocommerce_shipping_methods', $shipping_methods);
}
public function load_shipping_methods($package = array())
{
if (!empty($package)) {
$debug_mode = 'yes' === get_option('woocommerce_shipping_debug_mode', 'no');
$shipping_zone = WC_Shipping_Zones::get_zone_matching_package($package);
$this->shipping_methods = $shipping_zone->get_shipping_methods(true);
$matched_zone_notice = sprintf(__('Customer matched zone "%s"', 'woocommerce'), $shipping_zone->get_zone_name());
if ($debug_mode && !Constants::is_defined('WOOCOMMERCE_CHECKOUT') && !Constants::is_defined('WC_DOING_AJAX') && !wc_has_notice($matched_zone_notice)) {
wc_add_notice($matched_zone_notice);
}
} else {
$this->shipping_methods = array();
}
foreach ($this->get_shipping_method_class_names() as $method_id => $method_class) {
$this->register_shipping_method($method_class);
}
do_action('woocommerce_load_shipping_methods', $package);
return $this->get_shipping_methods();
}
public function register_shipping_method($method)
{
if (!is_object($method)) {
if (!class_exists($method)) {
return false;
}
$method = new $method();
}
if (is_null($this->shipping_methods)) {
$this->shipping_methods = array();
}
$this->shipping_methods[$method->id] = $method;
}
public function unregister_shipping_methods()
{
$this->shipping_methods = null;
}
public function get_shipping_methods()
{
if (is_null($this->shipping_methods)) {
$this->load_shipping_methods();
}
return $this->shipping_methods;
}
public function get_shipping_classes()
{
if (empty($this->shipping_classes)) {
$classes = get_terms('product_shipping_class', array('hide_empty' => '0', 'orderby' => 'name'));
$this->shipping_classes = !is_wp_error($classes) ? $classes : array();
}
return apply_filters('woocommerce_get_shipping_classes', $this->shipping_classes);
}
public function calculate_shipping($packages = array())
{
$this->packages = array();
if (!$this->enabled || empty($packages)) {
return array();
}
foreach ($packages as $package_key => $package) {
$this->packages[$package_key] = $this->calculate_shipping_for_package($package, $package_key);
}
$this->packages = array_filter((array) apply_filters('woocommerce_shipping_packages', $this->packages));
return $this->packages;
}
public function is_package_shippable($package)
{
if (empty($package['destination']['country'])) {
return true;
}
$allowed = array_keys(WC()->countries->get_shipping_countries());
return in_array($package['destination']['country'], $allowed, true);
}
public function calculate_shipping_for_package($package = array(), $package_key = 0)
{
if (!$this->enabled || empty($package)) {
return false;
}
$package['rates'] = array();
if (!$this->is_package_shippable($package)) {
return $package;
}
$package_to_hash = $package;
foreach ($package_to_hash['contents'] as $item_id => $item) {
unset($package_to_hash['contents'][$item_id]['data']);
}
$wc_session_key = 'shipping_for_package_' . $package_key;
$stored_rates = WC()->session->get($wc_session_key);
$package_hash = 'wc_ship_' . md5(wp_json_encode($package_to_hash) . WC_Cache_Helper::get_transient_version('shipping'));
if (!is_array($stored_rates) || $package_hash !== $stored_rates['package_hash'] || 'yes' === get_option('woocommerce_shipping_debug_mode', 'no')) {
foreach ($this->load_shipping_methods($package) as $shipping_method) {
if (!$shipping_method->supports('shipping-zones') || $shipping_method->get_instance_id()) {
do_action('woocommerce_before_get_rates_for_package', $package, $shipping_method);
$package['rates'] = $package['rates'] + $shipping_method->get_rates_for_package($package);
do_action('woocommerce_after_get_rates_for_package', $package, $shipping_method);
}
}
$package['rates'] = apply_filters('woocommerce_package_rates', $package['rates'], $package);
WC()->session->set($wc_session_key, array('package_hash' => $package_hash, 'rates' => $package['rates']));
} else {
$package['rates'] = $stored_rates['rates'];
}
return $package;
}
public function get_packages()
{
return $this->packages;
}
public function reset_shipping()
{
unset(WC()->session->chosen_shipping_methods);
$this->packages = array();
}
public function sort_shipping_methods()
{
wc_deprecated_function('sort_shipping_methods', '2.6');
return $this->shipping_methods;
}
}