Ignore Stock Status on WooCommerce Products Synchronized to QPilot
In the example below, a developer wants QPilot to ignore the Stock Status of a WooCommerce product, always showing it as In-Stock in QPilot.
Remember: Always test code on a staging site before adding it to your live site
Reminder: Since the code hooks into the WooCommerce update and save product functionality, updating the product will be required to show up as In Stock in QPilot
Code Example
/**
* Checks if the Stock Status should be ignored for the supplied product/variation
* @param array $int The Product or Variation ID
*
* @return bool True ignore else false.
*/
function xx_ignore_stock_status_for_sync( $id ){
// Add conditional code ( retrieve metadata or category or anything else needed )
// Example: Targeting a specific Product Id would return "$id == 2846;" instead of true
return true;
}
/**
* Always treat Products as InStock for QPilot Product Upsert
* @param array $product_data The Product Upsert Data
*
* @return array The filtered Data.
*/
function xx_always_treat_products_as_in_stock_for_upsert( $product_data ) {
// Check if product should be shown as instock
if ( xx_ignore_stock_status_for_sync( $product_data['id'] ) )
$product_data['availability'] = 'InStock';
$product_data['backordersAllowed'] = true;
return $product_data;
}
add_filter( 'autoship_product_upsert_data', 'xx_always_treat_products_as_in_stock_for_upsert', 10, 1 );
/**
* Always treat Products as InStock for QPilot Product Sync
*
* @param WP_REST_Response $response The response object.
* @param WC_Data $object Object data.
* @param WP_REST_Request $request Request object.
*
* @return WP_REST_Response The Adjusted Response
*/
function xx_always_treat_products_as_in_stock_for_qpilot_sync( $response, $object, $request ) {
// Check if product should be shown as instock
if ( xx_ignore_stock_status_for_sync( $response->data['id'] ) )
$response->data['in_stock'] = true;
return $response;
}
add_filter( 'woocommerce_rest_prepare_product_object', 'xx_always_treat_products_as_in_stock_for_qpilot_sync', 90, 3 );
/**
* Removes the Stock Level Sync Check since the Status in QPilot may not match WC.
*
* @param array $data The current collected data for the variation.
* @param stdClass $summary The QPilot Variation Object
* @param WC_Product $product The WooCommerce product.
* @return array The filtered Data
*/
function xx_ignore_autoship_product_summary_stocklevel_sync_check( $data, $summary, $product ) {
// Get the Stock Status and translate it to the QPilot Equivalent
// Since QPilot doesn't track certain statuses and we want to ignore stock differences.
// Check if product should be shown as instock
if ( xx_ignore_stock_status_for_sync( $product->get_id() ) )
$data['StockLevel'] = autoship_get_mapped_stocklevel( $product->get_stock_status() );
return $data;
}
add_filter( 'autoship_product_summary_data', 'xx_ignore_autoship_product_summary_stocklevel_sync_check', 10, 3 );
/**
* Removes the Stock Level Sync Check since the Status in QPilot may not match WC.
*
* @param array $data The current collected data for the variation.
* @param stdClass $summary The QPilot Variation Object
* @param WC_Product $product The WooCommerce Variations Parent Product.
* @return array The filtered Data
*/
function xx_ignore_autoship_variable_product_summary_stocklevel_sync_check( $data, $summary, $product ) {
// Get the Stock Status for the variation and translate it to the QPilot Equivalent
// Since QPilot doesn't track certain statuses and we want to ignore stock differences.
// Check if product should be shown as instock
if ( xx_ignore_stock_status_for_sync( $data['Id'] ) ){
$variation = wc_get_product( $data['Id'] );
$data['StockLevel'] = autoship_get_mapped_stocklevel( $variation->get_stock_status() ); }
return $data;
}
add_filter( 'autoship_variable_product_summary_data', 'xx_ignore_autoship_variable_product_summary_stocklevel_sync_check', 10, 3 );
/**
* Removes the Stock Level Sync Check on All Products table since the Status in QPilot may not match WC.
*
* @param array $data The current collected data for the variation.
* @param stdClass $summary The QPilot Variation Object
*
* @return array The filtered Data
*/
function xx_ignore_autoship_summary_stocklevel_sync_check( $data, $summary ) {
// Get the Stock Status for the variation and translate it to the QPilot Equivalent
// Since QPilot doesn't track certain statuses and we want to ignore stock differences for certain procucts.
// Check if product should be shown as instock
if ( xx_ignore_stock_status_for_sync( $data['Id'] ) ){
$variation = wc_get_product( $data['Id'] );
$data['StockLevel'] = autoship_get_mapped_stocklevel( $variation->get_stock_status() ); }
return $data;
}
add_filter( 'autoship_all_products_summary_data_row', 'xx_ignore_autoship_summary_stocklevel_sync_check', 10, 2 );
Result:
After updating the Out of Stock product in WooCommerce it will be In-Stock in QPilot and be available to ship in Scheduled Orders (see an example of this below).


