Imagify Optimization & Filter Hooks

This reference guide covers the filter hooks available in Imagify to customize media optimization behavior. You can add these code snippets to a custom plugin or your active child theme’s functions.php file.

1. imagify_get_mime_types

Modifies the array of MIME types supported by Imagify. Unsetting a MIME type here completely removes support for that format plugin-wide across all Imagify workflows (including Media Library eligibility displays, statistics, and optimization runs).

Important Notes:

  • Unsetting a MIME type will not un-optimize or restore files of that type that were already optimized in the past.
  • This filter runs on different media contexts (images, PDFs, or both). Always use unset() to remove a specific format instead of returning a new fixed array.

Parameters

  • array $mimes — Array of supported extensions and MIME types.

Code Example

/**
 * Prevent Imagify from supporting GIF files site-wide.
 */
add_filter( 'imagify_get_mime_types', function( $mimes ) {
	// Remove specific format: 'gif', 'pdf', 'png', 'jpg'
	unset( $mimes['gif'] );

	return $mimes;
} );

2. imagify_auto_optimize_attachment

Triggers during new media uploads in WordPress. Controls whether Imagify automatically optimizes the attachment upon upload.

Parameters

  • bool $optimize — Whether to optimize the attachment. Default: true.
  • int $attachment_id — The WordPress attachment ID.
  • array $metadata — Attachment metadata array.

Code Example

/**
 * Skip automatic optimization on upload for specific MIME types.
 */
add_filter( 'imagify_auto_optimize_attachment', function( $optimize, $attachment_id, $metadata ) {
	// Replace 'image/gif' with target MIME type (e.g., 'image/png', 'application/pdf')
	if ( 'image/gif' === get_post_mime_type( $attachment_id ) ) {
		return false;
	}

	return $optimize;
}, 10, 3 );

3. imagify_bulk_optimize_media

Triggers during Bulk Optimization runs. Allows excluding specific media items, paths, or formats from the bulk optimization queue without affecting auto-upload behavior.

Important Notes:

  • This filter only applies to the bulk Optimization process. It does not affect Bulk Restore or “Generate Missing Next-Gen Images” runs.
  • The total “X media to optimize” count displayed on the Bulk Optimization page is calculated separately, so excluded items will still be included in the displayed total count.

Parameters

  • bool $optimize — Whether to optimize this item. Default: true.
  • int $media_id — The media item ID (attachment ID or custom folder file ID).
  • string $context — Optimization context ('wp' or 'custom-folders').
  • int $optimization_level — Selected optimization level (0 = Normal, 1 = Aggressive, 2 = Ultra).

Code Examples

A. Exclude Specific MIME Types from Bulk Run

/**
 * Exclude PDFs from bulk optimization runs.
 */
add_filter( 'imagify_bulk_optimize_media', function( $optimize, $media_id, $context ) {
	// Replace 'application/pdf' with target MIME type
	if ( 'wp' === $context && 'application/pdf' === get_post_mime_type( $media_id ) ) {
		return false;
	}

	return $optimize;
}, 10, 3 );

B. Exclude Media Uploaded Before a Specific Date

/**
 * Exclude media items uploaded before a specific date during bulk runs.
 */
add_filter( 'imagify_bulk_optimize_media', function( $optimize, $media_id, $context ) {
	if ( 'wp' === $context ) {
		$cutoff_date = '2025-01-01';
		$upload_date = get_the_date( 'Y-m-d', $media_id );

		if ( $upload_date && $upload_date < $cutoff_date ) {
			return false;
		}
	}

	return $optimize;
}, 10, 3 );

C. Exclude Media by Specific Folder or File Path

/**
 * Exclude media items stored in a specific folder path during bulk runs.
 */
add_filter( 'imagify_bulk_optimize_media', function( $optimize, $media_id, $context ) {
	if ( 'wp' === $context ) {
		$file_path = get_attached_file( $media_id );

		// Skip media located inside a specific subfolder (e.g., /uploads/2019/ or /uploads/elementor/)
		if ( $file_path && false !== strpos( $file_path, '/uploads/2019/' ) ) {
			return false;
		}
	}

	return $optimize;
}, 10, 3 );
Was this guide helpful? :) Great! Glad we could help! Thanks for your feedback
Great! Glad we could help!

Your feedback has been sent to our team We value every bit of feedback we receive as it helps us to improve our products and services. Thank you for your time.