// Ensure lazy loading and adaptive delivery
$upload['smushit_lazy'] = true;
// Generate responsive image sizes (WordPress style)
$sizes = array('thumbnail' => 150, 'medium' => 300, 'large' => 1024);
$responsive = array();
foreach ($sizes as $label => $width) {
if ($image_info && isset($image_info[0]) && $image_info[0] > $width) {
$resized_path = preg_replace('/\.[^.]+$/', '-' . $label . '.$0', $image_path);
if (function_exists('imagecreatetruecolor')) {
switch ($mime) {
case 'image/jpeg': $src = imagecreatefromjpeg($image_path); break;
case 'image/png': $src = imagecreatefrompng($image_path); break;
case 'image/gif': $src = imagecreatefromgif($image_path); break;
default: $src = null;
}
if ($src) {
$height = intval($width * $image_info[1] / $image_info[0]);
$dst = imagecreatetruecolor($width, $height);
imagecopyresampled($dst, $src, 0, 0, 0, 0, $width, $height, $image_info[0], $image_info[1]);
switch ($mime) {
case 'image/jpeg': imagejpeg($dst, $resized_path); break;
case 'image/png': imagepng($dst, $resized_path); break;
case 'image/gif': imagegif($dst, $resized_path); break;
}
$responsive[$label] = $resized_path;
imagedestroy($src);
imagedestroy($dst);
}
}
}
}
if (!empty($responsive)) {
$upload['smushit_responsive'] = $responsive;
}
// Admin page for manual bulk optimization
add_action('admin_menu', function() {
add_management_page(
'SmushIt Bulk Optimization',
'SmushIt Bulk Optimization',
'manage_options',
'smushit-bulk-opt',
function() {
echo '
SmushIt Bulk Optimization
';
if (isset($_POST['smushit_bulk_optimize'])) {
// Run bulk optimization
$upload_dir = wp_upload_dir();
$base_dir = $upload_dir['basedir'];
$image_mime_types = array('jpg', 'jpeg', 'png', 'gif');
$images = array();
$rii = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($base_dir));
foreach ($rii as $file) {
if ($file->isDir()) continue;
$ext = strtolower(pathinfo($file->getFilename(), PATHINFO_EXTENSION));
if (in_array($ext, $image_mime_types, true)) {
$images[] = array('file' => $file->getPathname(), 'type' => 'image/' . ($ext === 'jpg' ? 'jpeg' : $ext));
}
}
do_action('smushit_batch_optimize', $images);
echo '
Bulk optimization triggered!
';
}
echo '
';
}
);
});
// Scaffold: Batch/background image optimization via WP Cron
add_action( 'smushit_batch_optimize', function( $uploads ) {
foreach ( $uploads as $upload ) {
smushit_optimize_uploaded_image( $upload );
}
} );
if ( ! function_exists( 'register_activation_hook' ) ) {
function register_activation_hook( $file, $callback ) {}
}
if ( ! function_exists( 'register_deactivation_hook' ) ) {
function register_deactivation_hook( $file, $callback ) {}
}
// Plugin activation hook
register_activation_hook( __FILE__, function() {
// Schedule cron event for future bulk optimization
if ( ! wp_next_scheduled( 'smushit_cron_bulk_optimize' ) ) {
wp_schedule_event( time() + 300, 'daily', 'smushit_cron_bulk_optimize' );
}
// Bulk optimize all existing images in uploads directory
$upload_dir = wp_upload_dir();
$base_dir = $upload_dir['basedir'];
$image_mime_types = array( 'jpg', 'jpeg', 'png', 'gif' );
$images = array();
$rii = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($base_dir));
foreach ($rii as $file) {
if ($file->isDir()) continue;
$ext = strtolower(pathinfo($file->getFilename(), PATHINFO_EXTENSION));
if (in_array($ext, $image_mime_types, true)) {
$images[] = array('file' => $file->getPathname(), 'type' => 'image/' . ($ext === 'jpg' ? 'jpeg' : $ext));
}
}
do_action('smushit_batch_optimize', $images);
} );
// Plugin deactivation hook
register_deactivation_hook( __FILE__, function() {
// Remove scheduled cron event
wp_clear_scheduled_hook( 'smushit_cron_bulk_optimize' );
// Cron event handler for scheduled bulk optimization
add_action('smushit_cron_bulk_optimize', function() {
$upload_dir = wp_upload_dir();
$base_dir = $upload_dir['basedir'];
$image_mime_types = array('jpg', 'jpeg', 'png', 'gif');
$images = array();
$rii = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($base_dir));
foreach ($rii as $file) {
if ($file->isDir()) continue;
$ext = strtolower(pathinfo($file->getFilename(), PATHINFO_EXTENSION));
if (in_array($ext, $image_mime_types, true)) {
$images[] = array('file' => $file->getPathname(), 'type' => 'image/' . ($ext === 'jpg' ? 'jpeg' : $ext));
}
}
do_action('smushit_batch_optimize', $images);
});
// Cleanup tasks (e.g., flush rewrite rules, remove options)
} );