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;
}