Hola como estan?
Quiero colocar como limite de tiempo de descarga 12 horas a mis publicaciones descargables que son publicaciones diarias y tienen un costo, ya que en las opciones solo me dice como minimo 1 dia, y si lo compran un dia 23 la caducidad incluye el dia 24, y quisiera que solo fuera el mismo dia, que de querer la publicacion al dia siguiente deba efectuar una nueva compra.
No se si es con algun plugins o como podria solucionar esto.
Saludos
Contenido solo visible a usuarios registrados
Hola Maria,
En este caso no veo una opción sencilla de añadir esta tipo depersonalización, puedes revisar si el siguiente codigo de debes añadir en el function.php de tu tema o un plugin como code sippets te permite implementar lo que necesitas
// Agregar campo de expiración de descarga en la página de edición de productos
function agregar_campo_expiracion_descarga() {
global $post, $woocommerce;
echo '<div class="options_group">';
// Campo de entrada para la expiración de descarga
woocommerce_wp_text_input(
array(
'id' => '_download_expiry',
'label' => __('Descarga Expiración (en horas)', 'woocommerce'),
'description' => __('Especifica la duración de la expiración de la descarga en horas.', 'woocommerce'),
'desc_tip' => true,
'type' => 'number',
'custom_attributes' => array(
'step' => 'any',
'min' => '0'
)
)
);
echo '</div>';
}
add_action('woocommerce_product_options_general_product_data', 'agregar_campo_expiracion_descarga');
// Guardar el valor del campo de expiración de descarga
function guardar_expiracion_descarga($product_id) {
$descarga_expiracion = isset($_POST['_download_expiry']) ? $_POST['_download_expiry'] : '';
if (!empty($descarga_expiracion)) {
update_post_meta($product_id, '_download_expiry', esc_attr($descarga_expiracion));
}
}
add_action('woocommerce_process_product_meta', 'guardar_expiracion_descarga', 10, 1);
// Definir la expiración de descarga para productos virtuales
function definir_expiracion_descarga($downloads, $product) {
if ($product->is_virtual() && $product->get_downloadable()) {
$expiracion = get_post_meta($product->get_id(), '_download_expiry', true);
if (!empty($expiracion)) {
$downloads['expiry'] = array(
'value' => $expiracion * 60 * 60, // Convertir horas a segundos
'unit' => 'seconds'
);
}
}
return $downloads;
}
add_filter('woocommerce_file_download_method', 'definir_expiracion_descarga', 10, 2);
Esto debería agregar un campo adicional en los productos virtuales como
Si con ello no funciona, ya que como te comento es una personalización muy específica te recomiendo consultes con nuestro directorio de colaboradores quienes pueden ayudarte a añadir lo que necesitas.
Un Saludo
Gracias, si lo acabo de colocar pero no se si puedas ayudarme que en lugar que me aparezca en prudcto general me aparezca en variaciones del producto que es donde me aparece la caducidad por defecto de woocomerce.
Gracias nuevamente
Hola Maria,
En este caso puedes probar con el siguiente código, debes comprobar funciona como necesitas de lo contrario te recomiendo consultes con nuestro directorio de colaboradores quienes pueden ayudarte a añadir lo que necesitas.
// Add download expiration field on variable products edit page
function add_download_expiration_field() {
global $post;
// Get the current product
$product = wc_get_product($post->ID);
if ($product && $product->is_type('variable')) {
echo '<div class="options_group">';
woocommerce_wp_text_input(array(
'id' => '_download_expiry',
'label' => __('Download Expiration (in hours)', 'woocommerce'),
'description' => __('Specify the duration of download expiration in hours.', 'woocommerce'),
'desc_tip' => true,
'type' => 'number',
'custom_attributes' => array(
'step' => 'any',
'min' => '0'
)
));
echo '</div>';
}
}
add_action('woocommerce_product_after_variable_attributes', 'add_download_expiration_field', 10, 3);
// Save download expiration field for variable products
function save_download_expiration_field($post_id) {
$product = wc_get_product($post_id);
if ($product && $product->is_type('variable')) {
$download_expiry = isset($_POST['_download_expiry']) ? $_POST['_download_expiry'] : '';
if (!empty($download_expiry)) {
update_post_meta($post_id, '_download_expiry', esc_attr($download_expiry));
}
}
}
add_action('woocommerce_save_product_variation', 'save_download_expiration_field', 10, 2);
El resultado debe mostrarse un nuevo campo en las variaciones
Un Saludo
Gracias Karen, pero definitivamente no funciona, aunque efectivamente ahora si me aparece en Variables para colocar el numero de horas, no me guarda los cambios ni me ejecuta ninguna limitacion, asumo esta interfiriendo la parte de la expiracion en dias que no se desactiva si coloco horas. Creo que en la funcion se deberia escoger si quieres que la expiricion sea en dias o en horas, pero si ambas estan activas asumo hay choque de instrucciones y prevalece la de dias y la de horas queda sin ningun funcionamiento.
Hola Maria,
En este caso, como te ha comentado Karen es una función muy específica y si con los códigos que tenemos a la mano no logras hacer lo que necesitas ya tendrías que solicitar uno personalizado a medida para tu sitio a nuestros colaboradores:
https://www.webempresa.com/directorio-colaboradores.html
Ellos con gusto podrán crearte uno a medida que funcione para lo que necesitas.
Un saludo 🖐️