En el ámbito del comercio, tener un control preciso sobre el inventario es crucial para evitar sobrestock o desabastecimiento, los cuales pueden afectar directamente la satisfacción del cliente, la gestión interna de la empresa y la rentabilidad del negocio. Existen varias formas de llevar un control preciso del stock y más en una tienda online que está todo informatizado.
En este tutorial veremos la parte de tener un informe del flujo de cambios de stock que tiene cada producto. Fundamental, para saber de dónde vienen todos los cambios de stock, por qué han ocurrido, fecha/hora de la modificación y qué usuario hizo ese cambio manual. A continuación, descubrirás por qué esta función es indispensable y cómo implementarla en tu WooCommerce.
Índice
Ventajas de Gestionar el Historial de Cambios de Stock
Control Preciso: Saber en todo momento la cantidad de productos disponibles.
Optimización de Inventario: Evita sobrestock y optimiza la reordenación de productos.
Análisis de Ventas: Identifica patrones de ventas y ajusta tu estrategia de stock acorde. Ideal para aumentar tus ventas.
Satisfacción del Cliente: Evita roturas de stock para garantizar que el producto que compra el cliente puede llegar. Ahorrándonos también mucho tiempo de atención al cliente.
Historial de cambios por código
Si lo que necesitamos es solo un registro simple de cambios y no un plugin que realice esta función y otras varias. Lo ideal es usar el siguiente fragmento de código:
add_action( 'woocommerce_product_before_set_stock', 'dl_historial_cambios_producto_stock' );
add_action( 'woocommerce_variation_before_set_stock', 'dl_historial_cambios_producto_stock' );
function dl_historial_cambios_producto_stock( $product ) {
$stock_history = get_post_meta( $product->get_id(), '_stock_history', true ) ? get_post_meta( $product->get_id(), '_stock_history', true ) : array();
$stock_history[time()] = (int)get_post_meta( $product->get_id(), '_stock', true );
update_post_meta( $product->get_id(), '_stock_history', $stock_history );
}
add_action( 'add_meta_boxes', 'dl_product_meta_box' );
function dl_product_meta_box() {
add_meta_box( 'stock_history', 'Historial de cambios de inventario', 'dl_display_stock_history', 'product', 'advanced', 'high' );
}
function dl_display_stock_history() {
global $post;
$product = wc_get_product( $post->ID );
if ( $product->get_type() == 'variable' ) {
foreach ( $product->get_available_variations() as $key ) {
$products[] = $key['variation_id'];
}
} else $products[] = $post->ID;
foreach ( $products as $product_id ) {
$product = wc_get_product( $product_id );
echo '<h3>' . $product->get_name() . '</h3>';
$stock_history = get_post_meta( $product_id, '_stock_history', true );
if ( $stock_history ) {
foreach ( $stock_history as $timestamp => $stockvalue ) {
if ( ! $stockvalue ) continue;
echo '<p>' . date( DATE_COOKIE, $timestamp ) . ': <b>' . $stockvalue . '</b></p>';
}
};
echo '<p>Stock actual: <b>' . $product->get_stock_quantity() . '</b></p>';
}
}
Código adaptado de BusinessBloomer
Recurda que debes añadirlo al fichero functions.php de tu Child Theme o bien a tu plugin de funcionalidades como explico aquí. Una vez añadido, dentro de cada producto podremos ver los 10 últimos cambios que ha sufrido el producto(para no saturar la base de datos):

Como podéis ver algo muy sencillo y simple. Si necesitamos algo más avanzado mi recomendación es:
Stock Manager for WooCommerce
Este plugin ya lo he explicado en otros tutoriales, pero no para la función del historial de inventario. Lo podéis descargar de forma gratuita desde el repositorio de WordPress o desde este enlace. Una vez instalado en el menú principal del administrador de WordPress encontraremos una pestaña de gestión de inventario o existencias. Dentro de ese menú encontraremos «Registro de inventario».

Una vez dentro hay un listado con todos los productos de la tienda online. En la parte de la derecha, podremos ver un botón de historial:

Al hacer clic en historial, encontraremos igual que con el código, los logs de cambios con la hora y stock:

Conclusiones
Si necesitas también hacer grandes cambios de inventario, te recomiendo usar el plugin, puesto que te servirá para realizar estos cambios y ver el historial. Si no, utiliza el código para algo puntual.
Cualquier duda sobre el tutorial te leo en comentarios y para dudas avanzadas o consultas tienes mi servicio de consultoría o mantenimiento.
Saludos Diego, como podría mostrar también la cantidad que que se resto o se sumo? con el código PHP