Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- //thrive image optimization
- add_filter( 'wp_generate_attachment_metadata', 'thrive_update_attachment', 10, 2 );
- add_filter( 'manage_media_columns', 'thrive_media_columns' );
- add_action( 'manage_media_custom_column', 'thrive_media_custom_column', 10, 2 );
- add_action( 'admin_action_wp_kraken_manual', 'thrive_process_single_kraken_image' );
- add_action( 'rest_api_init', 'thrive_kraken_callback_route' );
- function thrive_kraken_callback_route() {
- register_rest_route( 'thrive', '/kraken', array(
- array(
- 'methods' => WP_REST_Server::CREATABLE,
- 'callback' => 'thrive_kraken_callback',
- ),
- ) );
- }
- function thrive_update_attachment( $meta, $ID ) {
- if ( ! isset( $meta['sizes'] ) ) {
- return $meta;
- }
- $optimize_image_type = thrive_get_theme_options( 'image_optimization_type' );
- if ( $optimize_image_type === 'off' ) {
- return $meta;
- }
- $lossy = $optimize_image_type === 'lossy';
- $attachment_file_path = get_attached_file( $ID );
- $attachment_file_url = wp_get_attachment_url( $ID );
- $upload_dir = trailingslashit( dirname( $attachment_file_path ) );
- $sizes = array(
- array(
- 'id' => $ID,
- 'strategy' => 'none',
- 'file' => $attachment_file_path,
- )
- );
- foreach ( $meta['sizes'] as $size_key => $size_data ) {
- $sizes[] = array(
- 'id' => $size_key,
- 'strategy' => 'auto',
- 'width' => $size_data['width'],
- 'height' => $size_data['height'],
- 'file' => $upload_dir . $size_data['file']
- );
- }
- do {
- $reduced = array_slice( $sizes, 0, 10 );
- $process_result = thrive_process_kraken_image( $attachment_file_url, $reduced, $lossy );
- $sizes = array_slice( $sizes, 9 );
- } while ( count( $sizes ) > 10 );
- $meta['wp_kraken'] = $process_result;
- return $meta;
- }
- function thrive_media_columns( $defaults ) {
- $optimize_image_type = thrive_get_theme_options( 'image_optimization_type' );
- if ( $optimize_image_type == "off" ) {
- return $defaults;
- }
- $defaults['kraken'] = 'Optimize';
- return $defaults;
- }
- function thrive_media_custom_column( $column_name, $id ) {
- $optimize_image_type = thrive_get_theme_options( 'image_optimization_type' );
- if ( $optimize_image_type == "off" ) {
- return $defaults;
- }
- if ( 'kraken' == $column_name ) {
- $data = wp_get_attachment_metadata( $id );
- if ( isset( $data['wp_kraken'] ) && ! empty( $data['wp_kraken'] ) ) {
- print $data['wp_kraken'];
- printf( "<br><a href=\"admin.php?action=wp_kraken_manual&attachment_ID=%d\">%s</a>", $id, __( 'Re-compress', 'thrive' ) );
- } else {
- if ( wp_attachment_is_image( $id ) ) {
- print __( 'Not processed', 'thrive' );
- printf( "<br><a href=\"admin.php?action=wp_kraken_manual&attachment_ID=%d\">%s</a>", $id, __( 'Compress', 'thrive' ) );
- }
- }
- }
- }
- function thrive_process_single_kraken_image() {
- if ( ! current_user_can( 'upload_files' ) ) {
- wp_die( __( "You don't have permission to work with uploaded files.", 'thrive' ) );
- }
- if ( ! isset( $_GET['attachment_ID'] ) ) {
- wp_die( __( 'No attachment ID was provided.', 'thrive' ) );
- }
- $attachment_ID = intval( $_GET['attachment_ID'] );
- $original_meta = wp_get_attachment_metadata( $attachment_ID );
- $new_meta = thrive_update_attachment( $original_meta, $attachment_ID );
- wp_update_attachment_metadata( $attachment_ID, $new_meta );
- wp_redirect( preg_replace( '|[^a-z0-9-~+_.?#=&;,/:]|i', '', wp_get_referer() ) );
- exit();
- }
- /**
- * Send request to kraken for optimizing an image
- *
- * @param $file_url
- * @param array $sizes
- * @param int $lossy
- *
- * @return string
- */
- function thrive_process_kraken_image( $file_url, $sizes = array(), $lossy = 1 ) {
- require_once 'libs/ThriveOptimize.php';
- $thriveOptimize = new ThriveOptimize();
- $kraken_callback_url = get_rest_url() . 'thrive/kraken';
- $params = array(
- 'file_url' => $file_url,
- 'callback_url' => $kraken_callback_url,
- 'lossy' => $lossy,
- 'resize' => array_values( $sizes ),
- 'preserve_meta' => array(
- 'profile',
- 'copyright',
- ),
- );
- $data = $thriveOptimize->url( $params );
- if ( ! isset( $data['id'] ) && isset( $data['message'] ) ) {
- return $data['message'];
- }
- if ( ! isset( $data['id'] ) ) {
- return 'Compress failed';
- }
- $paths = array();
- foreach ( $sizes as $size ) {
- $paths[ $size['id'] ] = $size['file'];
- }
- add_option( $data['id'], json_encode( $paths ), '', 'no' );
- return 'Compress in progress (refresh to see the result)';
- }
- /**
- * Kraken callback for optimizing images
- */
- function thrive_kraken_callback() {
- $response = json_decode( file_get_contents( 'php://input' ), true );
- if ( ! isset( $response['id'] ) ) {
- die;
- }
- $results = $response['results'];
- $option_id = $response['id'];
- $option_str = get_option( $option_id );
- if ( ! $option_str ) {
- die;
- }
- $files = json_decode( $option_str );
- foreach ( $files as $aid => $file_path ) {
- $meta = wp_get_attachment_metadata( $aid );
- if ( ! empty( $response['file_already_compressed'] ) ) {
- $meta_info_msg = 'File is already compressed';
- $meta['wp_kraken'] = $meta_info_msg;
- wp_update_attachment_metadata( $aid, $meta );
- die;
- }
- /*
- * On success overwrite the current file
- */
- if ( ! empty( $results[ $aid ] ) ) {
- $original_size = filesize( $file_path );
- $file_response = wp_remote_get( $results[ $aid ]['kraked_url'] );
- $image_string = wp_remote_retrieve_body( $file_response );
- if ( empty( $image_string ) || is_wp_error( $file_response ) ) {
- $meta_info_msg = 'Compress failed';
- $meta['wp_kraken'] = $meta_info_msg;
- wp_update_attachment_metadata( $aid, $meta );
- die;
- }
- $new_size = file_put_contents( $file_path, $image_string );
- $meta_info_msg = 'Compressed (saved ' . ( $original_size - $new_size ) . ' bytes)';
- $meta['wp_kraken'] = $meta_info_msg;
- wp_update_attachment_metadata( $aid, $meta );
- }
- }
- /* we should delete the option each time */
- delete_option( $option_id );
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement