plugin_name = $plugin_name; $this->version = $version; } /** * Optimize an image added in wp_media */ public function image_optimizition( $file ) { $settings = $this->get_settings(); $image_file = $this->file_is_image( $file, $settings ); if ( ! $image_file ) { return $file; } if ( $settings['quickwebp_settings_conversion'] != '1' ) { return $image_file; } $extension_to_use = $this->image_extension_loaded(); if ( ! $extension_to_use ) { return $image_file; } $manager = new ImageManager(array('driver'=>$extension_to_use)); $image = $manager->make($image_file['tmp_name']); $height = $image->height(); $width = $image->width(); if ( $width > $settings['quickwebp_settings_conversion_max_width'] ) { $image->widen( $settings['quickwebp_settings_conversion_max_width'] ); } if ( $height > $settings['quickwebp_settings_conversion_max_height'] ) { $image->heighten( $settings['quickwebp_settings_conversion_max_height'] ); } $image->sharpen($settings['quickwebp_settings_conversion_sharpen']); $image->save( $image_file['tmp_name'], $settings['quickwebp_settings_conversion_quality'], 'webp' ); $size_before = $image_file['size']; $size_after = $image->filesize(); $mime = $image->mime(); $image_file['size'] = $size_after; $image_file['type'] = $mime; return $image_file; } /** * Get the package used by the server * */ public function image_extension_loaded() { if ( extension_loaded('imagick') ) { return 'imagick'; } if ( extension_loaded('gd') ) { return 'gd'; } return false; } /** * Check if the file is an image * */ public function file_is_image( $file, $settings ) { $file_name = isset($file['name']) ? $file['name'] : ''; $file_type = isset($file['type']) ? $file['type'] : ''; $file_tmp_name = isset($file['tmp_name']) ? $file['tmp_name'] : ''; $file_error = isset($file['error']) ? $file['error'] : ''; $file_size = isset($file['size']) ? $file['size'] : ''; if ( empty($file_tmp_name) ) { return false; } $is_image = wp_getimagesize($file_tmp_name); if ( ! $is_image ) { return false; } $name = $file_name; if ( $settings['quickwebp_settings_cleanup'] ) { $name = quickwebp_sanitize_name($file_name); } return array( 'original_name' => $file_name, 'name' => $name, 'type' => $file_type, 'tmp_name' => $file_tmp_name, 'error' => $file_error, 'size' => $file_size ); } /** * Get the optimization settings */ public function get_settings() { return array( 'quickwebp_settings_conversion' => get_option('quickwebp_settings_conversion', quickwebp_settings_default('quickwebp_settings_conversion') ), 'quickwebp_settings_conversion_max_width' => get_option('quickwebp_settings_conversion_max_width', quickwebp_settings_default('quickwebp_settings_conversion_max_width') ), 'quickwebp_settings_conversion_max_height' => get_option('quickwebp_settings_conversion_max_height', quickwebp_settings_default('quickwebp_settings_conversion_max_height') ), 'quickwebp_settings_conversion_quality' => get_option('quickwebp_settings_conversion_quality', quickwebp_settings_default('quickwebp_settings_conversion_quality') ), 'quickwebp_settings_conversion_sharpen' => get_option('quickwebp_settings_conversion_sharpen', quickwebp_settings_default('quickwebp_settings_conversion_sharpen') ), 'quickwebp_settings_completion' => get_option('quickwebp_settings_completion', quickwebp_settings_default('quickwebp_settings_completion') ), 'quickwebp_settings_completion_options' => get_option('quickwebp_settings_completion_options', quickwebp_settings_default('quickwebp_settings_completion_options') ), 'quickwebp_settings_cleanup' => get_option('quickwebp_settings_cleanup', quickwebp_settings_default('quickwebp_settings_cleanup') ) ); } /** * Add data to the attachment */ public function add_data_to_attachment( $metadata, $attachment_id, $context ) { $settings = $this->get_settings(); if ( $settings['quickwebp_settings_completion'] != '1' ) { return $metadata; } if ( $context != 'create' ) { return $metadata; } if ( isset($_FILES['async-upload']['original_name']) ) { $original_name = sanitize_text_field( $_FILES['async-upload']['original_name'] ); $original_name = pathinfo( $original_name, PATHINFO_FILENAME ); $post_arr = array( 'ID' => $attachment_id, 'meta_input' => array() ); $completion_options = is_array($settings['quickwebp_settings_completion_options']) ? $settings['quickwebp_settings_completion_options'] : array(); if ( in_array( 'title', $completion_options ) ) { $post_arr['post_title'] = $original_name; } if ( in_array( 'caption', $completion_options ) ) { $post_arr['post_excerpt'] = $original_name; } if ( in_array( 'alt', $completion_options ) ) { $post_arr['meta_input']['_wp_attachment_image_alt'] = $original_name; } if ( in_array( 'description', $completion_options ) ) { $post_arr['post_content'] = $original_name; } wp_update_post( $post_arr ); } return $metadata; } }