1

我已经为 WooCommerce 创建了一个运输方式插件:http: //pastebin.com/SCsbDnnn

但是,它不起作用并给出以下输出: PHP 致命错误:

 Class 'WC_Shipping_Method' not found in class-wc-shipping-per-product.php, on line 44.

为什么找不到这个类?我什至包含了两个文件以确保,但不行:

include ('/woocommerce/woocommerce.php');

include_once( 'classes/abstracts/abstract-wc-shipping-method.php' );

我已经检查了另一个问题,但我的可能不同,这就是为什么我添加了一个新问题:WooCommerce Extending WC_Shipping_Method error: Class 'WC_Shipping_Method' not found

4

4 回答 4

3

也许我误解了,但是:

您的插件目录名称是:class-wc-shipping-per-productpluginsdir 中。

因此,要包含woocommerce.phpabstract-wc-shipping-method.phpplugins/woocommerce目录内有),您应该创建一个目录并且:

文件: wp-content/plugins/class-wc-shipping-per-product/class-wc-s‌​hipping-per-product.php

include_once('../woocommerce/woocommerce.php');
include_once('../woocommerce/classes/abstracts/abstract-wc-shipping-method.php');
于 2013-09-09T09:22:52.553 回答
1

我最近也在为此苦苦挣扎 - 网络上的各种片段非常具有误导性。这就是我到目前为止所得到的,它似乎工作......

add_action('woocommerce_shipping_init', 'yourprefix_woocommerce_init_shipping_rate');
add_filter('woocommerce_shipping_methods', array('WC_Shipping_XXX_Custom_Rate', 'add_shipping_method'));

function yourprefix_woocommerce_init_shipping_rate()
{

    class WC_Shipping_XXX_Custom_Rate extends WC_Shipping_Method
    {

        static function add_shipping_method($methods)
        {
            $methods[] = 'WC_Shipping_XXX_Custom_Rate';
            return $methods;
        }

        function __construct()
        {
            $this->id = 'yourprefix_custom_shipping';
            $this->method_title = __('yourprefix Custom Shipping', 'woocommerce');
            $this->title = "yourprefix CUSTOM SHIPPING TITLE";  // Displays on the main shipping page
            $this->enabled = true;
            $this->init();
        }

        function init()
        {
            $this->init_settings();
        }

        function is_available($package)
        {
            if ($this->enabled === "no")
                return false;
            return apply_filters('woocommerce_shipping_' . $this->id . '_is_available', true);
        }
于 2013-09-23T23:17:53.673 回答
1

在查看了 WooCommerce 和其他各种插件的源代码后,这就是我想出的。在我的shipping-plugin.php文件中:

add_action('plugins_loaded', 'load_plugins', 0);
function load_plugins() {
    require_once( plugin_dir_path( __FILE__ ) . 'class-custom-shipping.php' );
}

add_filter('woocommerce_shipping_methods', array('Custom_Shipping','woocommerce_shipping_methods' ));

防止类未找到错误的关键是仅在加载 WooCoommerce 插件后包含我的自定义运输类。在我的class-custom-shipping.php文件中,我有:

class Custom_Shipping extends WC_Shipping_Method {

    public static function woocommerce_shipping_methods( $methods ) {
        $methods[] = 'Custom_Shipping'; return $methods;
    }

    public function __construct() { ... }
    // other methods
}
于 2013-09-29T07:08:57.810 回答
0

您发布的代码是来自WooCommerce 文档的逐字记录,并且已损坏(!)。

我设法使它像这样工作:

if ( in_array( 'woocommerce/woocommerce.php', get_option( 'active_plugins' ) ) )
    add_filter( 'woocommerce_shipping_methods', 'add_shippin_per_product_method' );

function add_shippin_per_product_method( $methods ) 
{
    // Class definition
    include( 'class-wc-shipping-per-product.php' );
    $methods[] = 'WC_Shipping_Per_Product'; 
    return $methods;
}
于 2013-08-30T21:41:43.383 回答