'_precio_dinamico_inicial', 'label' => __('Precio Inicial para Dinámico', 'woocommerce'), 'desc_tip' => 'true', 'description' => __('Introduce el precio inicial para el descuento dinámico.', 'woocommerce'), 'type' => 'number', 'custom_attributes' => array('step' => 'any') )); // Agregar campo para el precio mínimo woocommerce_wp_text_input( array( 'id' => '_precio_dinamico_minimo', 'label' => __('Precio Mínimo para Dinámico', 'woocommerce'), 'desc_tip' => 'true', 'description' => __('Introduce el precio mínimo al que puede bajar.', 'woocommerce'), 'type' => 'number', 'custom_attributes' => array('step' => 'any') )); // Agregar campo para el descuento por segundo woocommerce_wp_text_input( array( 'id' => '_descuento_por_segundo', 'label' => __('Descuento por Segundo', 'woocommerce'), 'desc_tip' => 'true', 'description' => __('Introduce la cantidad que baja el precio por segundo.', 'woocommerce'), 'type' => 'number', 'custom_attributes' => array('step' => 'any') )); } // Guardar los valores de los campos personalizados add_action('woocommerce_process_product_meta', 'guardar_campos_personalizados_precio_dinamico'); function guardar_campos_personalizados_precio_dinamico($post_id) { // Obtener y guardar el precio inicial $precio_inicial = isset($_POST['_precio_dinamico_inicial']) ? sanitize_text_field($_POST['_precio_dinamico_inicial']) : ''; update_post_meta($post_id, '_precio_dinamico_inicial', $precio_inicial); // Obtener y guardar el precio mínimo $precio_minimo = isset($_POST['_precio_dinamico_minimo']) ? sanitize_text_field($_POST['_precio_dinamico_minimo']) : ''; update_post_meta($post_id, '_precio_dinamico_minimo', $precio_minimo); // Obtener y guardar el descuento por segundo $descuento_por_segundo = isset($_POST['_descuento_por_segundo']) ? sanitize_text_field($_POST['_descuento_por_segundo']) : ''; update_post_meta($post_id, '_descuento_por_segundo', $descuento_por_segundo); } // Aplicar el precio dinámico al producto add_filter('woocommerce_get_price_html', 'precio_dinamico_ciclo_personalizado', 10, 2); function precio_dinamico_ciclo_personalizado($precio, $producto) { // Verificar si el precio dinámico está activado para este producto $precio_dinamico_activado = get_post_meta($producto->get_id(), '_precio_dinamico_activado', true); if ($precio_dinamico_activado === 'yes') { // Obtener los valores personalizados $precio_inicial = get_post_meta($producto->get_id(), '_precio_dinamico_inicial', true); $precio_minimo = get_post_meta($producto->get_id(), '_precio_dinamico_minimo', true); $descuento_por_segundo = get_post_meta($producto->get_id(), '_descuento_por_segundo', true); // Valor por defecto si no se establecieron $precio_inicial = $precio_inicial ? $precio_inicial : $producto->get_regular_price(); $precio_minimo = $precio_minimo ? $precio_minimo : 10; $descuento_por_segundo = $descuento_por_segundo ? $descuento_por_segundo : 0.001; // Obtener el tiempo de inicio desde el custom field del producto $tiempo_inicio = get_post_meta($producto->get_id(), '_tiempo_inicio_descuento', true); if (!$tiempo_inicio) { $tiempo_inicio = time(); // Si no existe, inicializar con la hora actual update_post_meta($producto->get_id(), '_tiempo_inicio_descuento', $tiempo_inicio); } $tiempo_actual = time(); // Hora actual $nuevo_precio = $precio_inicial - (($tiempo_actual - $tiempo_inicio) * $descuento_por_segundo); // Si el precio ha llegado al mínimo, reiniciar al precio inicial y el tiempo if ($nuevo_precio <= $precio_minimo) { $nuevo_precio = $precio_inicial; $tiempo_inicio = time(); // Reiniciar el tiempo de descuento update_post_meta($producto->get_id(), '_tiempo_inicio_descuento', $tiempo_inicio); } // Actualizar el precio del producto $producto->set_price($nuevo_precio); return wc_price($nuevo_precio); } // Si el precio dinámico no está activado, devuelve el precio normal return $precio; }

bundle

Showing the single result

Carrito de compra