首页 文章

使用购物车总项目在woocommerce中添加自定义送货方式

提问于
浏览
1

我需要一些帮助来完成这段代码 . 我一直在尝试为我的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?但现在我需要完成这个 . 提前致谢

2 回答

  • 0

    看起来你的calculate_shipping函数有一些问题

    if($carttotal < 20){
         $cost = 0;//Free delivery for above 20 packs
    

    应该

    if($carttotal > 20){
    

    }else if($carttotal >= 5 && $carttotal <= 1){
    

    向后,它显示“大于或等于5且小于或等于1”

    应该

    }else if($carttotal >= 1 && $carttotal <= 5){
    

    如果在该陈述中令人困惑,其余的if应该涵盖1到20之间的每个数字

    }else if($carttotal > 1){
        $cost = 0;
    

    您可以删除该部分 .

  • 0

    我只是从条件语句中解开函数

    if ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {
    

    不要忘记底部的最后一个闭合支撑 . 我杀了一些标准,但没有把它作为一个插件,只是创建了一个新的文件(避免杂乱)包含在我的functions.php中

    所以对于functions.php我添加了

    require get_template_directory() . '/inc/woo-shipping-methods.php';
    

    和/inc/woo-shipping-methods.php文件

    有这个代码

    <?php
    
    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 
                ----------------------------------------------------------------*/
                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
                ----------------------------------------------------------------*/
                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.
                ----------------------------------------------------------------*/
    
                public function calculate_shipping( $package ) {
                    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;
                    }
    
                    $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' );
    

    干杯 .

相关问题