Using WordPress ‘pre_wp_filesize’ PHP filter

The ‘pre_wp_filesize’ filter allows you to modify the result of the wp_filesize function before the PHP function is executed.

You can use this filter to bypass the filesize call by returning an integer value.

Usage

To use this filter, add the following code to your theme’s functions.php file or a custom plugin:

add_filter( 'pre_wp_filesize', 'your_function_name', 10, 2 );
function your_custom_function( $size, $path ) { 
// Your custom code here 
}

Parameters

  • $size (null|int): The unfiltered value. Returning an int from the callback bypasses the filesize call.
  • $path (string): Path to the file.

Examples

Set a custom file size limit

Scenario: Set a custom file size limit for uploaded images to 1MB.

add_filter( 'pre_wp_filesize', 'custom_filesize_limit', 10, 2 );

function custom_filesize_limit( $size, $path ) {
    // Define the maximum allowed file size in bytes (1MB)
    $max_size = 1024 * 1024;

    // Check if the file is an image
    if ( strpos( mime_content_type( $path ), 'image' ) === 0 ) {
        $filesize = filesize( $path );

        // If the image size is larger than the allowed size, set the size to the maximum allowed size
        if ( $filesize > $max_size ) {
            return $max_size;
        }
    }

    // Return the unfiltered value if the file is not an image or is within the allowed size
    return $size;
}

What does the code do?

This code sets a custom file size limit for uploaded images to 1MB. If the image size is larger than the allowed size, it sets the size to the maximum allowed size. If the file is not an image or is within the allowed size, it returns the unfiltered value.

Bypass the filesize call for specific file types

Scenario: Bypass the filesize call for .txt files.

add_filter( 'pre_wp_filesize', 'bypass_filesize_for_txt_files', 10, 2 );

function bypass_filesize_for_txt_files( $size, $path ) {
    // Check if the file is a .txt file
    if ( pathinfo( $path, PATHINFO_EXTENSION ) === 'txt' ) {
        // Bypass the filesize call by returning an arbitrary value
        return 12345;
    }

    // Return the unfiltered value for other file types
    return $size;
}

What does the code do?

This code checks if the file is a .txt file. If it is, it bypasses the filesize call by returning an arbitrary value. If the file is not a .txt file, it returns the unfiltered value.

Set a default file size for missing files

Scenario: Set a default file size for files that do not exist on the server.

add_filter( 'pre_wp_filesize', 'default_filesize_for_missing_files', 10, 2 );

function default_filesize_for_missing_files( $size, $path ) {
    // Check if the file does not exist
    if ( !file_exists( $path ) ) {
        // Set a default file size of 0 for missing files
        return 0;
    }

    // Return the unfiltered value for existing files
    return $size;
}

Multiply file sizes by a factor

Scenario: Multiply the file sizes of all .pdf files by a factor of 2.

add_filter( 'pre_wp_filesize', 'multiply_pdf_filesize', 10, 2 );

function multiply_pdf_filesize( $size, $path ) {
    // Check if the file is a .pdf file
    if ( pathinfo( $path, PATHINFO_EXTENSION ) === 'pdf' ) {
        // Get the actual file size
        $actual_size = filesize( $path );

        // Multiply the file size by 2
        return $actual_size * 2;
    }

    // Return the unfiltered value for other file types
    return $size;
}

What does the code do?

This code checks if the file is a .pdf file. If it is, it multiplies the file size by a factor of 2. If the file is not a .pdf file, it returns the unfiltered value.

Limit file size for audio files

Scenario: Limit the file size of audio files to 5MB.

add_filter( 'pre_wp_filesize', 'limit_audio_filesize', 10, 2 );

function limit_audio_filesize( $size, $path ) {
    // Define the maximum allowed file size in bytes (5MB)
    $max_size = 5 * 1024 * 1024;

    // Check if the file is an audio file
    if ( strpos( mime_content_type( $path ), 'audio' ) === 0 ) {
        $filesize = filesize( $path );

        // If the audio file size is larger than the allowed size, set the size to the maximum allowed size
        if ( $filesize > $max_size ) {
            return $max_size;
        }
    }

    // Return the unfiltered value if the file is not an audio file or is within the allowed size
    return $size;
}

What does the code do?

This code limits the file size of audio files to 5MB. If the audio file size is larger than the allowed size, it sets the size to the maximum allowed size. If the file is not an audio file or is within the allowed size, it returns the unfiltered value.