autoship_create_scheduled_order_link_handler (function)
(src/scheduled-orders.php) Used to process the Create Scheduled Order link data. It takes the $link (array) as a parameter and returns a boolean or WP_Error.
Function
/** * Processes the Create Scheduled Order Link Data * @param array $link { * The link param in an array * @type int|array $products Array of woocommerce simple or variation ids or single id * @type int $qty The qty to add * @type int $min The min cycles * @type int $max The max cycles * @type int $frequency The frequency * @type string $frequency_type The frequency type * @type int $order The Autoship Scheduled Order ID * @type string $coupon The coupon code * @type string $customer_id The WC Customer ID hashed * @type float $discount The discount amount ( SUPPLIED AS NULL ) * } * * @return bool|WP_Error True on Success, False if no scheduled order exists, * WP_Error on failure */ function autoship_create_scheduled_order_link_handler( $link ){ // The General notice is used for any link failures not related to coupons $general_notice = apply_filters( 'autoship_create_scheduled_order_link_invalid', __( 'The supplied link is no longer valid or has expired.', "autoship" ), $link ); do_action( 'autoship_initiate_create_scheduled_order_link_handler', $link ); if ( !isset( $link['customer_id'] ) ) return new WP_Error( 'invalid_or_expired_link', $general_notice ); $customer_id = $link['customer_id']; $args = array(); // Check for frequency if ( isset( $link['frequency'] ) ) $args['frequency'] = $link['frequency']; // Check for frequency type if ( isset( $link['frequency_type'] ) ) $args['frequencyType'] = $link['frequency_type']; // Check for frequency type if ( isset( $link['next_occurrence'] ) ) $args['nextOccurrenceUtc'] = $link['next_occurrence']; // Check for Products / Line Items if ( isset( $link['products'] ) && !empty( $link['products'] ) ){ // Setup the Query Params for the QPilot call // By default we search for only those ids that are enabled to be added to an order. $valid_products = apply_filters( 'autoship_create_scheduled_order_endpoint_valid_products_params', array( 'productIds' => array_keys( $link['products'] ) ), $link ); // Make the Search call $available_products = autoship_search_available_products( $valid_products ); if ( !is_wp_error( $available_products ) && !empty( $available_products ) ){ // Loop through the QPilot products and attach any needed info. $args['scheduledOrderItems'] = array(); foreach ($available_products as $key => $value) { if ( !isset( $link['products'][$value->id] ) ) continue; // Grab the prices - runs through the custom filter $prices = autoship_get_product_prices( $value->id ); // Create the min-needed for a line item // Devs can adjust on the fly using URL params $line = apply_filters('autoship_create_scheduled_order_endpoint_item', array( 'productId' => $value->id, 'price' => $prices['regular_price'], 'salePrice' => $prices['autoship_recurring_price'], 'quantity' => $link['products'][$value->id] ), $link ); // Check for Min Cycle Data if ( isset( $link['min'] ) && is_array( $link['min'] ) ){ $line['minCycles'] = isset( $link['min'][$value->id] ) ? $link['min'][$value->id] : NULL; } else if ( isset( $link['min'] ) ){ $line['minCycles'] = $link['min']; } // Check for Max Cycle Data if ( isset( $link['max'] ) && is_array( $link['max'] ) ){ $line['maxCycles'] = isset( $link['max'][$value->id] ) ? $link['max'][$value->id] : NULL; } else if ( isset( $link['max'] ) ){ $line['maxCycles'] = $link['max']; } $args['scheduledOrderItems'][] = $line; } } } // Allow a final filter for last adjustments & customizations $args = apply_filters( 'autoship_create_scheduled_order_endpoint_order_args', $args, $link ); // Make the call to create the order. $result = autoship_create_scheduled_order( $customer_id, $args ); return $result; }