Avisos
Vaciar todo

Fecha de Reposición (2)  

 
Antonio
 Antonio
Estimable Member

Buenos días

Al hilo del otro ticket que está cerrado, abro éste para solicitar ayuda nuevamente.

Os comento, hace unas semanas, Pepe, me envío un código para poder poner la fecha estimada de reposición de productos.

Obviamente, está funcionando perfectamente pero con la incidencia de que en productos variables no aparece, tampoco el campo para indicar la fecha de reposición.

Lógicamente, el principal no se altera, tan sólo se actualizan las variaciones (stock y/o precios).

 

Os pongo enlaces para que veáis:
 - Productos individuales :  https://clon.tsaco.es/intenso-lapiz-usb-office-line-32gb-usb-a-3-2   o https://clon.tsaco.es/msi-ventus-geforce-rtx-5080-16g-3x-oc-plus-gddr7

 - Producto variable : https://clon.tsaco.es/cougar-ranger-elite-sillon-gaming   

 (el enlace corresponde al clon que tenemos para hacer pruebas).

 

Quedo pendiente.

Contenido solo visible a usuarios registrados

Citar
Respondido : 10/07/2025 7:09 am
Pepe
 Pepe
Soporte CMS Webempresa Admin

Hola Antonio.

Esto igual se complica un poco mas pero bueno vamos a ver si podemos solucionarlo.

Añade lo siguiente al plugin de fragmentos de código:

// 1. Mostrar campo de fecha de reposición en cada variación (admin)
add_action('woocommerce_variation_options_pricing', 'we_mostrar_fecha_reposicion_variacion', 10, 3);
function we_mostrar_fecha_reposicion_variacion($loop, $variation_data, $variation) {
woocommerce_wp_text_input([
'id' => 'fecha_reposicion_' . $loop,
'name' => 'fecha_reposicion[' . $loop . ']',
'value' => get_post_meta($variation->ID, '_fecha_reposicion', true),
'label' => __('Fecha de reposición', 'woocommerce'),
'desc_tip' => true,
'description' => __('Fecha estimada de reposición (formato: YYYY-MM-DD)', 'woocommerce'),
'type' => 'date'
]);
}

// 2. Guardar el campo de fecha al guardar la variación
add_action('woocommerce_save_product_variation', 'we_guardar_fecha_reposicion_variacion', 10, 2);
function we_guardar_fecha_reposicion_variacion($variation_id, $i) {
if (isset($_POST['fecha_reposicion'][$i])) {
update_post_meta($variation_id, '_fecha_reposicion', sanitize_text_field($_POST['fecha_reposicion'][$i]));
}
}

// 3. Mostrar la fecha de reposición en el frontend si la variación está agotada (formato en español)
add_action('woocommerce_single_product_summary', 'we_mostrar_fecha_reposicion_frontend', 25);
function we_mostrar_fecha_reposicion_frontend() {
global $product;

if (!$product->is_type('variable')) return;

?>
<div id="mensaje-fecha-reposicion" style="margin-top: 10px;"></div>
<script>
jQuery(document).ready(function($) {
const formularioVariaciones = $('form.variations_form');
formularioVariaciones.on('found_variation', function(event, variation) {
const $mensajeDiv = $('#mensaje-fecha-reposicion');
const hayStock = variation.is_in_stock;
const fechaReposicion = variation.fecha_reposicion;

if (!hayStock && fechaReposicion) {
const meses = ['enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio',
'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre'];
const partes = fechaReposicion.split('-');
const fechaFormateada = `${parseInt(partes[2])} de ${meses[parseInt(partes[1]) - 1]} de ${partes[0]}`;
$mensajeDiv.html('<strong>Fecha estimada de reposición:</strong> ' + fechaFormateada);
} else {
$mensajeDiv.html('');
}
});
});
</script>
<?php
}

// 4. Añadir la fecha de reposición a los datos de variación que WooCommerce pasa al frontend
add_filter('woocommerce_available_variation', 'we_agregar_fecha_reposicion_a_variacion');
function we_agregar_fecha_reposicion_a_variacion($datos_variacion) {
$fecha = get_post_meta($datos_variacion['variation_id'], '_fecha_reposicion', true);
$datos_variacion['fecha_reposicion'] = $fecha;
return $datos_variacion;
}

 

Si editas una variación de un producto podrás ver que hay un nuevo campo para añadir la fecha de reposición de ese producto.

 

Un Saludo

ResponderCitar
Respondido : 10/07/2025 11:55 am

Antonio
 Antonio
Estimable Member

@pepesoler, buenos días

 

Lamento ver que se nos complica el tema, por eso era saber si había algún plugin que hiciera lo que queremos.

 

En el código anterior que me pasaste el meta era "fecha_reposicion" y ahora me indicas "_fecha_reposicion"; si lo cambio daría algún problema?

El anterior código es:

// Muestra la fecha de reposición solo si el producto está agotado
add_action('woocommerce_single_product_summary', 'we_mostrar_fecha_reposicion_producto', 25);
function we_mostrar_fecha_reposicion_producto() {
global $post, $product;

if ( ! $product->is_in_stock() ) {
$fecha = get_field('fecha_reposicion', $post->ID);
if ($fecha) {
echo '<p class="mastock"><strong>Fecha estimada de reposición:</strong> ' . date_i18n('d/m/Y', strtotime($fecha)) . '</p>';
}
}
}
// Muestra la fecha de reposición en la tienda, solo si el producto está agotado
add_action('woocommerce_after_shop_loop_item_title', 'we_mostrar_fecha_reposicion_en_loop', 15);
function we_mostrar_fecha_reposicion_en_loop() {
global $product, $post;

if ( ! $product->is_in_stock() ) {
$fecha = get_field('fecha_reposicion', $post->ID);
if ($fecha) {
echo '<p class="mastock fecha-reposicion-loop">Reposición: ' . date_i18n('d/m/Y', strtotime($fecha)) . '</p>';
}
}
}
// Muestra la fecha de reposición en el checkout para productos agotados
add_action('woocommerce_checkout_after_order_review', 'we_mostrar_fechas_reposicion_en_checkout');

function we_mostrar_fechas_reposicion_en_checkout() {
echo '<div class="fecha-reposicion-checkout" style="margin-top: 20px;">';

foreach (WC()->cart->get_cart() as $cart_item) {
$product = $cart_item['data'];
$product_id = $product->get_id();

if ( ! $product->is_in_stock() ) {
$fecha = get_field('fecha_reposicion', $product_id);
if ($fecha) {
$nombre = $product->get_name();
$fecha_formateada = date_i18n('d/m/Y', strtotime($fecha));
echo '<p class="mastock"><strong>' . esc_html($nombre) . '</strong><br>Fecha estimada de reposición: ' . esc_html($fecha_formateada) . '</p>';
}
}
}

echo '</div>';
}

ResponderCitar
Respondido : 11/07/2025 7:01 am
Pepe
 Pepe
Soporte CMS Webempresa Admin

Hola Antonio.

Son dos cosas distintas, no tienes que eliminar el anterior, el de antes lo utilizas para los productos padre y este ultimo seria para las variaciones, tienes que mantener los dos.

 

Un saludo 

ResponderCitar
Respondido : 11/07/2025 9:26 am

wpdoctor-revisa-la-salud-de-tu-wordpress

Antonio
 Antonio
Estimable Member

@pepesoler, vaaale, pero como se me crean dos "metas diferentes" y con diferente formato  (20250711 ó 11/07/2025), pues por eso consulto.

 

Vale, veré como lo hago para subir con los csv.

Esta publicación ha sido modificada el hace 2 meses por Antonio
ResponderCitar
Respondido : 11/07/2025 11:43 am
Pepe
 Pepe
Soporte CMS Webempresa Admin

Hola Antonio.

Ok, dejo el hilo abierto por si necesitas retomarlo.

 

Un Saludo

ResponderCitar
Respondido : 11/07/2025 11:50 am

Gestor de Contraseñas - VPN Conexión Segura - Gestor 2FA (Segundo Factor de Autenticación