2 ? array_pop( $parts ) : ""; $url = join( '?', $parts ); $url = preg_replace( '#(.+?)(/\?|\?)(.*?)(/.+?[/$|$])$#', '$1$4$5?$3', $url ); $url = preg_replace( '#(\?.+)(%2F|\/)$#', '$1', $url ); return $url . ( $last_part !== "" && strpos( $url, '?' . $last_part ) === false ? '&' . $last_part : '' ); } /** * Filters the pagination links on paginated posts and pages, acting on the links html * output containing the anchor tag the link is a property of. * * @param string $link_html * * @return string * * @hook wp_link_pages_link */ function paginated_link_filter( $link_html ) { return preg_replace('#"([^"].+?)(/\?|\?)(.+)(/\d/)"#', '"$1$4?$3"', $link_html); } protected function get_lang_from_url_string( $url ) { return $this->lang_by_param ( $url, false ); } protected function convert_url_string( $source_url, $lang_code ) { $old_lang_code = $this->get_lang_from_url_string ( $source_url ); $lang_code = (bool) $lang_code === false ? $this->default_language : $lang_code; $lang_code = $lang_code === $this->default_language ? "" : $lang_code; if ( (bool) $old_lang_code !== false ) { $replace = $lang_code === "" ? "" : '?lang=' . $lang_code; $source_url = str_replace ( '?lang=' . $old_lang_code, $replace, $source_url ); $replace = str_replace ( '?', '&', $replace ); $source_url = str_replace ( '&lang=' . $old_lang_code, $replace, $source_url ); $source_url = strpos($source_url, '?') === false ? $source_url . '?lang=' . $lang_code : $source_url; } if ( strpos ( $source_url, 'lang=' . $lang_code ) === false ) { $source_url .= ( strpos ( $source_url, '?' ) === false ? '?' : '&' ) . 'lang=' . $lang_code; } $source_url = str_replace ( '?lang=&', '?', $source_url ); $source_url = str_replace ( '&lang=&', '&', $source_url ); $source_url = str_replace ( '&lang=/', '', trailingslashit ( $source_url ) ); $source_url = str_replace ( '?lang=/', '', $source_url ); $source_url = str_replace ( '//?', '/?', $source_url ); return untrailingslashit ( $source_url ); } }