is_available() ) { return array(); } // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- WPML third-party filter. $active = apply_filters( 'wpml_active_languages', null, array( 'skip_missing' => 0 ) ); if ( ! is_array( $active ) ) { return array(); } $languages = array(); foreach ( $active as $code => $data ) { if ( ! is_array( $data ) ) { continue; } $languages[] = array( 'code' => (string) $code, 'name' => (string) ( $data['native_name'] ?? $code ), ); } return $languages; } /** * @inheritDoc */ public function requires_manual_selection(): bool { return count( $this->get_languages() ) > 1; } /** * @inheritDoc */ public function get_default_language(): string { $languages = $this->get_languages(); if ( count( $languages ) === 1 ) { return (string) ( $languages[0]['code'] ?? '' ); } if ( ! $this->is_available() ) { return isset( $languages[0]['code'] ) ? (string) $languages[0]['code'] : ''; } // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- WPML third-party filter. $default = apply_filters( 'wpml_default_language', null ); return is_string( $default ) ? sanitize_key( $default ) : (string) ( $languages[0]['code'] ?? '' ); } /** * @inheritDoc */ public function is_valid_language( string $lang_code ): bool { $lang_code = sanitize_key( $lang_code ); if ( '' === $lang_code ) { return false; } foreach ( $this->get_languages() as $language ) { if ( $language['code'] === $lang_code ) { return true; } } return false; } /** * @inheritDoc */ public function get_post_language( int $post_id ): string { if ( ! $this->is_available() ) { return ''; } // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- WPML third-party filter. $details = apply_filters( 'wpml_post_language_details', null, $post_id ); if ( is_array( $details ) && ! empty( $details['language_code'] ) ) { return (string) $details['language_code']; } return ''; } /** * @inheritDoc */ public function assign_post_language( int $post_id, string $lang_code ): void { if ( ! $this->is_available() || ! $this->is_valid_language( $lang_code ) ) { return; } $post_type = get_post_type( $post_id ); if ( ! is_string( $post_type ) || '' === $post_type ) { return; } // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- WPML third-party filter. $element_type = apply_filters( 'wpml_element_type', 'post_' . $post_type ); /** * WPML sets element language after import. * * @param array $args Language details. */ do_action( 'wpml_set_element_language_details', array( 'element_id' => $post_id, 'element_type' => $element_type, 'language_code' => $lang_code, 'source_language_code' => null, ) ); } /** * @inheritDoc */ public function apply_language_to_query_args( array $query_args, string $lang_code ): array { if ( ! $this->is_available() || ! $this->is_valid_language( $lang_code ) ) { return $query_args; } $query_args['lang'] = $lang_code; return $query_args; } }