element_factory = $element_factory; $this->image_translate = $image_translate; } /** * @param string $url * @param string $lang * @param string $source_lang * * @return string */ public function translate_image_url( $url, $lang, $source_lang ) { $key = $url . $lang . $source_lang; if ( ! array_key_exists( $key, $this->translated_urls ) ) { $this->translated_urls[ $key ] = $url; $attachment_id = $this->image_translate->get_attachment_id_by_url( $url, $source_lang ); if ( $attachment_id ) { $this->add_translated_id( $attachment_id ); $translated_url = $this->image_translate->get_translated_image_by_url( $url, $source_lang, $lang ); $this->translated_urls[ $key ] = $url; if ( $translated_url ) { $this->translated_urls[ $key ] = $translated_url; } } } return $this->translated_urls[ $key ]; } /** * @param int $id * @param string $lang * * @return int */ public function translate_id( $id, $lang ) { if ( (int) $id < 1 ) { return $id; } $this->add_translated_id( $id ); $translated_attachment = $this->get_translated_attachment( $id, $lang ); if ( isset( $translated_attachment->ID ) ) { return $translated_attachment->ID; } return $id; } /** * @param int $id * @param string $lang * * @return WP_Post|null */ private function get_translated_attachment( $id, $lang ) { $key = $id . $lang; if ( ! array_key_exists( $key, $this->translated_posts ) ) { $this->translated_posts[ $key ] = null; $element = $this->element_factory->create_post( $id ); $translation = $element->get_translation( $lang ); if ( $translation ) { $this->translated_posts[ $key ] = $translation->get_wp_object(); } } return $this->translated_posts[ $key ]; } /** @param int $id */ private function add_translated_id( $id ) { if ( ! in_array( $id, $this->translated_ids, true ) ) { $this->translated_ids[] = $id; } } public function reset_translated_ids() { $this->translated_ids = array(); } /** @return array */ public function get_translated_ids() { return $this->translated_ids; } }