Mary Mary - 1 year ago 171
PHP Question

WooCommerce - Line of text keeps repeating on checkout page

I want to insert "If you'd like to change your subscription, go back to Cart" on my checkout page. I inserted it in the

file, but it repeats on the checkout page even if I only inserted the line once in the document.

This picture shows how the text repeats

Does anyone know how to fix this?

I'd like to show the text at the top of the section (before the table).

Thanks in advance!

Here is the code: (the top line is what I added)

<?php echo "<strong>If you'd like to change your subscription, go back to <a href=''>Cart</a></strong> </br>"; ?>

* Review order table
* This template can be overridden by copying it to yourtheme/woocommerce/checkout/review-order.php.
* HOWEVER, on occasion WooCommerce will need to update template files and you (the theme developer).
* will need to copy the new files to your theme to maintain compatibility. We try to do this.
* as little as possible, but it does happen. When this occurs the version of the template file will.
* be bumped and the readme will list any important changes.
* @see
* @author WooThemes
* @package WooCommerce/Templates
* @version 2.3.0

if ( ! defined( 'ABSPATH' ) ) {

<table class="shop_table woocommerce-checkout-review-order-table">

do_action( 'woocommerce_review_order_before_cart_contents' );

foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
$_product = apply_filters( 'woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key );

if ( $_product && $_product->exists() && $cart_item['quantity'] > 0 && apply_filters( 'woocommerce_checkout_cart_item_visible', true, $cart_item, $cart_item_key ) ) {
<tr class="<?php echo esc_attr( apply_filters( 'woocommerce_cart_item_class', 'cart_item', $cart_item, $cart_item_key ) ); ?>">
<td class="product-name">
<?php echo apply_filters( 'woocommerce_cart_item_name', $_product->get_title(), $cart_item, $cart_item_key ) . '&nbsp;'; ?>
<?php echo apply_filters( 'woocommerce_checkout_cart_item_quantity', ' <strong class="product-quantity">' . sprintf( '&times; %s', $cart_item['quantity'] ) . '</strong>', $cart_item, $cart_item_key ); ?>
<?php echo WC()->cart->get_item_data( $cart_item ); ?>
<td class="product-total">
<?php echo apply_filters( 'woocommerce_cart_item_subtotal', WC()->cart->get_product_subtotal( $_product, $cart_item['quantity'] ), $cart_item, $cart_item_key ); ?>

do_action( 'woocommerce_review_order_after_cart_contents' );

<?php foreach ( WC()->cart->get_coupons() as $code => $coupon ) : ?>
<tr class="cart-discount coupon-<?php echo esc_attr( sanitize_title( $code ) ); ?>">
<th><?php wc_cart_totals_coupon_label( $coupon ); ?></th>
<td><?php wc_cart_totals_coupon_html( $coupon ); ?></td>
<?php endforeach; ?>

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

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

<?php wc_cart_totals_shipping_html(); ?>

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

<?php endif; ?>

<?php foreach ( WC()->cart->get_fees() as $fee ) : ?>
<tr class="fee">
<th><?php echo esc_html( $fee->name ); ?></th>
<td><?php wc_cart_totals_fee_html( $fee ); ?></td>
<?php endforeach; ?>

<?php if ( wc_tax_enabled() && 'excl' === WC()->cart->tax_display_cart ) : ?>
<?php if ( 'itemized' === get_option( 'woocommerce_tax_total_display' ) ) : ?>
<?php foreach ( WC()->cart->get_tax_totals() as $code => $tax ) : ?>
<tr class="tax-rate tax-rate-<?php echo sanitize_title( $code ); ?>">
<th><?php echo esc_html( $tax->label ); ?></th>
<td><?php echo wp_kses_post( $tax->formatted_amount ); ?></td>
<?php endforeach; ?>
<?php else : ?>
<tr class="tax-total">
<th><?php echo esc_html( WC()->countries->tax_or_vat() ); ?></th>
<td><?php wc_cart_totals_taxes_total_html(); ?></td>
<?php endif; ?>
<?php endif; ?>

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

<tr class="order-total">
<th><?php _e( 'Recurring Total', 'woocommerce' ); ?></th>
<td><?php wc_cart_totals_order_total_html(); ?></td>


Answer Source

For this purpose, it is better to use woocommerce hooks (without editing review-order.php template):

You need to use (pasting this code in the function.php file of your active child theme or theme):

add_action( 'woocommerce_checkout_before_order_review', 'my_wc_checkout_before_order_review', 10, 0 );
function my_wc_checkout_before_order_review() {
    echo '<p class="return-to-cart">If you\'d like to change your subscription, go back to <a href="'. WC()->cart->get_cart_url() .'">Cart</a>.</p>';

This works perfectly (tested), no more repetition. woocommerce_checkout_before_order_review hook add something just after "Order summary" title.

You can manage styling with .return-to-cart class in your style.css file located in your active child theme or theme:


If your website is multilingual you can set it with gettex this way:

add_action( 'woocommerce_checkout_before_order_review', 'my_wc_checkout_before_order_review', 10, 0 );
function my_wc_checkout_before_order_review() {
    echo '<p class="return-to-cart">'.__("If you'd like to change your subscription, go back to ", "your_theme_domain").'<a href="'. WC()->cart->get_cart_url() .'">'.__("Cart", "woocommerce").'.</a></p>';

Replacing your_theme_domain by your theme slug. Like this you will be able to translate it in many languages.