Opções de estoque adicionais em woocommerce

Eu uso este código para adicionar opções de estoque no woocommerce

// New Stock Statuses function add_custom_stock_type() { ?>  jQuery(function(){ jQuery('._stock_status_field').not('.custom-stock-status').remove(); });   '_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' ), 'onrequest' => __( 'Product is out of stock but available in physical store.', 'woocommerce' ), // The new option without add to cart button 'preorder' => __( 'Product can be preordered.', 'woocommerce' ), // The new option that should have add to cart button ), '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 ) { switch( $product->stock_status ) { case 'instock': $data = array( 'availability' => __( 'In Stock.', 'woocommerce' ), 'class' => 'in-stock' ); break; case 'outofstock': $data = array( 'availability' => __( 'Out of Stock.', 'woocommerce' ), 'class' => 'out-of-stock' ); break; case 'onrequest': $data = array( 'availability' => __( '', 'woocommerce' ), 'class' => 'on-request' ); echo '

Out of stock, but in physical store

'; break; case 'preorder': $data = array( 'availability' => __( '', 'woocommerce' ), 'class' => 'preorder' ); echo '

Preorder product.

'; break; } return $data; } add_action('woocommerce_get_availability', 'woocommerce_get_custom_availability', 10, 2);

Este código adiciona status adicional às opções de estoque originais no WooCommerce, mas defina os novos status como fora de estoque, o que significa que ele remove o botão Adicionar ao carrinho na página do produto.

Estou me perguntando, porém, há alguma maneira de adicionar mais status de estoque que estão “em estoque”?

Gostaria de adicionar estados adicionais que estão fora de estoque, como agora (que remove o botão Adicionar ao carrinho) e alguns que ainda possuem o botão Adicionar ao carrinho.

Isso é possível?

Tenho tentado criar algo como isso do passado … E posso dizer que a versão atual do woocommerce não fornece uma maneira decente de adicionar status de estoque personalizado …

No entanto, o que está faltando no seu código é esse …

 add_filter('woocommerce_product_is_in_stock', 'woocommerce_product_is_in_stock' ); function woocommerce_product_is_in_stock( $is_in_stock ) { global $product; // array of custom stock statuses that will have add to cart button $stock_statuses = array('onrequest','preorder'); if (!$is_in_stock && in_array($product->stock_status, $stock_statuses )) { $is_in_stock = true; } return $is_in_stock; } 

Você tentou usar o plug-in Woocommerce Custom Stock? https://wordpress.org/plugins/woo-custom-stock-status/

Isso me ajuda a manter mensagens de estoque personalizadas.