3 class WPML_URL_Converter_Parameter_Strategy extends WPML_URL_Converter_Abstract_Strategy {
5 public function get_lang_from_url_string( $url ) {
6 return $this->lang_param->lang_by_param( $url, false );
9 public function convert_url_string( $source_url, $lang_code ) {
11 $lang_code = $this->default_language;
13 if ( $lang_code === $this->default_language ) {
17 $source_url = $this->fix_query_structure( $source_url );
19 $source_url = $this->fix_trailingslashit( $source_url );
21 $query = wpml_parse_url( $source_url, PHP_URL_QUERY );
22 if ( false !== strpos( $query, 'lang=' ) ) {
23 $source_url = remove_query_arg( 'lang', $source_url );
26 if ( ! empty( $lang_code ) ) {
27 $source_url = add_query_arg( 'lang', $lang_code, $source_url );
35 * @param string $langauge
39 public function get_home_url_relative( $url, $language ) {
40 if ( $language === $this->default_language ) {
45 return add_query_arg( 'lang', $language, $url );
52 * Replace double ? to &
58 private function fix_query_structure( $url ) {
59 $query = wpml_parse_url( $url, PHP_URL_QUERY );
60 $new_query = str_replace( '?', '&', $query );
62 return str_replace( $query, $new_query, $url );
66 * @param string $source_url
70 public function fix_trailingslashit( $source_url ) {
71 $query = wpml_parse_url( $source_url, PHP_URL_QUERY );
72 if ( ! empty( $query ) ) {
73 $source_url = str_replace( '?' . $query, '', $source_url );
76 $source_url = $this->slash_helper->maybe_user_trailingslashit( $source_url, 'trailingslashit' );
78 if ( ! empty( $query ) ) {
79 $source_url .= '?' . untrailingslashit( $query );