autoship_push_product (function)
(src/products.php) Main upload function which upserts a product and its variations to QPilot. It takes the WP Post Id or product object ( $id) as its parameter.
Function
/** * Main Upload Function Creates the product / product variations in QPilot. * * Receives a Product to create, checks for the QPilot client, * validates the product via {@see autoship_productize_and_validate()}, and then upserts ( updates or creates ) the product and its * variations in QPilot. * * @param mixed $id. Post object or post ID of the product. * @return bool|WP_Error True on success else false|wp_error */ function autoship_push_product ( $id ){ // Create the QPilot client // Grab the client and only continue if connection exists. if ( empty( $client = autoship_get_default_client() ) || empty( $client->get_token_auth() ) ) return false; // Get the product ( if invalid or wrong type or not correct status returns false ) if ( ( $product = autoship_productize_and_validate( $id ) ) === false ) return false; try { // If this is a variation then lets initialize Autoship fields // If they aren't already if ( 'variation' == $product->get_type() ){ // Since this is a variation we need to ensure the parent exists. // Currently the best route is to try and get the product via external id. try { $Qproduct = $client->get_product( $product->get_parent_id() ); } catch ( Exception $e ) { // Since this is an create / update for a variation // and a 404 is thrown Assume the parent needs to be created // before moving on. if ( $e->getCode() == 404 ) { do_action( 'autoship_push_product_404_missing_variable_parent', $product, $product->get_parent_id() ); autoship_push_product ( $product->get_parent_id() ); } autoship_log_entry( __( 'Autoship Products', 'autoship' ), $e->getMessage() ); } // Initialize the variation - any missing fields add them. $product = autoship_init_variation_metafields( $product->get_id() ); } // Gather the data to send if ( empty( $upsert_data = autoship_generate_product_upsert_data ( $product ) ) ) return new WP_Error( 'Product Data Not Found', __( "The Supplied Product's data could not be found.", "autoship" ) ); // Send / Create product $client->upsert_product( $upsert_data['id'], $upsert_data['title'], $upsert_data ); // Check if the product is a variable product // If variable & has children we should loop through // children to update if needed. $variations = autoship_get_available_variations( $product ); // Update the child variations if they exist foreach ( $variations as $variation ) { // Recursively push the variations. autoship_push_product( $variation ); } } catch (Exception $e) { $notice = autoship_expand_http_code( $e->getCode() ); autoship_log_entry( __( 'Autoship Products', 'autoship' ), sprintf( 'Product Upsert Failed Additional Details: %s', $e->getMessage() ) ); return new WP_Error( 'Product Upsert Failed', __( $notice['desc'], "autoship" ) ); } do_action( 'autoship_after_push_product', $product ); return true; }