autoship_add_to_scheduled_order_endpoint_wrapper (function)
( src/scheduled-orders.php) Used to wrap the functionality for adding an item to Scheduled Orders using the Autoship link builder. It takes the $action being performed as its parameter.
Function
/** * Adds a WooCommerce item to a Scheduled Order using the Query Vars. * NOTE If a Frequency & Frequency Type is not supplied then the item will be * added to the next scheduled order. */ function autoship_add_to_scheduled_order_endpoint_wrapper ( $action ){ // A product is required for this endpoint. if ( apply_filters( 'autoship_add_to_scheduled_order_endpoint', $action == 'add-to-scheduled-order', $action ) ) { // Default possible query vars which allows devs to set $link = autoship_get_scheduled_order_link_params( 'add_scheduled_order_item' ); if ( !isset( $link['products'] ) ) return false; $customer_id = 0; $notice = array( 'notice' => '', 'notice_type' => '' ); if ( !isset( $link['customer_id'] ) ) $notice = array( 'notice' => __( sprintf( 'A problem was encountered while attempting to add this item to the %s. Please try again.', autoship_translate_text( 'scheduled order' ) ), 'autoship' ), 'notice_type' => 'error' ); if ( empty( $notice['notice'] ) ){ // Process the link data and add the item to the next order(s) $result = autoship_add_to_scheduled_order_link_handler( $link ); if ( !$result ) do_action( 'autoship_add_to_next_order_no_order_found', $link, $customer_id ); if ( is_wp_error( $result ) ) $notice = array( 'notice' => $result->get_error_message(), 'notice_type' => 'error' ); // Check if no future orders exist if ( false != $result && !is_wp_error( $result ) ){ $scheduled_orders_label = autoship_translate_text( 'scheduled orders' ); $scheduled_order_label = autoship_translate_text( 'scheduled order' ); // Multiple cycles or just one terminology $qty_string = $link['max'] > 1 ? __( sprintf( '%d item(s) were successfully added to your next %d %s.', $link['qty'], $link['max'], $scheduled_orders_label ), 'autoship' ) : __( sprintf( '%d item(s) were successfully added to your next %s.', $link['qty'], $scheduled_order_label ), 'autoship' ); $notice = array( 'notice' => $qty_string, 'notice_type' => 'success' ); } } // Allow filtering of redirect $redirect = apply_filters('autoship_add_to_next_order_notice_url', '', $notice['notice_type'], $link, $customer_id ); // Let devs adjust notices and redirect. $notice = apply_filters( 'autoship_add_to_next_order_notice', $notice, $link, $customer_id ); if ( !empty( $notice['notice'] ) ) wc_add_notice( $notice['notice'] , $notice['notice_type'] ); if ( !empty( $redirect ) ){ wp_redirect( $redirect ); exit(); } return true; } }