• You MUST read the Babiato Rules before making your first post otherwise you may get permanent warning points or a permanent Ban.

    Our resources on Babiato Forum are CLEAN and SAFE. So you can use them for development and testing purposes. If your are on Windows and have an antivirus that alerts you about a possible infection: Know it's a false positive because all scripts are double checked by our experts. We advise you to add Babiato to trusted sites/sources or disable your antivirus momentarily while downloading a resource. "Enjoy your presence on Babiato"

How to open downloadable products in new tab on chekout in Woocommerce - A Short Guide

DarKMaSk

Well-known member
Nov 17, 2020
774
330
63
This is a common problem in Woocommerce that if you have a downloadable product and when customer buy it, on the last step of 'CHECKOUT' when the download link appears, on clicking that link the product download page open in the same tab making the customer leave the site totally. This specially happens when you host your download files in external file hosts like Google Drive, Mediafire, Mega etc. This is very bad for SEO and generates BAD RANKINGS. I was searching the net and I found this solution which I am going to share below. I have tested it on my site and it worked. As it doesn't depend on any theme, I think it will work on any website which uses Woocommerce and has this type of download feature.

Method:​

  1. Create 'order-downloads.php' file in 'your-child-theme/woocommerce/order/' folder (without quotes and replace 'your-child-theme' with your own WordPress child-theme name);​

  2. Copy and paste the following code in that 'order-downloads.php' file you have just created:​

    PHP:
    <?php
    /**
    * Order Downloads.
    *
    * This template can be overridden by copying it to yourtheme/woocommerce/order/order-downloads.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     https://docs.woocommerce.com/document/template-structure/
    * @package WooCommerce\Templates
    * @version 3.3.0
    */
    
    if ( ! defined( 'ABSPATH' ) ) {
        exit;
    }
    ?>
    <section class="woocommerce-order-downloads">
        <?php if ( isset( $show_title ) ) : ?>
            <h2 class="woocommerce-order-downloads__title"><?php esc_html_e( 'Downloads', 'woocommerce' ); ?></h2>
        <?php endif; ?>
    
        <table class="woocommerce-table woocommerce-table--order-downloads shop_table shop_table_responsive order_details">
            <thead>
                <tr>
                    <?php foreach ( wc_get_account_downloads_columns() as $column_id => $column_name ) : ?>
                    <th class="<?php echo esc_attr( $column_id ); ?>"><span class="nobr"><?php echo esc_html( $column_name ); ?></span></th>
                    <?php endforeach; ?>
                </tr>
            </thead>
    
            <?php foreach ( $downloads as $download ) : ?>
                <tr>
                    <?php foreach ( wc_get_account_downloads_columns() as $column_id => $column_name ) : ?>
                        <td class="<?php echo esc_attr( $column_id ); ?>" data-title="<?php echo esc_attr( $column_name ); ?>">
                            <?php
                            if ( has_action( 'woocommerce_account_downloads_column_' . $column_id ) ) {
                                do_action( 'woocommerce_account_downloads_column_' . $column_id, $download );
                            } else {
                                switch ( $column_id ) {
                                    case 'download-product':
                                        if ( $download['product_url'] ) {
                                            echo '<a href="' . esc_url( $download['product_url'] ) . '">' . esc_html( $download['product_name'] ) . '</a>';
                                        } else {
                                            echo esc_html( $download['product_name'] );
                                        }
                                        break;
                                    case 'download-file':
                                        echo '<a href="' . esc_url( $download['download_url'] ) . '" target="_blank" rel="noopener noreferrer" class="woocommerce-MyAccount-downloads-file button alt">' . esc_html( $download['download_name'] ) . '</a>';
                                        break;
                                    case 'download-remaining':
                                        echo is_numeric( $download['downloads_remaining'] ) ? esc_html( $download['downloads_remaining'] ) : esc_html__( '&infin;', 'woocommerce' );
                                        break;
                                    case 'download-expires':
                                        if ( ! empty( $download['access_expires'] ) ) {
                                            echo '<time datetime="' . esc_attr( date( 'Y-m-d', strtotime( $download['access_expires'] ) ) ) . '" title="' . esc_attr( strtotime( $download['access_expires'] ) ) . '">' . esc_html( date_i18n( get_option( 'date_format' ), strtotime( $download['access_expires'] ) ) ) . '</time>';
                                        } else {
                                            esc_html_e( 'Never', 'woocommerce' );
                                        }
                                        break;
                                }
                            }
                            ?>
                        </td>
                    <?php endforeach; ?>
                </tr>
            <?php endforeach; ?>
        </table>
    </section>
  3. Save the file and refresh your WordPress website.​


And that's all. As this file will be in your Child-theme folder, it will not be affected with any change or update in WordPress. Hope this will help someone like me who is banging head on the wall or eating out nails or loosing hair by scratching head by thinking how to overcome this problem. Love you all. ❤️:)

Original source: https://stackoverflow.com/questions/67569200/how-to-open-downloadable-products-in-woocommerce-in-new-tab
 
Last edited:
  • Like
Reactions: davidgreen
Thanks for sharing. I assume the external link is protected against unauthorized access and public sharing right?
 
  • Like
Reactions: DarKMaSk
Thanks for sharing. I assume the external link is protected against unauthorized access and public sharing right?
You have to make the checkout page access for 'logged in users only' that means, on checkout, the users must have to make an account. There are other methods also to protect the link but that will only complicate the download process and may result to user's negativity which will be bad. In my opinion, if you want to protect your content, don't upload it at all because nothing on the internet is protected.
 
Last edited:
AdBlock Detected

We get it, advertisements are annoying!

However in order to keep our huge array of resources free of charge we need to generate income from ads so to use the site you will need to turn off your adblocker.

If you'd like to have an ad free experience you can become a Babiato Lover by donating as little as $5 per month. Click on the Donate menu tab for more info.

I've Disabled AdBlock