Hello,

When I am running my page I get this error:

Fatal error: Call to undefined method WC_Cart::get_fees() in /var/sites/m/mysite.co.uk/public_html/wp-content/themes/mio/woocommerce/checkout/review-order.php on line 53

Here is my review-order.php

<?php
/**
 * Review order form
 *
 * @author      WooThemes
 * @package     WooCommerce/Templates
 * @version     1.6.4
 */

if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly

global $woocommerce;

$available_methods = $woocommerce->shipping->get_available_shipping_methods();
?>
<div id="order_review">

    <table class="shop_table">
        <thead>
            <tr>
                <th class="product-name"><?php _e( 'Product', 'sp' ); ?></th>
                <th class="product-total"><?php _e( 'Total', 'sp' ); ?></th>
            </tr>
        </thead>
        <tfoot>
            <tr class="cart-subtotal">
                <th><?php _e( 'Cart Subtotal', 'sp' ); ?></th>
                <td><?php echo $woocommerce->cart->get_cart_subtotal(); ?></td>
            </tr>

            <?php if ( $woocommerce->cart->get_discounts_before_tax() ) : ?>

            <tr class="discount">
                <th><?php _e( 'Cart Discount', 'sp' ); ?></th>
                <td>-<?php echo $woocommerce->cart->get_discounts_before_tax(); ?></td>
            </tr>

            <?php endif; ?>

            <?php if ( $woocommerce->cart->needs_shipping() && $woocommerce->cart->show_shipping() ) : ?>

                <?php do_action('woocommerce_review_order_before_shipping'); ?>

                <tr class="shipping">
                    <th><?php _e( 'Shipping', 'sp' ); ?></th>
                    <td><?php woocommerce_get_template( 'cart/shipping-methods.php', array( 'available_methods' => $available_methods ) ); ?></td>
                </tr>

                <?php do_action('woocommerce_review_order_after_shipping'); ?>

            <?php endif; ?>

            <?php foreach ( $woocommerce->cart->get_fees() as $fee ) : ?>

                <tr class="fee fee-<?php echo $fee->id ?>">
                    <th><?php echo $fee->name ?></th>
                    <td><?php
                        if ( $woocommerce->cart->tax_display_cart == 'excl' )
                            echo woocommerce_price( $fee->amount );
                        else
                            echo woocommerce_price( $fee->amount + $fee->tax );
                    ?></td>
                </tr>

            <?php endforeach; ?>

            <?php
                // Show the tax row if showing prices exlcusive of tax only
                if ( $woocommerce->cart->tax_display_cart == 'excl' ) {

                    $taxes = $woocommerce->cart->get_formatted_taxes();

                    if ( sizeof( $taxes ) > 0 ) {

                        $has_compound_tax = false;

                        foreach ( $taxes as $key => $tax ) {
                            if ( $woocommerce->cart->tax->is_compound( $key ) ) {
                                $has_compound_tax = true;
                                continue;
                            }
                            ?>
                            <tr class="tax-rate tax-rate-<?php echo $key; ?>">
                                <th><?php echo $woocommerce->cart->tax->get_rate_label( $key ); ?></th>
                                <td><?php echo $tax; ?></td>
                            </tr>
                            <?php
                        }

                        if ( $has_compound_tax ) {
                            ?>
                            <tr class="order-subtotal">
                                <th><?php _e( 'Subtotal', 'sp' ); ?></th>
                                <td><?php echo $woocommerce->cart->get_cart_subtotal( true ); ?></td>
                            </tr>
                            <?php
                        }

                        foreach ( $taxes as $key => $tax ) {
                            if ( ! $woocommerce->cart->tax->is_compound( $key ) )
                                continue;
                            ?>
                            <tr class="tax-rate tax-rate-<?php echo $key; ?>">
                                <th><?php echo $woocommerce->cart->tax->get_rate_label( $key ); ?></th>
                                <td><?php echo $tax; ?></td>
                            </tr>
                            <?php
                        }

                    } elseif ( $woocommerce->cart->get_cart_tax() ) {
                        ?>
                        <tr class="tax">
                            <th><?php _e( 'Tax', 'sp' ); ?></th>
                            <td><?php echo $woocommerce->cart->get_cart_tax(); ?></td>
                        </tr>
                        <?php
                    }
                }
            ?>

            <?php if ($woocommerce->cart->get_discounts_after_tax()) : ?>

            <tr class="discount">
                <th><?php _e( 'Order Discount', 'sp' ); ?></th>
                <td>-<?php echo $woocommerce->cart->get_discounts_after_tax(); ?></td>
            </tr>

            <?php endif; ?>

            <?php do_action( 'woocommerce_review_order_before_order_total' ); ?>

            <tr class="total">
                <th><strong><?php _e( 'Order Total', 'sp' ); ?></strong></th>
                <td>
                    <strong><?php echo $woocommerce->cart->get_total(); ?></strong>
                    <?php
                        // If prices are tax inclusive, show taxes here
                        if ( $woocommerce->cart->tax_display_cart == 'incl' ) {
                            $tax_string_array = array();
                            $taxes = $woocommerce->cart->get_formatted_taxes();

                            if ( sizeof( $taxes ) > 0 ) {
                                foreach ( $taxes as $key => $tax ) {
                                    $tax_string_array[] = sprintf( '%s %s', $tax, $woocommerce->cart->tax->get_rate_label( $key ) );
                                }
                            } elseif ( $woocommerce->cart->get_cart_tax() ) {
                                $tax_string_array[] = sprintf( '%s tax', $tax );
                            }

                            if ( ! empty( $tax_string_array ) ) {
                                ?><small class="includes_tax"><?php printf( __( '(Includes %s)', 'sp' ), implode( ', ', $tax_string_array ) ); ?></small><?php
                            }
                        }
                    ?>
                </td>
            </tr>

            <?php do_action( 'woocommerce_review_order_after_order_total' ); ?>

        </tfoot>
        <tbody>
            <?php
                do_action( 'woocommerce_review_order_before_cart_contents' );

                if (sizeof($woocommerce->cart->get_cart())>0) :
                    foreach ($woocommerce->cart->get_cart() as $cart_item_key => $values) :
                        $_product = $values['data'];
                        if ($_product->exists() && $values['quantity']>0) :
                            echo '
                                <tr class="' . esc_attr( apply_filters('woocommerce_checkout_table_item_class', 'checkout_table_item', $values, $cart_item_key ) ) . '">
                                    <td class="product-name">' .
                                        apply_filters( 'woocommerce_checkout_product_title', $_product->get_title(), $_product ) . ' ' .
                                        apply_filters( 'woocommerce_checkout_item_quantity', '<strong class="product-quantity">&times; ' . $values['quantity'] . '</strong>', $values, $cart_item_key ) .
                                        $woocommerce->cart->get_item_data( $values ) .
                                    '</td>
                                    <td class="product-total">' . apply_filters( 'woocommerce_checkout_item_subtotal', $woocommerce->cart->get_product_subtotal( $_product, $values['quantity'] ), $values, $cart_item_key ) . '</td>
                                </tr>';
                        endif;
                    endforeach;
                endif;

                do_action( 'woocommerce_review_order_after_cart_contents' );
            ?>
        </tbody>
    </table>
    <div id="secured-wrap">
    <?php if (sp_isset_option( 'checkout_secured_icon', 'boolean', 'true' )) { ?>   
            <span class="secured-icon">&nbsp;</span>
        <p><?php _e('SECURED CHECKOUT','sp'); ?></p>
    <?php } ?>
            <?php if ( sp_isset_option( 'checkout_secured_code', 'isset' ) && strlen( (string)sp_isset_option( 'checkout_secured_code', 'value' ) ) ) { ?>
            <div class="code"><?php echo sp_isset_option( 'checkout_secured_code', 'value' ); ?></div>
        <?php } else { ?>
            <?php if ( sp_isset_option( 'checkout_secured_image', 'isset' ) && strlen( (string)sp_isset_option( 'checkout_secured_image', 'value' ) ) ) { 
                $image_url = sp_isset_option( 'checkout_secured_image', 'value' );
                if (is_ssl()) 
                    $image_url = str_replace('http', 'https', $image_url);
    ?>
                <img src="<?php echo $image_url; ?>" alt="Secured" />
            <?php } ?>
            <?php } ?> 
    </div><!--close secured-wrap-->   
    <div id="payment">
        <?php if ($woocommerce->cart->needs_payment()) : ?>
        <ul class="payment_methods methods">
            <?php
                $available_gateways = $woocommerce->payment_gateways->get_available_payment_gateways();
                if ( ! empty( $available_gateways ) ) {

                    // Chosen Method
                    if ( isset( $woocommerce->session->chosen_payment_method ) && isset( $available_gateways[ $woocommerce->session->chosen_payment_method ] ) ) {
                        $available_gateways[ $woocommerce->session->chosen_payment_method ]->set_current();
                    } elseif ( isset( $available_gateways[ get_option( 'woocommerce_default_gateway' ) ] ) ) {
                        $available_gateways[ get_option( 'woocommerce_default_gateway' ) ]->set_current();
                    } else {
                        current( $available_gateways )->set_current();
                    }

                    foreach ( $available_gateways as $gateway ) {
                        ?>
                        <li>
                            <input type="radio" id="payment_method_<?php echo $gateway->id; ?>" class="input-radio" name="payment_method" value="<?php echo esc_attr( $gateway->id ); ?>" <?php checked( $gateway->chosen, true ); ?> />
                            <label for="payment_method_<?php echo $gateway->id; ?>"><?php echo $gateway->get_title(); ?> <?php echo $gateway->get_icon(); ?></label>
                            <?php
                                if ( $gateway->has_fields() || $gateway->get_description() ) :
                                    echo '<div class="payment_box payment_method_' . $gateway->id . '" ' . ( $gateway->chosen ? '' : 'style="display:none;"' ) . '>';
                                    $gateway->payment_fields();
                                    echo '</div>';
                                endif;
                            ?>
                        </li>
                        <?php
                    }
                } else {

                    if ( ! $woocommerce->customer->get_country() )
                        echo '<p>' . __( 'Please fill in your details above to see available payment methods.', 'sp' ) . '</p>';
                    else
                        echo '<p>' . __( 'Sorry, it seems that there are no available payment methods for your state. Please contact us if you require assistance or wish to make alternate arrangements.', 'sp' ) . '</p>';

                }
            ?>
        </ul>
        <?php endif; ?>

        <div class="form-row place-order">

            <noscript><?php _e( 'Since your browser does not support JavaScript, or it is disabled, please ensure you click the <em>Update Totals</em> button before placing your order. You may be charged more than the amount stated above if you fail to do so.', 'sp' ); ?><br/><input type="submit" class="button alt" name="woocommerce_checkout_update_totals" value="<?php _e( 'Update totals', 'sp' ); ?>" /></noscript>

            <?php $woocommerce->nonce_field('process_checkout')?>

            <?php do_action( 'woocommerce_review_order_before_submit' ); ?>

            <div class="input-button-buy"><span><input type="submit" class="button alt" name="woocommerce_checkout_place_order" id="place_order" value="<?php echo apply_filters('woocommerce_order_button_text', __('Place order', 'sp')); ?>" /></span></div>

            <?php if (woocommerce_get_page_id('terms')>0) : ?>
            <p class="form-row terms">
                <label for="terms" class="checkbox"><?php _e( 'I have read and accept the', 'sp' ); ?> <a href="<?php echo esc_url( get_permalink(woocommerce_get_page_id('terms')) ); ?>" target="_blank"><?php _e( 'terms &amp; conditions', 'sp' ); ?></a></label>
                <input type="checkbox" class="input-checkbox" name="terms" <?php checked( isset( $_POST['terms'] ), true ); ?> id="terms" />
            </p>
            <?php endif; ?>

            <?php do_action( 'woocommerce_review_order_after_submit' ); ?>

        </div>

        <div class="group"></div>

    </div>

</div>

Can anyone help me with solving the problem?

Thank you!

Recommended Answers

All 3 Replies

WC_Cart::get_fees() is undefined.
You'll have to write the function.

Or include the file that has the function :)

A quick Google search reveales that the WC_Cart class for WooCommerce didn't include the get_fees function in version 1.6, but it does show up in version 2.0. The header in your file mentioens version 1.6.4. Are you perhaps trying to use parts of code from a later version of WooCommerce in a site that uses an older version?

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.