If your customers have lost access to their products, you can regenerate download links in bulk in WooCommerce by using this quick and simple automated script. Instead of clicking through hundreds, or thousands, of individual orders – simply follow along in this video to learn how to automate the process.
Regenerate Download Permissions Code:
add_action( 'wp_ajax_ccom_regenerate', function() {
$offset = empty( $_POST['offset'] )
? 0 : intval( $_POST['offset'] );
$args = [
'status' => [ 'wc-completed' ],
'limit' => 100,
'offset' => $offset,
'type' => 'shop_order',
];
$orders = wc_get_orders( $args );
if( ! $orders ) {
wp_die();
}
foreach( $orders as $order ) {
echo '.';
if( ! $order->has_downloadable_item() ) {
continue;
}
$data_store = WC_Data_Store::load( 'customer-download' );
$data_store->delete_by_order_id( $order->get_id() );
wc_downloadable_product_permissions( $order->get_id(), true );
}
wp_die();
} );
add_action( 'admin_notices', function() {
echo '
<div class="notice notice-info is-dismissible" id="ccom_regenerate">
<p>
<a href="#" id="ccom_regenerate_button">
Regenerate Download Permissions
</a>
</p>
</div>
';
} );
add_action( 'admin_enqueue_scripts', function() {
wp_enqueue_script( 'jquery' );
wp_add_inline_script( 'jquery', '
var ccom_regenerate_offset = 0;
jQuery( document ).ready( function( $ ) {
$( "#ccom_regenerate_button" ).click( function() {
ccom_regenerate( $ );
} );
} );
function ccom_regenerate( $ ) {
var data = {
"action": "ccom_regenerate",
"offset": ccom_regenerate_offset
};
$.post( ajaxurl, data, function( response ) {
// Handle EOF Or Error
if( response == "" ) { return; }
// Display Page Processed
$( "div#ccom_regenerate" )
.append( " [offset:" + ccom_regenerate_offset + "] " );
// Advance
ccom_regenerate_offset += 100;
ccom_regenerate( $ );
} );
}
', 'after' );
} );