Für die WooCommerce Version 2.X funktioniert das AWS Shipping Plugin aus dem WordPress Repository leider nicht mehr. Im Forum auf wordpress.org hat jemand das Plugin AWD Shipping Costs mit dem funktionierenden Weight Based Shipping Plugin angepasst, so dass es auch mit WooCommerce 2.1 funktioniert. Hier sind die Änderungen
<?php /** * Plugin Name: Weight and Country Table Rate shipping for Woocommerce * Description: WCTR is a weight and country based shipping method for Woocommerce 2.1, based on <a href="http://www.andyswebdesign.ie/blog/free-woocommerce-weight-and-country-based-shipping-extension-plugin/">AWD</a> and <a href="http://wordpress.org/plugins/weight-based-shipping-for-woocommerce/">WOOWBS</a> * Version: 1.0 * Author: */ /* Copyright 2012 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2, as published by the Free Software Foundation. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ add_action( 'plugins_loaded', 'init_woowctr', 0 ); function init_woowctr() { if ( ! class_exists( 'WC_Shipping_Method' ) ) return; class WCTR_Shipping extends WC_Shipping_Method { function __construct() { $this->id = 'WCTR_Shipping'; $this->method_title = __( 'Table Rate', 'woocommerce' ); $this->admin_page_heading = __( 'Weight and country based shipping', 'woocommerce' ); $this->admin_page_description = __( 'Define shipping by weight and country', 'woocommerce' ); add_action( 'woocommerce_update_options_shipping_' . $this->id, array( &$this, 'process_admin_options' ) ); $this->init(); $this->display_country_groups(); } function init() { $this->init_form_fields(); $this->init_settings(); $this->enabled = $this->get_option('enabled'); $this->title = $this->get_option('title'); $this->availability = 'specific'; $this->country_group_no = $this->get_option('country_group_no'); $this->countries = $this->get_option('countries'); $this->type = 'order'; $this->tax_status = $this->get_option('tax_status'); $this->fee = $this->get_option('fee'); $this->rate = isset( $this->settings['rate'] ) ? $this->settings['rate'] : ''; $this->rate = (array) explode( "n", $this->rate ); if (empty($this->countries)) { $this->availability = $this->settings['availability'] = 'all'; } } function init_form_fields() { $woocommerce = function_exists('WC') ? WC() : $GLOBALS['woocommerce']; $this->form_fields = array( 'enabled' => array( 'title' => __( 'Enable/Disable', 'woocommerce' ), 'type' => 'checkbox', 'label' => __( 'Enable this shipping method', 'woocommerce' ), 'default' => 'no', ), 'title' => array( 'title' => __( 'Method Title', 'woocommerce' ), 'type' => 'text', 'description' => __( 'This controls the title which the user sees during checkout.', 'woocommerce' ), 'default' => __( 'Regular Shipping', 'woocommerce' ), ), 'tax_status' => array( 'title' => __( 'Tax Status', 'woocommerce' ), 'type' => 'select', 'description' => '', 'default' => 'taxable', 'options' => array( 'taxable' => __( 'Taxable', 'woocommerce' ), 'none' => __( 'None', 'woocommerce' ), ), ), 'fee' => array( 'title' => __( 'Handling Fee', 'woocommerce' ), 'type' => 'text', 'description' => __( 'Fee excluding tax, e.g. 3.50. Leave blank to disable.', 'woocommerce' ), 'default' => '', ), 'rate' => array( 'title' => __( 'Shipping Rates', 'woocommerce' ), 'type' => 'textarea', 'description' => __( 'Set your weight based rates in ' . get_option( 'woocommerce_weight_unit' ) . ' for country groups (one per line). Example: <code>Max weight|Cost|country group number</code>. Example: <code>10|6.95|3</code>. For decimal, use a dot not a comma.', 'woocommerce' ), 'default' => '', ), 'country_group_no' => array( 'title' => __( 'Number of country groups', 'woocommerce' ), 'type' => 'text', 'description' => __( 'Number of groups of countries sharing delivery rates (hit "Save changes" button after you have changed this setting).' ), 'default' => '3', ), ); } /* * Displays country group selects in shipping method's options */ function display_country_groups() { $woocommerce = function_exists('WC') ? WC() : $GLOBALS['woocommerce']; $shippingCountries = method_exists($woocommerce->countries, 'get_shipping_countries') ? $woocommerce->countries->get_shipping_countries() : $woocommerce->countries->countries; // echo prp($this->settings['countries1']); $number = $this->country_group_no; for($counter = 1; $number >= $counter; $counter++) { $this->form_fields['countries'.$counter] = array( 'title' => sprintf(__( 'Country Group %s', 'woocommerce' ), $counter), 'type' => 'multiselect', 'class' => 'chosen_select', 'css' => 'width: 450px;', 'default' => '', 'options' => $shippingCountries ); } } function calculate_shipping( $package = array() ) { global $woocommerce; $rates = $this->get_rates_by_countrygroup($this->get_countrygroup($package)); $weight = $woocommerce->cart->cart_contents_weight; $final_rate = $this->pick_smallest_rate($rates, $weight); if($final_rate === false) return false; $taxable = ($this->tax_status == 'taxable') ? true : false; if($this->fee > 0 && $package['destination']['country']) $final_rate = $final_rate + $this->fee; $rate = array( 'id' => $this->id, 'label' => $this->title, 'cost' => $final_rate, 'taxes' => '', 'calc_tax' => 'per_order' ); $this->add_rate( $rate ); } /* * Retrieves the number of country group for country selected by user on checkout */ function get_countrygroup($package = array()) { $counter = 1; while(is_array($this->settings['countries'.$counter])) { if (in_array($package['destination']['country'], $this->settings['countries'.$counter])) $country_group = $counter; $counter++; } return $country_group; } /* * Retrieves all rates available for selected country group */ function get_rates_by_countrygroup($country_group = null) { $rates = array(); if ( sizeof( $this->rate ) > 0) foreach ( $this->rate as $option => $value ) { $rate = preg_split( '~s*|s*~', trim( $value ) ); if ( sizeof( $rate ) !== 3 ) { continue; } else { $rates[] = $rate; } } foreach($rates as $key) { if($key[2] == $country_group) { $countrygroup_rate[] = $key; } } return $countrygroup_rate; } /* * Picks the right rate from available rates based on cart weight */ function pick_smallest_rate($rates,$weight) { if($weight == 0) return 0; // no shipping for cart without weight if( sizeof($rates) > 0) foreach($rates as $key => $value) { if($weight <= $value[0]) { $postage[] = $value[1]; } $postage_all_rates[] = $value[1]; } if(sizeof($postage) > 0) { return min($postage); } else { if (sizeof($postage_all_rates) > 0) return max($postage_all_rates); } return false; } public function admin_options() { ?> <h3><?php _e( 'Weight and Country based Table Rates shipping', 'woocommerce' ); ?></h3> <p><?php _e( 'Lets you calculate shipping based on country and weight of the cart. Lets you set unlimited weight bands on per country basis and group countries that share same delivery cost/bands.', 'woocommerce' ); ?></p> <table class="form-table"> <?php $this->generate_settings_html(); ?> </table> <?php } } } function add_woowctr( $methods ) { $methods[] = 'WCTR_Shipping'; return $methods; } add_filter( 'woocommerce_shipping_methods', 'add_woowctr' ); ?>
und für Express Mail
<?php /** * Plugin Name: Weight and Country Table Rate Express Mail for Woocommerce * Description: WCTR for Express Mail is a weight and country based shipping method for Woocommerce 2.1, based on <a href="http://www.andyswebdesign.ie/blog/free-woocommerce-weight-and-country-based-shipping-extension-plugin/">AWD</a> and <a href="http://wordpress.org/plugins/weight-based-shipping-for-woocommerce/">WOOWBS</a>. * Version: 1.0 * Author: */ /* Copyright 2012 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2, as published by the Free Software Foundation. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* MODIF */ add_action( 'plugins_loaded', 'init_woowctr2', 0 ); /* MODIF */ function init_woowctr2() { if ( ! class_exists( 'WC_Shipping_Method' ) ) return; /* MODIF */ class WCTR_Shipping2 extends WC_Shipping_Method { function __construct() { /* MODIF */ $this->id = 'WCTR_Shipping2'; /* MODIF */ $this->method_title = __( 'Table Rate for Express Mail', 'woocommerce' ); $this->admin_page_heading = __( 'Weight and country based shipping', 'woocommerce' ); $this->admin_page_description = __( 'Define shipping by weight and country', 'woocommerce' ); add_action( 'woocommerce_update_options_shipping_' . $this->id, array( &$this, 'process_admin_options' ) ); $this->init(); $this->display_country_groups(); } function init() { $this->init_form_fields(); $this->init_settings(); $this->enabled = $this->get_option('enabled'); $this->title = $this->get_option('title'); $this->availability = 'specific'; $this->country_group_no = $this->get_option('country_group_no'); $this->countries = $this->get_option('countries'); $this->type = 'order'; $this->tax_status = $this->get_option('tax_status'); $this->fee = $this->get_option('fee'); $this->rate = isset( $this->settings['rate'] ) ? $this->settings['rate'] : ''; $this->rate = (array) explode( "n", $this->rate ); if (empty($this->countries)) { $this->availability = $this->settings['availability'] = 'all'; } } function init_form_fields() { $woocommerce = function_exists('WC') ? WC() : $GLOBALS['woocommerce']; $this->form_fields = array( 'enabled' => array( 'title' => __( 'Enable/Disable', 'woocommerce' ), 'type' => 'checkbox', 'label' => __( 'Enable this shipping method', 'woocommerce' ), 'default' => 'no', ), 'title' => array( 'title' => __( 'Method Title', 'woocommerce' ), 'type' => 'text', 'description' => __( 'This controls the title which the user sees during checkout.', 'woocommerce' ), 'default' => __( 'Express Mail', 'woocommerce' ), ), 'tax_status' => array( 'title' => __( 'Tax Status', 'woocommerce' ), 'type' => 'select', 'description' => '', 'default' => 'taxable', 'options' => array( 'taxable' => __( 'Taxable', 'woocommerce' ), 'none' => __( 'None', 'woocommerce' ), ), ), 'fee' => array( 'title' => __( 'Handling Fee', 'woocommerce' ), 'type' => 'text', 'description' => __( 'Fee excluding tax, e.g. 3.50. Leave blank to disable.', 'woocommerce' ), 'default' => '', ), 'rate' => array( 'title' => __( 'Shipping Rates', 'woocommerce' ), 'type' => 'textarea', 'description' => __( 'Set your weight based rates in ' . get_option( 'woocommerce_weight_unit' ) . ' for country groups (one per line). Example: <code>Max weight|Cost|country group number</code>. Example: <code>10|6.95|3</code>. For decimal, use a dot not a comma.', 'woocommerce' ), 'default' => '', ), 'country_group_no' => array( 'title' => __( 'Number of country groups', 'woocommerce' ), 'type' => 'text', 'description' => __( 'Number of groups of countries sharing delivery rates (hit "Save changes" button after you have changed this setting).' ), 'default' => '3', ), ); } /* * Displays country group selects in shipping method's options */ function display_country_groups() { $woocommerce = function_exists('WC') ? WC() : $GLOBALS['woocommerce']; $shippingCountries = method_exists($woocommerce->countries, 'get_shipping_countries') ? $woocommerce->countries->get_shipping_countries() : $woocommerce->countries->countries; // echo prp($this->settings['countries1']); $number = $this->country_group_no; for($counter = 1; $number >= $counter; $counter++) { $this->form_fields['countries'.$counter] = array( 'title' => sprintf(__( 'Country Group %s', 'woocommerce' ), $counter), 'type' => 'multiselect', 'class' => 'chosen_select', 'css' => 'width: 450px;', 'default' => '', 'options' => $shippingCountries ); } } function calculate_shipping( $package = array() ) { global $woocommerce; $rates = $this->get_rates_by_countrygroup($this->get_countrygroup($package)); $weight = $woocommerce->cart->cart_contents_weight; $final_rate = $this->pick_smallest_rate($rates, $weight); if($final_rate === false) return false; $taxable = ($this->tax_status == 'taxable') ? true : false; if($this->fee > 0 && $package['destination']['country']) $final_rate = $final_rate + $this->fee; $rate = array( 'id' => $this->id, 'label' => $this->title, 'cost' => $final_rate, 'taxes' => '', 'calc_tax' => 'per_order' ); $this->add_rate( $rate ); } /* * Retrieves the number of country group for country selected by user on checkout */ function get_countrygroup($package = array()) { $counter = 1; while(is_array($this->settings['countries'.$counter])) { if (in_array($package['destination']['country'], $this->settings['countries'.$counter])) $country_group = $counter; $counter++; } return $country_group; } /* * Retrieves all rates available for selected country group */ function get_rates_by_countrygroup($country_group = null) { $rates = array(); if ( sizeof( $this->rate ) > 0) foreach ( $this->rate as $option => $value ) { $rate = preg_split( '~s*|s*~', trim( $value ) ); if ( sizeof( $rate ) !== 3 ) { continue; } else { $rates[] = $rate; } } foreach($rates as $key) { if($key[2] == $country_group) { $countrygroup_rate[] = $key; } } return $countrygroup_rate; } /* * Picks the right rate from available rates based on cart weight */ function pick_smallest_rate($rates,$weight) { if($weight == 0) return 0; // no shipping for cart without weight if( sizeof($rates) > 0) foreach($rates as $key => $value) { if($weight <= $value[0]) { $postage[] = $value[1]; } $postage_all_rates[] = $value[1]; } if(sizeof($postage) > 0) { return min($postage); } else { if (sizeof($postage_all_rates) > 0) return max($postage_all_rates); } return false; } public function admin_options() { ?> <h3><?php _e( 'Weight and Country based Table Rates shipping', 'woocommerce' ); ?></h3> <p><?php _e( 'Lets you calculate shipping based on country and weight of the cart. Lets you set unlimited weight bands on per country basis and group countries that share same delivery cost/bands.', 'woocommerce' ); ?></p> <table class="form-table"> <?php $this->generate_settings_html(); ?> </table> <?php } } } /* MODIF */ function add_woowctr2( $methods ) { /* MODIF */ $methods[] = 'WCTR_Shipping2'; return $methods; } /* MODIF */ add_filter( 'woocommerce_shipping_methods', 'add_woowctr2' ); ?>
Quelle: wordpress.org