Hoy toca mostrar un par de sencillos ejemplo para modificar el texto agotado en WooCommerce que aparecen en los productos cuando un producto está agotado o cuando mostramos la disponibilidad de los mismos.
Lo vamos a hacer de 2 maneras personalizando los filtros disponibles llamados woocommerce_get_availability y el woocommerce_get_availability_text, de forma que depende de lo que necesitemos hacer, podemos usar uno u otro haciendo esto un poco más complejo y mostrar el texto que necesitemos mostrar junto a un producto, dependiendo de si un producto está o no en stock o si está disponible para pedirlo, lo que necesites que aparezca.
Por defecto, en las traducciones al español nos va a mostrar el texto «Agotado», pero puede que queramos modificarlo para por ejemplo mostrar el texto «Bajo pedido».
Para realizar esto vamos a añadir el código php a nuestro fichero functions.php que tengamos activo en nuestra instalación (muy recomendable hacerlo con un tema hijo).
Filtro woocommerce_get_availability
add_filter( 'woocommerce_get_availability', 'wc_cambiar_texto_producto_agotado', 1, 2);
function wc_cambiar_texto_producto_agotado( $availability, $_product )
{
// Código que muestra el texto si el producto está disponible
if ( $_product->is_in_stock() )
{
// En este caso no vamos a mostrar ningún texto
//$availability['availability'] = __('Available!', 'woocommerce');
}
// Código para cambiar el texto si el producto no está en stock
if ( ! $_product->is_in_stock() )
{
$availability['availability'] = __('Bajo pedido', 'woocommerce');
}
return $availability;
}
Una vez guardado el fichero, nuestro WordPress con WooCommerce mostrará automáticamente el nuevo mensaje, que en nuestro ejemplo es «Bajo pedido».
Filtro woocommerce_get_availability_text
add_filter( 'woocommerce_get_availability_text', 'customizing_stock_availability_text', 1, 2);
function customizing_stock_availability_text( $availability, $product ) {
if ( ! $product->is_in_stock() ) {
$availability = __( 'Sold Out', 'woocommerce' );
}
elseif ( $product->managing_stock() && $product->is_on_backorder( 1 ) )
{
$availability = $product->backorders_require_notification() ? __( 'Available on backorder', 'woocommerce' ) : '';
}
elseif ( $product->managing_stock() )
{
$availability = __( 'Available!', 'woocommerce' );
$stock_amount = $product->get_stock_quantity();
switch ( get_option( 'woocommerce_stock_format' ) ) {
case 'low_amount' :
if ( $stock_amount <= get_option( 'woocommerce_notify_low_stock_amount' ) ) {
/* translators: %s: stock amount */
$availability = sprintf( __( 'pocas unidades %s Disponibles!', 'woocommerce' ), wc_format_stock_quantity_for_display( $stock_amount, $product ) );
}
break;
case '' :
/* translators: %s: stock amount */
$availability = sprintf( __( '%s Disponibles!', 'woocommerce' ), wc_format_stock_quantity_for_display( $stock_amount, $product ) );
break;
}
if ( $product->backorders_allowed() && $product->backorders_require_notification() ) {
$availability .= ' ' . __( '(puede pedirse)', 'woocommerce' );
}
}
else
{
$availability = '';
}
return $availability;
}
Como vemos el uso de un filtro u otro va a depender de las necesidades de personalización que tengamos de los mensajes de stock que salen junto a los productos en Woocommerce.