PluginProbe
Imagify Image Optimization: Optimize Images | Compress & Convert to WebP/AVIF / trunk
Imagify Image Optimization: Optimize Images | Compress & Convert to WebP/AVIF vtrunk
2.3.4 2.3.3 2.3.2 2.3.1 2.3.0 2.2.9 2.2.8 trunk 1.10 1.3.3 1.3.4 1.3.5 1.3.5.1 1.3.5.2 1.3.6 1.3.6.1 1.4 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.5 All 103 releases
← All changes | inc/common/attachments.php +90 -52 1.3.6.1 → trunk View file →
@@ -1,74 +1,112 @@
1 1 <?php
2 -defined( 'ABSPATH' ) or die( 'Cheatin\' uh?' );
2 +defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );
3 3
4 +add_action( 'delete_attachment', 'imagify_trigger_delete_attachment_hook' );
4 5 /**
5 - * Auto-optimize when a new attachment is generated
6 + * Trigger a common Imagify hook when an attachment is deleted.
6 7 *
7 - * @since 1.0
8 + * @since 1.9
9 + * @author Grégory Viguier
10 + *
11 + * @param int $post_id Attachment ID.
8 12 */
9 -add_filter( 'wp_generate_attachment_metadata', '_imagify_optimize_attachment', PHP_INT_MAX, 2 );
10 -function _imagify_optimize_attachment( $metadata, $attachment_id ) {
11 - $api_key = get_imagify_option( 'api_key', false );
13 +function imagify_trigger_delete_attachment_hook( $post_id ) {
14 + $process = imagify_get_optimization_process( $post_id, 'wp' );
12 15
13 - if ( ! empty( $api_key ) && get_imagify_option( 'auto_optimize', false ) ) {
14 - $attachment = new Imagify_Attachment( $attachment_id );
16 + if ( ! $process->is_valid() ) {
17 + return;
18 + }
15 19
16 - // Optimize it!!!!!
17 - $attachment->optimize( null, $metadata );
20 + imagify_trigger_delete_media_hook( $process );
21 +}
22 +
23 +add_action( 'imagify_delete_media', 'imagify_cleanup_after_media_deletion' );
24 +/**
25 + * Delete the backup file and the next-gen files when an attachement is deleted.
26 + *
27 + * @since 1.9
28 + * @author Grégory Viguier
29 + *
30 + * @param ProcessInterface $process An optimization process.
31 + */
32 +function imagify_cleanup_after_media_deletion( $process ) {
33 + if ( 'wp' !== $process->get_media()->get_context() ) {
34 + return;
18 35 }
19 36
20 - return $metadata;
37 + /**
38 + * The optimization data will be automatically deleted by WP (post metas).
39 + * Delete the Nextgen versions and the backup file.
40 + */
41 + $process->delete_nextgen_files( false, true );
42 +
43 + $process->delete_backup();
21 44 }
22 45
46 +add_filter( 'ext2type', 'imagify_add_avif_type' );
23 47 /**
24 - * Delete the backup file when an attachement is deleted.
48 + * Add the AVIF extension to wp_get_ext_types().
25 49 *
26 - * @since 1.0
50 + * @since 1.9
51 + * @author Grégory Viguier
52 + *
53 + * @param array $ext2type Multi-dimensional array with extensions for a default set of file types.
54 + * @return array
27 55 */
28 -add_action( 'delete_attachment', '_imagify_delete_backup_file' );
29 -function _imagify_delete_backup_file( $post_id ) {
30 - $attachment = new Imagify_Attachment( $post_id );
31 - $attachment->delete_backup();
56 +function imagify_add_avif_type( $ext2type ) {
57 + if ( ! in_array( 'avif', $ext2type['image'], true ) ) {
58 + $ext2type['image'][] = 'avif';
59 + }
60 + return $ext2type;
32 61 }
33 62
34 63 /**
35 - * Optimize a resized attachment
64 + * Set WP’s "big images threshold" to Imagify’s resizing value.
36 65 *
37 - * @since 1.3.6
66 + * @since 1.9.8
67 + * @since WP 5.3
68 + * @author Grégory Viguier
38 69 */
39 -add_action( 'shutdown', '_imagify_optimize_save_image_editor_file' );
40 -function _imagify_optimize_save_image_editor_file() {
41 - if ( isset( $_POST['action'], $_POST['do'], $_POST['postid'] )
42 - && 'image-editor' === $_POST['action']
43 - && check_ajax_referer( 'image_editor-' . $_POST['postid'] )
44 - && get_post_meta( $_POST['postid'], '_imagify_data', true )
45 - && 'open' !== $_POST['do']
46 - ) {
47 - $attachment_id = $_POST['postid'];
48 - $optimization_level = get_post_meta( $attachment_id, '_imagify_optimization_level', true );
49 - $attachment = new Imagify_Attachment( $attachment_id );
50 - $metadata = wp_get_attachment_metadata( $attachment_id );
51 -
52 - // Remove old optimization data
53 - delete_post_meta( $attachment_id, '_imagify_data' );
54 - delete_post_meta( $attachment_id, '_imagify_status' );
55 - delete_post_meta( $attachment_id, '_imagify_optimization_level' );
70 +add_filter( 'big_image_size_threshold', [ imagify_get_context( 'wp' ), 'filter_big_image_size_threshold' ], IMAGIFY_INT_MAX );
56 71
57 - if ( 'restore' === $_POST['do'] ) {
58 - // Restore the backup file
59 - $attachment->restore();
60 -
61 - // Get old metadata to regenerate all thumbnails
62 - $metadata = array( 'sizes' => array() );
63 - $backup_sizes = (array) get_post_meta( $attachment_id, '_wp_attachment_backup_sizes', true );
64 -
65 - foreach ( $backup_sizes as $size_key => $size_data ) {
66 - $size_key = str_replace( '-origin', '' , $size_key );
67 - $metadata['sizes'][ $size_key ] = $size_data;
68 - }
69 - }
72 +/**
73 + * Note the uploads WordPress 7.1 hands to the browser, which scales them itself.
74 + *
75 + * Fires before the attachment metadata is generated, so the threshold filter above already
76 + * knows about it by the time it runs.
77 + *
78 + * @since 2.3.3
79 + * @since WP 7.1
80 + */
81 +add_action( 'rest_after_insert_attachment', [ imagify_get_context( 'wp' ), 'maybe_flag_client_side_scaling' ], 10, 3 );
70 82
71 - // Optimize it!!!!!
72 - $attachment->optimize( $optimization_level, $metadata );
83 +/**
84 + * Add filters to manage images formats that will be generated
85 + *
86 + * @return array
87 + */
88 +function imagify_nextgen_images_formats() {
89 + $value = get_imagify_option( 'optimization_format' );
90 + $formats = [];
91 +
92 + if ( 'off' !== $value ) {
93 + $formats[ $value ] = $value;
73 94 }
74 -}
95 +
96 + $default = $formats;
97 +
98 + /**
99 + * Filters the array of next gen formats to generate with Imagify
100 + *
101 + * @since 2.2
102 + *
103 + * @param array $formats Array of image formats
104 + */
105 + $formats = apply_filters( 'imagify_nextgen_images_formats', $formats );
106 +
107 + if ( ! is_array( $formats ) ) {
108 + $formats = $default;
109 + }
110 +
111 + return $formats;
112 +}