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' );
} );
Bulk regenerate download permissions
Regenerates WooCommerce digital download file permissions on historic orders in batches of 100. Useful when you’ve detected customers can’t download prior purchases.
How to use
- Log into a staging, development, or locally hosted clone of your site
- Install and activate Code Snippets
- WP Admin > Snippets > Add New
- Copy and paste the code from the Description tab above
- Check to ensure formatting came over properly and no syntax errors show up in the editor
- Customize the code as desired
- Add a meaningful title
- Select whether to run on front-end or back-end (or both)
- Click “Save and Activate”
- Test your site to ensure it works
- Disable if any problems, or recover
- Repeat for live environment
License
All code snippets are licensed GPLv2 (or later) matching WordPress licensing.
Disclaimer of warranty:
Except when otherwise stated in writing the copyright holders and/or other parties provide the program as-is without warranty of any kind, either expressed or implied, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose.
Support
- Describe the issue and what you’ve observed.
- Describe your expected outcome(s).
- List steps to reproduce the issue.
- Optionally provide screen-shot or video URLs.
