translated_object = $translated_object; } /** * Adds multiple items to export. * Expects all items to belong to the same language, corresponding to export source. * * @since 3.6 * * @param PLL_Export_Container $export_container Export container. * @param object[] $items Items to export. * @param PLL_Language $target_language Language to translate into. * @return void */ public function add_items( PLL_Export_Container $export_container, array $items, PLL_Language $target_language ) { $tr_ids = array(); foreach ( $items as $item ) { $tr_ids[] = $this->translated_object->get( $this->get_item_id( $item ), $target_language ); } $tr_ids = array_filter( $tr_ids ); if ( ! empty( $tr_ids ) ) { $this->add_to_cache( $tr_ids ); } foreach ( $items as $item ) { $source_language = $this->translated_object->get_language( $this->get_item_id( $item ) ); if ( empty( $source_language ) ) { continue; } $this->add_item( $export_container->get( $source_language, $target_language ), $item ); } } /** * Adds one item to export. * * @since 3.6 * * @param PLL_Export_Data $export Export object. * @param object $item Item to export. * @return void */ abstract public function add_item( PLL_Export_Data $export, $item ); /** * Removes duplicate items from array. * * @since 3.6 * * @param array $items An array of items of the same instance. * @return array Array without duplicate items. */ public function remove_duplicate_items( array $items ): array { $all_items = array(); foreach ( $items as $item ) { if ( ! isset( $all_items[ $this->get_item_id( $item ) ] ) ) { $all_items[ $this->get_item_id( $item ) ] = $item; } } return $all_items; } /** * Caches objects to avoid too many SQL queries during export. * * @since 3.6 * * @param int[] $ids Object IDs. * @return void * * @phpstan-param non-empty-array $ids */ abstract protected function add_to_cache( array $ids ); /** * Returns ID corresponding to the given item. * * @since 3.6 * * @param object $item Item to get ID from. * @return int Object ID. * * @phpstan-return int<0, max> */ abstract protected function get_item_id( $item ): int; }