1

タイトルはそれをかなりよく説明しています。クラスを拡張して新しい配送方法(原価ベースの配送)を追加しようとしています。プラグイン本体は次のとおりです (残りはコメントにあり、プラグイン情報が含まれています)。

class WC_Cost_Based extends WC_Shipping_Method {
    function __construct() {
        $this->id = 'cost-based';
        $this->method_title = __('Cost-Based', 'woocommerce');
    }

    function calculate_shipping() {
        $rate = array(
            'id' => $this->id,
            'label' => $this->title,
            'cost' => '10.99',
            'calc_tax' => 'per_item'
            );
    // Register the rate
        $this->add_rate( $rate );
    }

}

function add_cost_based_method( $methods ) {
    $methods[] = 'WC_Cost_Based';
    return $methods;
}

add_filter('woocommerce_shipping_methods', 'add_cost_based_method');

ファイルは .../wp-content/cost-based に保存されます

このエラーがポップアップする理由は何ですか?

4

2 に答える 2

0

woocommerceの指示/チュートリアルに従おうとしているときに、同じ問題が発生しました。彼らはいくつかのものを残しているようです。

まず、あなたの質問を解決するには、プラグイン クラスの先頭に woocommerce.php を含める必要があることがわかりました。これにより、新しい配送クラスは、拡張する必要がある WC_Shipping_Method にアクセスできるようになります。依存クラスのみを含めるより洗練された方法があるかもしれません。私の場合、インクルードは次のようになります。

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

次に、__construct() メソッドで少なくとも 2 つの属性を設定する必要があることもわかりました。彼らはいた:

 $this->title = "YOUR TITLE";  // Displays on the main shipping page
 $this->enabled = true;

3 番目に、(最低限) 以下も必要でした。

function is_available( $package ) {
    if ( $this->enabled == "no" ) return false;
    return apply_filters( 'woocommerce_shipping_' . $this->id . '_is_available', true );
}

それが役に立てば幸い!

サイモン

于 2013-02-28T04:25:22.323 に答える