sitepress = $sitepress; $this->attachment_by_url_factory = $attachment_by_url_factory; } /** * @param int $attachment_id * @param string $language * @param string $size * * @return string */ public function get_translated_image( $attachment_id, $language, $size = null ) { $image_url = ''; $attachment = new WPML_Post_Element( $attachment_id, $this->sitepress ); $attachment_translation = $attachment->get_translation( $language ); if ( $attachment_translation ) { $uploads_dir = wp_get_upload_dir(); $attachment_id = $attachment_translation->get_id(); if ( null === $size ) { $image_url = $uploads_dir['baseurl'] . '/' . get_post_meta( $attachment_id, '_wp_attached_file', true ); } else { $image_url = $this->get_sized_image_url( $attachment_id, $size, $uploads_dir ); } } return $image_url; } /** * @param string $img_src * @param string $source_language * @param string $target_language * * @return string|bool */ public function get_translated_image_by_url( $img_src, $source_language, $target_language ) { $attachment_by_url = $this->attachment_by_url_factory->create( $img_src, $source_language ); $attachment_id = $attachment_by_url->get_id(); if ( $attachment_id ) { $size = $this->get_image_size_from_url( $img_src, $attachment_id ); try { $img_src = $this->get_translated_image( $attachment_id, $target_language, $size ); } catch ( Exception $e ) { $img_src = false; } } else { $img_src = false; } return $img_src; } /** * @param string $url * @param int $attachment_id * * @return string */ private function get_image_size_from_url( $url, $attachment_id ) { $size = null; $thumb_file_name = basename( $url ); $attachment_meta_data = wp_get_attachment_metadata( $attachment_id ); foreach ( $attachment_meta_data['sizes'] as $key => $size_array ) { if ( $thumb_file_name === $size_array['file'] ) { $size = $key; break; } } return $size; } /** * @param $attachment_id * @param $size * @param $uploads_dir * * @return string */ private function get_sized_image_url( $attachment_id, $size, $uploads_dir ) { $image_url = ''; $meta_data = wp_get_attachment_metadata( $attachment_id ); if ( array_key_exists( $size, $meta_data['sizes'] ) ) { $image_url_parts = array( $uploads_dir['baseurl'] ); if ( array_key_exists( 'file', $meta_data ) ) { $file_subdirectory = $meta_data['file']; $file_subdirectory_parts = explode( '/', $file_subdirectory ); array_pop( $file_subdirectory_parts ); $image_url_parts[] = implode( '/', $file_subdirectory_parts ); } $image_url_parts[] = $meta_data['sizes'][ $size ]['file']; $image_url = implode( '/', $image_url_parts ); } return $image_url; } }