自定义送货方式插件中的 WooCommerce 运费计算
WooCommerce shipping cost calculation in custom shipping method plugin
我正在尝试为 WooCommerce 创建一个插件,根据产品重量计算运费。我不断收到此错误:
Warning: Declaration of WC_Your_Shipping_Method::calculate_shipping($package) should be compatible with WC_Shipping_Method::calculate_shipping($package = Array) in C:\Users\Michelle\Dropbox\MEDIEINSTITUTET\Utveckling mot e-handel\WooCommerce\WC-kurs\wp-content\plugins\frakt\frakt.php on line 18
这是我的整个插件:
<?php
/* *
* Plugin Name: Min frakt modul
Description: Ett plugin som beräknar frakt kostnad beroende på vikten
*/
/**
* Check if WooCommerce is active
*/
if (!defined('ABSPATH')) {
exit;
}
if ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {
function your_shipping_method_init() {
if ( ! class_exists( 'WC_Your_Shipping_Method' ) ) {
class WC_Your_Shipping_Method extends WC_Shipping_Method {
/**
* Constructor for your shipping class
*
* @access public
* @return void
*/
public function __construct() {
$this->id = 'mitt-plugin-frakt'; // Id for your shipping method. Should be uunique.
$this->method_title = __( 'Min frakt plugin' ); // Title shown in admin
$this->method_description = __(
'Frakten skall beräknas på totalvikten av kundvagnen.<br>
Listan är följande:<br>
< 1kg = 30kr <br>
< 5kg = 60kr <br>
< 10kg = 100kr <br>
< 20kg = 200kr <br>
> 20kg = (Vikten * 10)kr' ); // Description shown in admin
$this->enabled = "yes"; // This can be added as an setting but for this example its forced enabled
$this->title = "My Shipping Method"; // This can be added as an setting but for this example its forced.
$this->init();
}
/**
* Init your settings
*
* @access public
* @return void
*/
function init() {
// Load the settings API
$this->init_form_fields(); // This is part of the settings API. Override the method to add your own settings
$this->init_settings(); // This is part of the settings API. Loads settings you previously init.
// Save settings in admin if you have any defined
add_action( 'woocommerce_update_options_shipping_' . $this->id, array( $this, 'process_admin_options' ) );
}
/**
* calculate_shipping function.
*
* @access public
* @param mixed $package
* @return void
*/
public function calculate_shipping( $package ) {
$alla_items = $package['contents'];
$total_weight = 0;
foreach ($alla_items as $orderline) {
$product_weight = $orderline['data']->weight;
$total_weight += $product_weight;
};
if($total_weight < 1) {
$cost = '30';
} elseif($total_weight > 1 && $total_weight < 5) {
$cost = '60';
} elseif($total_weight > 5 && $total_weight < 10) {
$cost = '100';
} elseif($total_weight > 10 && $total_weight < 20) {
$cost = '200';
} elseif($total_weight > 20) {
$cost = ($total_weight * 10);
} else {
echo 'ingen vikt';
}
echo $total_weight;
$rate = array(
'id' => $this->id,
'label' => $this->title,
'cost' => $cost,
'calc_tax' => 'per_item'
);
// Register the rate
$this->add_rate( $rate );
}
}
}
}
add_action( 'woocommerce_shipping_init', 'your_shipping_method_init' );
function add_your_shipping_method( $methods ) {
$methods['mitt-plugin-frakt'] = 'WC_Your_Shipping_Method';
return $methods;
}
add_filter( 'woocommerce_shipping_methods', 'add_your_shipping_method' );
}
?>
我真的找不到错误...当我尝试代码时我只看到 "Mici Shipping" 但根本没有价格,这意味着它不知何故不读取 if else 语句?
预先感谢您的帮助!
你的 class WC_Your_Shipping_Method extends WC_Shipping_Method 已经有了那个方法。
转这个:
public function calculate_shipping( $package )
进入这个:
public function calculate_shipping( $package = array() )
我正在尝试为 WooCommerce 创建一个插件,根据产品重量计算运费。我不断收到此错误:
Warning: Declaration of WC_Your_Shipping_Method::calculate_shipping($package) should be compatible with WC_Shipping_Method::calculate_shipping($package = Array) in C:\Users\Michelle\Dropbox\MEDIEINSTITUTET\Utveckling mot e-handel\WooCommerce\WC-kurs\wp-content\plugins\frakt\frakt.php on line 18
这是我的整个插件:
<?php
/* *
* Plugin Name: Min frakt modul
Description: Ett plugin som beräknar frakt kostnad beroende på vikten
*/
/**
* Check if WooCommerce is active
*/
if (!defined('ABSPATH')) {
exit;
}
if ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {
function your_shipping_method_init() {
if ( ! class_exists( 'WC_Your_Shipping_Method' ) ) {
class WC_Your_Shipping_Method extends WC_Shipping_Method {
/**
* Constructor for your shipping class
*
* @access public
* @return void
*/
public function __construct() {
$this->id = 'mitt-plugin-frakt'; // Id for your shipping method. Should be uunique.
$this->method_title = __( 'Min frakt plugin' ); // Title shown in admin
$this->method_description = __(
'Frakten skall beräknas på totalvikten av kundvagnen.<br>
Listan är följande:<br>
< 1kg = 30kr <br>
< 5kg = 60kr <br>
< 10kg = 100kr <br>
< 20kg = 200kr <br>
> 20kg = (Vikten * 10)kr' ); // Description shown in admin
$this->enabled = "yes"; // This can be added as an setting but for this example its forced enabled
$this->title = "My Shipping Method"; // This can be added as an setting but for this example its forced.
$this->init();
}
/**
* Init your settings
*
* @access public
* @return void
*/
function init() {
// Load the settings API
$this->init_form_fields(); // This is part of the settings API. Override the method to add your own settings
$this->init_settings(); // This is part of the settings API. Loads settings you previously init.
// Save settings in admin if you have any defined
add_action( 'woocommerce_update_options_shipping_' . $this->id, array( $this, 'process_admin_options' ) );
}
/**
* calculate_shipping function.
*
* @access public
* @param mixed $package
* @return void
*/
public function calculate_shipping( $package ) {
$alla_items = $package['contents'];
$total_weight = 0;
foreach ($alla_items as $orderline) {
$product_weight = $orderline['data']->weight;
$total_weight += $product_weight;
};
if($total_weight < 1) {
$cost = '30';
} elseif($total_weight > 1 && $total_weight < 5) {
$cost = '60';
} elseif($total_weight > 5 && $total_weight < 10) {
$cost = '100';
} elseif($total_weight > 10 && $total_weight < 20) {
$cost = '200';
} elseif($total_weight > 20) {
$cost = ($total_weight * 10);
} else {
echo 'ingen vikt';
}
echo $total_weight;
$rate = array(
'id' => $this->id,
'label' => $this->title,
'cost' => $cost,
'calc_tax' => 'per_item'
);
// Register the rate
$this->add_rate( $rate );
}
}
}
}
add_action( 'woocommerce_shipping_init', 'your_shipping_method_init' );
function add_your_shipping_method( $methods ) {
$methods['mitt-plugin-frakt'] = 'WC_Your_Shipping_Method';
return $methods;
}
add_filter( 'woocommerce_shipping_methods', 'add_your_shipping_method' );
}
?>
我真的找不到错误...当我尝试代码时我只看到 "Mici Shipping" 但根本没有价格,这意味着它不知何故不读取 if else 语句? 预先感谢您的帮助!
你的 class WC_Your_Shipping_Method extends WC_Shipping_Method 已经有了那个方法。 转这个:
public function calculate_shipping( $package )
进入这个:
public function calculate_shipping( $package = array() )