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.
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 );
}
}
}