Adding New Stock Status to Products in Woocommerce
-
I’m trying to add a new “Sold” Status to products in Woocommerce. I have already found many solutions but non of them handles the Sold as an out of stock.
The sold products are also out of stock but they will never return back in stock again.
All solutions I found will set the “sold” status as either “available on back order” or “in stock”. but I need it to be handled by Woocommerce like an “out of stock” product.
Here is my recent attempt.
function add_custom_stock_type() { ?> <script type="text/javascript"> jQuery(function(){ jQuery('._stock_status_field').not('.custom-stock-status').remove(); }); </script> <?php woocommerce_wp_select( array( 'id' => '_stock_status', 'wrapper_class' => 'hide_if_variable custom-stock-status', 'label' => __( 'Stock status', 'woocommerce' ), 'options' => array( 'instock' => __( 'In stock', 'woocommerce' ), 'outofstock' => __( 'Out of stock', 'woocommerce' ), 'available_on_backorder' => __('On Backorder', 'woocommerce' ), 'sold' => __( 'Sold', 'woocommerce' ), // New ), 'desc_tip' => true, 'description' => __( 'Controls whether or not the product is listed as "in stock" or "out of stock" on the frontend.', 'woocommerce' ) ) ); } add_action('woocommerce_product_options_stock_status', 'add_custom_stock_type'); function save_custom_stock_status( $product_id ) { update_post_meta( $product_id, '_stock_status', wc_clean( $_POST['_stock_status'] ) ); } add_action('woocommerce_process_product_meta', 'save_custom_stock_status',99,1); function woocommerce_get_custom_availability( $data, $product ) { $stock_status = get_post_meta($product->id , '_stock_status' , true ); switch( $stock_status ) { case 'sold': $data = array( 'availability' => __( 'Sold', 'woocommerce' ), 'class' => 'out-of-stock' ); break; case 'instock': $data = array( 'availability' => __( 'In stock', 'woocommerce' ), 'class' => 'in-stock' ); break; case 'onbackorder': $data = array( 'availability' => __( 'On Backorder', 'woocommerce'), 'class' => 'available-on-backorder'); break; case 'outofstock': $data = array( 'availability' => __( 'Out of stock', 'woocommerce' ), 'class' => 'out-of-stock' ); break; } return $data; } add_action('woocommerce_get_availability', 'woocommerce_get_custom_availability', 10,4);
I also noticed that changing the two integer parameters in
add_action('woocommerce_get_availability', 'woocommerce_get_custom_availability', 10,4);
will mostly change the status between (available on backorder) and in stock.
The page I need help with: [log in to see the link]
- The topic ‘Adding New Stock Status to Products in Woocommerce’ is closed to new replies.