我需要一些帮助才能完成此代码。我一直在尝试为我的woocommerce网站制作一个插件,根据订购的总项目自动添加运费。即当我尝试下面的代码时,无论我订购的项目数量是多少,它都会返回11的值。理想的siutation如下:
1-5包5,000 6-10包10,000 11-15包15,000 16-20包20,000
以下是我的代码。
<?php
/*
Plugin Name: Your Shipping plugin
Plugin URI: http://woothemes.com/woocommerce
Description: Your shipping method plugin
Version: 1.0.0
Author: WooThemes
Author URI: http://woothemes.com
*/
/**
* Check if WooCommerce is active
*/
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 = 'your_shipping_method'; // Id for your shipping method. Should be uunique.
$this->method_title = __( 'Your Shipping Method' ); // Title shown in admin
$this->method_description = __( 'Description of your shipping method' ); // 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 ) {
session_start();
global $woocommerce;
$carttotal = $woocommerce->cart->cart_contents_count;
/*
1-5 packs 5,000
6-10 packs 10,000
11-15 packs 15,000
16-20 packs 20,000
*/
if($carttotal < 20){
$cost = 0;//Free delivery for above 20 packs
}else if($carttotal >= 16 && $carttotal <= 20){
$cost = 20000;
}else if($carttotal >= 11 && $carttotal <= 15){
$cost = 15000;
}else if($carttotal >= 6 && $carttotal <= 10){
$cost = 10000;
}else if($carttotal >= 5 && $carttotal <= 1){
$cost = 5000;
}else if($carttotal > 1){
$cost = 0;
}
$rate = array(
'id' => $this->id,
'label' => 'Shipping',
'cost' => $cost
);
// Register the rate
$this->add_rate( $rate );
}
}
}
}
add_action( 'woocommerce_shipping_init', 'your_shipping_method_init' );
function add_your_shipping_method( $methods ) {
$methods['your_shipping_method'] = 'WC_Your_Shipping_Method';
return $methods;
}
add_filter( 'woocommerce_shipping_methods', 'add_your_shipping_method' );
}
我从Credit帮助中获得了一些帮助:How to add custom shipping charge in woocommerce?但现在我需要完成此操作。提前致谢
答案 0 :(得分:0)
看起来你的calculate_shipping函数有一些问题
if($carttotal < 20){
$cost = 0;//Free delivery for above 20 packs
应该是
if($carttotal > 20){
和
}else if($carttotal >= 5 && $carttotal <= 1){
向后,它读取&#34;大于或等于5且小于或等于1&#34;
应该是
}else if($carttotal >= 1 && $carttotal <= 5){
也是你的最后一个,如果在该陈述中令人困惑,其余的if应涵盖1到20之间的每个数字
}else if($carttotal > 1){
$cost = 0;
您可以删除该部分。
答案 1 :(得分:0)
我刚从条件语句
中解开函数mPlayerLastRollLabel.setText("Player rolled: ...");
Timer t = new Timer(5000, new ActionListener(){
public void actionPerformed(ActionEvent ae){
mPlayerLastRollLabel.setText("Player rolled: " + mFaceNumber);
}
});
t.setRepeats(false);
t.start();
不要忘记底部的最后一个闭合支撑。我杀了一些标准,但没有把它作为一个插件,只是创建了一个新的文件(避免混乱)包含在我的functions.php中
所以对于functions.php我添加了
if ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {
和/inc/woo-shipping-methods.php文件
有这个代码
require get_template_directory() . '/inc/woo-shipping-methods.php';
干杯。