WooCommerce运费计算中的自定义运费方式插件[重复]。

问题描述 投票:0回答:1

我正试图为WooCommerce创建一个插件,根据产品重量计算运费。我一直在得到这个错误。

警告:WC_Your_Shipping_Method::calculate_Method的声明 声明WC_Your_Shipping_Method::calculate_shipping($package)应该与WC_Shipping_Method::calculate_shipping($package = Array)兼容,在C:\Users\Michelle\Dropbox\MEDIEINSTITUTET\Utveckling mot e-handel\WooCommerce/WC-kurs/wp-content\plugins\frakt/frakt.php第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' );
}

?>

I really cant find the error... when I try the code I just see "Mici Shipping" but no price at all, meaning that somehow it does not read the if else statement? Thanks in advance for your help!

php wordpress woocommerce plugins shipping
1个回答
0
投票

你的类WC_Your_Shipping_Method extends WC_Shipping_Method已经有这个方法了.把这个。

public function calculate_shipping( $package ) 

变成这个

public function calculate_shipping( $package = array() )
© www.soinside.com 2019 - 2024. All rights reserved.