WC_Download_Handler::track_download()
Takes care of tracking download requests, with support for deferring tracking in the case of partial (ranged request) downloads.
Method of the class: WC_Download_Handler{}
Hooks from the method
Return
null
. Nothing (null).
Usage
$result = WC_Download_Handler::track_download( $download, $user_id, $user_ip_address, $defer ): void;
- $download(WC_Customer_Download|int) (required)
- The download to be tracked.
- $user_id(int|null)
- The user ID, if known.
Default: null - $user_ip_address(string|null)
- The download IP address, if known.
Default: null - $defer(true|false)
- If tracking the download should be deferred.
Default: false
WC_Download_Handler::track_download() WC Download Handler::track download code WC 9.4.2
private static function track_download( $download, $user_id = null, $user_ip_address = null, bool $defer = false ): void { try { // If we were supplied with an integer, convert it to a download object. $download = new WC_Customer_Download( $download ); // In simple cases, we can track the download immediately. if ( ! $defer ) { $download->track_download( $user_id, $user_ip_address ); return; } // Counting of partial downloads may be disabled by the site operator. if ( get_option( 'woocommerce_downloads_count_partial', 'yes' ) !== 'yes' ) { return; } /** * Determines how long the window of time is for tracking unique download attempts, in relation to * partial (ranged) download requests. * * @since 9.2.0 * * @param int $window_in_seconds Non-negative number of seconds. Defaults to 1800 (30 minutes). * @param int $download_permission_id References the download permission being tracked. */ $window = absint( apply_filters( 'woocommerce_partial_download_tracking_window', 30 * MINUTE_IN_SECONDS, $download->get_id() ) ); // If we do not have Action Scheduler 3.6.0+ (this would be an unexpected scenario) then we cannot // track partial downloads, because we require support for unique actions. if ( version_compare( ActionScheduler_Versions::instance()->latest_version(), '3.6.0', '<' ) ) { throw new Exception( 'Support for unique scheduled actions is not currently available.' ); } as_schedule_single_action( time() + $window, self::TRACK_DOWNLOAD_CALLBACK, array( $download->get_id(), $user_id, $user_ip_address, ), 'woocommerce', true ); } catch ( Exception $e ) { wc_get_logger()->error( 'There was a problem while tracking a product download.', array( 'error' => $e->getMessage(), 'id' => $download->get_id(), 'user_id' => $user_id, 'ip' => $user_ip_address, 'deferred' => $defer ? 'yes' : 'no', ) ); } }