are_translated_types( (array) $query->get( 'type' ), $store ) ) { return $clauses; } $languages = $this->get_languages( $query->get( 'lang' ) ); if ( empty( $languages ) ) { return $clauses; } $tt_ids = array(); $alias = $query->get_core_mapping_alias( 'orders' ); foreach ( $languages as $language ) { $tt_ids[] = (int) $language->get_tax_prop( $store->get_tax_language(), 'term_taxonomy_id' ); } $clauses['join'] .= " INNER JOIN {$wpdb->term_relationships} AS pll_tr ON pll_tr.object_id = {$alias}.id"; $clauses['where'] .= ' AND pll_tr.term_taxonomy_id IN ( ' . implode( ',', $tt_ids ) . ' )'; return $clauses; } /** * Returns the list of languages passed to the given query. * Falls back to an array containing the current language if no languages are found in the query. * * @since 1.9 * * @param string[]|string|null $languages An array of language codes, a comma-separated list of language codes, or `null`. * @return PLL_Language[] A list of `PLL_Language` objects. */ private function get_languages( $languages ): array { if ( ! isset( $languages ) && ! empty( PLL()->curlang ) ) { // `lang` is not set at all: return the current language. return array( PLL()->curlang ); } if ( empty( $languages ) ) { // `lang` is set to an empty string: don't filter by language. return array(); } if ( is_string( $languages ) ) { $languages = explode( ',', $languages ); } elseif ( ! is_array( $languages ) ) { return array(); } $languages = array_map( 'trim', $languages ); $languages = array_map( array( PLL()->model, 'get_language' ), $languages ); return array_filter( $languages ); } /** * Tells if the order types from the given query are all translated by PLLWC. * * @since 1.9 * * @param string[] $types Order types. * @param PLLWC_Order_Language_CPT $store The order language store. * @return bool */ private function are_translated_types( array $types, PLLWC_Order_Language_CPT $store ) { if ( empty( $types ) ) { // All types are queried: some types, like `shop_order_refund` are not translated. return false; } $translated = $store->translated_post_types( array(), false ); return empty( array_diff( $types, $translated ) ); } }