If you want to hide the add to cart button based on a custom stock status please copy the below code to your function.php
( first we create a custom stock status called no_order ( No order)
// Add new stock status options
function filter_woocommerce_product_stock_status_options( $status ) {
// Add new statuses
$status[‘no_order’] = __( ‘no order’, ‘woocommerce’ );
return $status;
}
add_filter( ‘woocommerce_product_stock_status_options’, ‘filter_woocommerce_product_stock_status_options’, 10, 1 );
// Availability text
function filter_woocommerce_get_availability_text( $availability, $product ) {
switch( $product->stock_status ) {
case ‘no_order’:
$availability = __( ‘No order’, ‘woocommerce’ );
break;
}
return $availability;
}
add_filter( ‘woocommerce_get_availability_text’, ‘filter_woocommerce_get_availability_text’, 10, 2 );
// Availability class on admin page, to show the new status on the admin products page
function filter_woocommerce_get_availability_class( $class, $product ) {
switch( $product->stock_status ) {
case ‘no_order’:
$class = ‘no-order’;
break;
}
return $class;
}
add_filter( ‘woocommerce_get_availability_class’, ‘filter_woocommerce_get_availability_class’, 10, 2 );
// admin stock html
function filter_woocommerce_admin_stock_html( $stock_html, $product ) {
switch( $product->stock_status ) {
case ‘no_order’:
$stock_html = ‘<mark class=”no-order”>’ . __( ‘No order’, ‘woocommerce’ ) . ‘</mark>’;
break;
}
return $stock_html;
}
add_filter( ‘woocommerce_admin_stock_html’, ‘filter_woocommerce_admin_stock_html’, 10, 2 );
// hide the add to cart if the stock status of the product is No order
add_filter( ‘woocommerce_is_purchasable’, ‘woocommerce_hide_add_to_cart_button’, 10, 2 );
function woocommerce_hide_add_to_cart_button( $is_purchasable = true, $product ) {
$stock_status = $product->get_stock_status();
if ( ‘no_order’ == $stock_status) {
$is_purchasable = false;
}
return $is_purchasable;
}