web-dev-qa-db-fra.com

Extension de WC_Cart dans woocommerce

J'essaie d'étendre WC_Cart dans woocommerce, d'après ce que je comprends, mon code devrait être correct. Cependant, lorsque je charge le panier, je reçois le message suivant.

Fatal error: Call to undefined method WC_Cart::get_prediscount_total() in ...

Code dans mon plugin:

class My_WC_Cart extends WC_Cart { 
    public function get_prediscount_total() {
        return apply_filters( 'woocommerce_cart_total', woocommerce_price( $this->total * 5 ) ); 
    } 
}

Le code de sortie est

 echo $woocommerce->cart->get_prediscount_total();

Cela fonctionne lorsque les codes dans /wp-content/plugins/woocommerce/classes/class-wc-cart.php mais le moment où j'essaie de le prolonger échouent.

2
Johnathon Mathews

L'extension de la classe de panier WooCommerce est un peu délicate, mais possible.

Supposons que vous avez un plugin et un fichier class-my-wc-cart.php avec une classe de panier étendue à l'intérieur. Ensuite, dans le fichier de plugin principal, vous devez procéder comme suit:

// load your My_WC_Cart class
require_once 'class-my-wc-cart.php';

// setup woocommerce to use your cart class    
add_action( 'woocommerce_init', 'wpse8170_woocommerce_init' );
function wpse8170_woocommerce_init() {
    global $woocommerce;

    if ( !is_admin() || defined( 'DOING_AJAX' ) ) {
        $woocommerce->cart = new My_WC_Cart();
    }
}

// override empty cart function to use your cart class
if ( !function_exists( 'woocommerce_empty_cart' ) ) {
    function woocommerce_empty_cart() {
        global $woocommerce;

        if ( ! isset( $woocommerce->cart ) || $woocommerce->cart == '' ) {
            $woocommerce->cart = new My_WC_Cart();
            $woocommerce->cart->empty_cart( false );
        }
    }
}
4
Eugene Manuilov