is_available() ) { return array(); } $codes = pll_languages_list( array( 'fields' => 'slug' ) ); $names = pll_languages_list( array( 'fields' => 'name' ) ); $languages = array(); if ( ! is_array( $codes ) ) { return array(); } foreach ( $codes as $index => $code ) { $languages[] = array( 'code' => (string) $code, 'name' => (string) ( is_array( $names ) ? ( $names[ $index ] ?? $code ) : $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() || ! function_exists( 'pll_default_language' ) ) { return isset( $languages[0]['code'] ) ? (string) $languages[0]['code'] : ''; } $default = pll_default_language( 'slug' ); return is_string( $default ) ? sanitize_key( $default ) : ''; } /** * @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 ''; } $lang = pll_get_post_language( $post_id, 'slug' ); return is_string( $lang ) ? $lang : ''; } /** * @inheritDoc */ public function assign_post_language( int $post_id, string $lang_code ): void { if ( ! $this->is_available() || ! $this->is_valid_language( $lang_code ) ) { return; } pll_set_post_language( $post_id, $lang_code ); } /** * @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; } }