Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save anthonysbrown/f87e220429c13c6913a46ed59f9d158d to your computer and use it in GitHub Desktop.
Save anthonysbrown/f87e220429c13c6913a46ed59f9d158d to your computer and use it in GitHub Desktop.
Retry Woocommerce Pending and subscriptions if your gateway has an error or fails. Go to your site ?retry=1
<?php
/**
* Plugin Name: WooCommerce Subscriptions Pending payment fix
*/
$wc_pending_payment_fix = new wc_pending_payment_fix;
add_action('init', array($wc_pending_payment_fix, 'retry_payments'));
class wc_pending_payment_fix{
function retry_payments(){
global $wpdb;
if($_GET['retry'] == 1){
$failed_renewal_orders = get_posts( array(
'date_query' => array(
array(
'column' => 'post_date_gmt',
'after' => '1 month ago',
),
),
'posts_per_page' =>-1,
'post_status' => array('wc-failed','wc-pending'),
'post_type' => 'shop_order',
'orderby' => 'date',
'order' => 'desc'
) );
echo count($failed_renewal_orders);
foreach($failed_renewal_orders as $renewal_order){
$parent_subscription = wcs_get_subscription(get_post_meta($renewal_order->ID,'_subscription_renewal',true));
if($parent_subscription){
if($parent_subscription->post->post_status == 'wc-on-hold'){
if(get_post_meta($parent_subscription->id, '_payment_method_title', true) == 'Credit Card'){
$subscription = wcs_get_subscription($parent_subscription->id);
$subscription->update_status( 'active' );
do_action( 'woocommerce_scheduled_subscription_payment', $subscription->id );
wp_delete_post( $renewal_order->ID );
unset($subscription);
add_post_meta($parent_subscription->id, '_processed_retry', 1,true);
}
}
}
}
exit;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment