function premise_recurring_payment_handler() { global $premise_cron_args, $wpdb; if (is_user_logged_in() || !function_exists('memberaccess_get_cron_key')) { return; } if (!is_array($premise_cron_args) || empty($premise_cron_args['key']) || memberaccess_get_cron_key() != $premise_cron_args['key']) { return; } $now = time(); // check for expired subscriptions $expired_subscriptions = $wpdb->get_col($wpdb->prepare("SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = '_acp_order_renewal_time' AND meta_value BETWEEN %s AND %s", $now - 259200, $now - 172800)); if (!empty($expired_subscriptions)) { foreach ($expired_subscriptions as $order) { $order_status = get_post_meta($order, '_acp_order_status', true); if ($order_status == __('cancel', 'premise')) { continue; } AccessPress_Orders::cancel_subscription($order, false); } } // try renewing over a 3 day window $subscriptions = $wpdb->get_col($wpdb->prepare("SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key = '_acp_order_renewal_time' AND meta_value BETWEEN %s AND %s", $now - 172800, $now + 86400)); if (!empty($subscriptions)) { $orders = $wpdb->get_col("SELECT ID FROM {$wpdb->posts} WHERE post_type = 'acp-orders' AND post_status = 'publish' AND ID IN (" . implode(',', $subscriptions) . ')'); } if (empty($orders)) { premise_recurring_payment_notification(__('No subscriptions to renew.', 'premise')); } $results = array(); foreach ($orders as $order) { $order_status = get_post_meta($order, '_acp_order_status', true); if ($order_status == __('cancel', 'premise')) { continue; } $order_post = get_post($order); $result = AccessPress_Orders::renew_subscription($order, false); if (!$result) { $results[] = sprintf(__('Could not find product on order # %s', 'premise'), $order_post->post_name); continue; } if (is_wp_error($result)) { $results[] = sprintf(__('Error on order # %s - %s', 'premise'), $order_post->post_name, $result->get_error_message()); continue; } $product = get_post($result['product_id']); $results[] = sprintf(__('Processed order # %d - %s - %s - Amount %.2f', 'premise'), $order, $order_post->post_name, $product->post_title, $result['order_details']['_acp_order_price']); } premise_recurring_payment_notification(implode("\n", $results)); }