Automattic\WooCommerce\Internal\TransientFiles
TransientFilesEngine::delete_expired_files
Delete expired transient files from the filesystem.
Method of the class: TransientFilesEngine{}
No Hooks.
Returns
Array. "deleted_count" with the number of files actually deleted, "files_remain" that will be true if there are still files left to delete.
Usage
$TransientFilesEngine = new TransientFilesEngine(); $TransientFilesEngine->delete_expired_files( $limit ): array;
- $limit(int)
- Maximum number of files to delete.
Default: 1000
TransientFilesEngine::delete_expired_files() TransientFilesEngine::delete expired files code WC 10.3.5
public function delete_expired_files( int $limit = 1000 ): array {
$expiration_date_gmt = $this->legacy_proxy->call_function( 'gmdate', 'Y-m-d' );
$base_dir = $this->get_transient_files_directory();
$subdirs = glob( $base_dir . '/[2-9][0-9][0-9][0-9]-[01][0-9]-[0-3][0-9]', GLOB_ONLYDIR );
if ( false === $subdirs ) {
throw new Exception( "Error when getting the list of subdirectories of $base_dir" );
}
$subdirs = array_map( fn( $name ) => substr( $name, strlen( $name ) - 10, 10 ), $subdirs );
$expired_subdirs = array_filter( $subdirs, fn( $name ) => $name < $expiration_date_gmt );
asort( $subdirs ); // We want to delete files starting with the oldest expiration month.
$remaining_limit = $limit;
$limit_reached = false;
foreach ( $expired_subdirs as $subdir ) {
$full_dir_path = $base_dir . '/' . $subdir;
$files_to_delete = glob( $full_dir_path . '/*' );
if ( count( $files_to_delete ) > $remaining_limit ) {
$limit_reached = true;
$files_to_delete = array_slice( $files_to_delete, 0, $remaining_limit );
}
array_map( 'wp_delete_file', $files_to_delete );
$remaining_limit -= count( $files_to_delete );
$this->delete_directory_if_not_empty( $full_dir_path );
if ( $limit_reached ) {
break;
}
}
return array(
'deleted_count' => $limit - $remaining_limit,
'files_remain' => $limit_reached,
);
}