This is a patch that solves the issue:
diff –git a/wordpress/wp-content/plugins/polylang/admin/settings.php b/wordpress/wp-content/plugins/polylang/admin/settings.php
index b625c2c..be7d11c 100644
— a/wordpress/wp-content/plugins/polylang/admin/settings.php
+++ b/wordpress/wp-content/plugins/polylang/admin/settings.php
@@ -267,7 +267,8 @@ class PLL_Settings {
if (3 == $this->options[‘force_lang’] && isset($_POST[‘domains’]) && is_array($_POST[‘domains’])) {
foreach ($_POST[‘domains’] as $key => $domain) {
– $this->options[‘domains’][$key] = esc_url_raw(trim($domain));
+ //$this->options[‘domains’][$key] = esc_url_raw(trim($domain));
+ $this->options[‘domains’][$key] = preg_split(“/[\s,]+/”, trim($domain));
}
}
diff –git a/wordpress/wp-content/plugins/polylang/admin/view-tab-settings.php b/wordpress/wp-content/plugins/polylang/admin/view-tab-settings.php
index c29e001..989bf68 100644
— a/wordpress/wp-content/plugins/polylang/admin/view-tab-settings.php
+++ b/wordpress/wp-content/plugins/polylang/admin/view-tab-settings.php
@@ -76,7 +76,8 @@ $page_on_front = ‘page’ == get_option(‘show_on_front’) ? get_option(‘page_on_fro
‘<td><input name=”domains[%1$s]” id=”pll-domain[%1$s]” type=”text” value=”%3$s” size=”40″ aria-required=”true” /></td></tr>’,
esc_attr($lg->slug),
esc_attr($lg->name),
– esc_url(isset($this->options[‘domains’][$lg->slug]) ? $this->options[‘domains’][$lg->slug] : ($lg->slug == $this->options[‘default_lang’] ? $this->links_model->home : ”))
+ //esc_url(isset($this->options[‘domains’][$lg->slug]) ? $this->options[‘domains’][$lg->slug] : ($lg->slug == $this->options[‘default_lang’] ? $this->links_model->home : ”))
+ esc_attr(is_array($this->options[‘domains’][$lg->slug]) ? implode(“, “, $this->options[‘domains’][$lg->slug]) : ($lg->slug == $this->options[‘default_lang’] ? $this->links_model->home : ”))
);
}?>
</table>
diff –git a/wordpress/wp-content/plugins/polylang/include/links-domain.php b/wordpress/wp-content/plugins/polylang/include/links-domain.php
index af7419d..b9edcd1 100644
— a/wordpress/wp-content/plugins/polylang/include/links-domain.php
+++ b/wordpress/wp-content/plugins/polylang/include/links-domain.php
@@ -20,8 +20,13 @@ class PLL_Links_Domain extends PLL_Links_Permalinks {
* @return string modified url
*/
public function add_language_to_link($url, $lang) {
– if (!empty($lang) && !empty($this->options[‘domains’][$lang->slug]))
– $url = str_replace($this->home, $this->options[‘domains’][$lang->slug], $url);
+ if (!empty($lang) && !empty($this->options[‘domains’][$lang->slug])) {
+ if (!is_array($this->options[‘domains’][$lang->slug])) {
+ $url = str_replace($this->home, $this->options[‘domains’][$lang->slug], $url);
+ } else {
+ $url = str_replace($this->home, $this->options[‘domains’][$lang->slug][0], $url);
+ }
+ }
return $url;
}
@@ -49,7 +54,20 @@ class PLL_Links_Domain extends PLL_Links_Permalinks {
* @return string language slug
*/
public function get_language_from_url() {
– return ($lang = array_search( (is_ssl() ? ‘https://’ : ‘https://’) . $_SERVER[‘HTTP_HOST’] . parse_url($this->home, PHP_URL_PATH), $this->options[‘domains’] ) ) ? $lang : $this->options[‘default_lang’];
+ $search = (is_ssl() ? ‘https://’ : ‘https://’).str_replace(‘www.’, ”, $_SERVER[‘HTTP_HOST’]).parse_url($this->home, PHP_URL_PATH);
+
+ // default
+ $slug = $this->options[‘default_lang’];
+ foreach ($this->options[‘domains’] as $lang => $domains) {
+ if (is_array($domains)) {
+ if (!(array_search($search, $domains) === FALSE)) {
+ $slug = $lang;
+ }
+ } elseif ($search == $domains) {
+ $slug = $lang;
+ }
+ }
+ return $slug;
}
/*
@@ -62,7 +80,11 @@ class PLL_Links_Domain extends PLL_Links_Permalinks {
* @return string
*/
function home_url($lang) {
– return empty($this->options[‘domains’][$lang->slug]) ? $this->home : $this->options[‘domains’][$lang->slug];
+ $domains = empty($this->options[‘domains’][$lang->slug]) ? $this->home : $this->options[‘domains’][$lang->slug];
+ if (is_array($domains)) {
+ return $domains[0];
+ }
+ return $domains;
}
/*
@@ -73,6 +95,14 @@ class PLL_Links_Domain extends PLL_Links_Permalinks {
* @return array list of hosts
*/
public function get_hosts() {
– return array_map(create_function(‘$v’, ‘return parse_url($v, PHP_URL_HOST);’), $this->options[‘domains’]);
+ $result = array();
+ foreach ($this->options[‘domains’] as $lang => $domains) {
+ if (is_array($domains)) {
+ $result = array_merge($result, array_map(create_function(‘$v’, ‘return parse_url($v, PHP_URL_HOST);’), $domains));
+ } else {
+ array_push($result, $domains);
+ }
+ }
+ return $result;
}
}