Dentro de cada producto, en el apartado Inventario, tenemos tres estados: Hay existencias, Sin stock y Se puede reservar.
Con estas pastillas de código podemos crear nuevos estados, pero son casos diferentes, por lo que tendrás que evaluar cuál te encaja más para tu propósito.
- Crear nuevos estados del stock.
- Añadir a un estado existente, nuevas etiquetas.
Caso 1. Crear nuevos estados para el stock
<?php // Añadir nuevas opciones de stock function filter_woocommerce_product_stock_status_options( $status ) { // Add new statuses $status['descatalogado'] = __( 'Descatalogado', 'woocommerce' ); $status['proximamente'] = __( 'Próximamente', 'woocommerce' ); return $status; } add_filter( 'woocommerce_product_stock_status_options', 'filter_woocommerce_product_stock_status_options', 10, 1 ); // Texto de disponibilidad function filter_woocommerce_get_availability_text( $availability, $product ) { // Get stock status switch( $product->get_stock_status() ) { case 'descatalogado': $availability = __( 'Descatalogado', 'woocommerce' ); break; case 'proximamente': $availability = __( 'Próximamente', 'woocommerce' ); break; } return $availability; } add_filter( 'woocommerce_get_availability_text', 'filter_woocommerce_get_availability_text', 10, 2 ); // Para las clases CSS function filtrar_woocommerce_estados_inventario( $class, $product ) { // Get stock status switch( $product->get_stock_status() ) { case 'descatalogado': $class = 'invdescatalogado'; break; case 'proximamente': $class = 'invproximamente'; break; } return $class; } add_filter( 'woocommerce_get_availability_class', 'filtrar_woocommerce_estados_inventario', 10, 2 );
Caso 2. Añadir a un estado existente, nuevas etiquetas
En este ejemplo se crean 2 nuevas opciones de stock para Out of stock (Sin stock):
- Out of stock (Descatalogado)
- Out of stock (Unidades en camino), también se puede renombrar a En fabricación
<?php // Añadimos tres valores, el primero vacio para se tenga que seleccionar y los estados que penderán de Sin stock function action_woocommerce_product_options_stock_status() { // Custom stock status $options = array( 'empty' => __( 'N/A', 'woocommerce' ), 'descatalogado' => __( 'Descatalogado', 'woocommerce' ), 'udencamino' => __( 'Unidades en camino', 'woocommerce' ), ); woocommerce_wp_select( array( 'id' => '_custom_stock_status', 'wrapper_class' => 'stock_status_field hide_if_variable hide_if_external hide_if_grouped', 'label' => __( 'Custom stock status', 'woocommerce' ), 'options' => $options, 'desc_tip' => true, 'description' => __( 'Sin stock tiene dos estados Decatalogado y Unidades en camino', 'woocommerce' ), ) ); } add_action( 'woocommerce_product_options_stock_status', 'action_woocommerce_product_options_stock_status', 10 ); // Grabamos el custom fiel que hemos creado y se mostrará debajo de Estado del inventario function action_woocommerce_admin_process_product_object( $product ) { // Isset if ( isset( $_POST['_custom_stock_status'] ) ) { // Update $product->update_meta_data( '_custom_stock_status', sanitize_text_field( $_POST['_custom_stock_status'] ) ); } } add_action( 'woocommerce_admin_process_product_object', 'action_woocommerce_admin_process_product_object', 10, 1 ); // Añadimos los textos de las subestados creados para Sin stock o Out of stock function filter_woocommerce_get_availability_text( $availability, $product ) { // Solo para el estado 'outofstock' if ( $product->get_stock_status() == 'outofstock' ) { // Creamos custom stock status para mostrar y poder elegri las dos opciones $custom_stock_status = $product->get_meta( '_custom_stock_status' ); // Selector de opciones if ( $custom_stock_status == 'descatalogado' ) { $availability = __( 'Sin stock (Descatalogado)', 'woocommerce' ); } elseif ( $custom_stock_status == 'udencamino' ) { $availability = __( 'Sin stock (Unidades en camino)', 'woocommerce' ); } } return $availability; } add_filter( 'woocommerce_get_availability_text', 'filter_woocommerce_get_availability_text', 10, 2 );