From 2f127baacd1acd16792d1134df2890e214ec88b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Mulsant?= Date: Tue, 13 Jan 2026 15:43:29 +0100 Subject: [PATCH 1/6] Fix to support non-conventional locale format through polylang locale detection --- classes/helpers.php | 15 ++++++++++++++- classes/main.php | 2 +- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/classes/helpers.php b/classes/helpers.php index 5f7bcdf..b90a591 100644 --- a/classes/helpers.php +++ b/classes/helpers.php @@ -95,8 +95,21 @@ public static function get_option_page_ids() { * @return bool */ public static function already_localized( $post_id ) { - preg_match( '/[a-z]{2}_[A-Z]{2}/', $post_id, $language ); + preg_match( '/'.self::locales_regex_fragment().'$/', $post_id, $language ); return ! empty( $language ); } + + /** + * @return string A regex fragment for all polylang configured locales + */ + public static function locales_regex_fragment(): string + { + return sprintf( + '(%s)', + implode('|', array_map(function ($lang) { + return preg_quote($lang, '/'); + }, pll_languages_list(['hide_empty' => false, 'fields' => 'locale']))) + ); + } } diff --git a/classes/main.php b/classes/main.php index b2638fb..f3520e4 100644 --- a/classes/main.php +++ b/classes/main.php @@ -55,7 +55,7 @@ public function get_default_reference( $reference, $field_name, $post_id ) { * Dynamically get the options page ID * @see : https://regex101.com/r/58uhKg/2/ */ - $_post_id = preg_replace( '/(_[a-z]{2}_[A-Z]{2})/', '', $post_id ); + $_post_id = preg_replace( '/(_'.Helpers::locales_regex_fragment().')$/', '', $post_id ); remove_filter( 'acf/load_reference', [ $this, 'get_default_reference' ] ); $reference = acf_get_reference( $field_name, $_post_id ); From 07a487ad08e058dc486d2cd6bb11cd223d75221a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Mulsant?= Date: Tue, 13 Jan 2026 16:00:44 +0100 Subject: [PATCH 2/6] Fix code formatting --- classes/helpers.php | 25 ++++++++++++------------- classes/main.php | 2 +- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/classes/helpers.php b/classes/helpers.php index b90a591..3d28692 100644 --- a/classes/helpers.php +++ b/classes/helpers.php @@ -95,21 +95,20 @@ public static function get_option_page_ids() { * @return bool */ public static function already_localized( $post_id ) { - preg_match( '/'.self::locales_regex_fragment().'$/', $post_id, $language ); + preg_match( '/' . self::locales_regex_fragment() . '$/', $post_id, $language ); return ! empty( $language ); } - /** - * @return string A regex fragment for all polylang configured locales - */ - public static function locales_regex_fragment(): string - { - return sprintf( - '(%s)', - implode('|', array_map(function ($lang) { - return preg_quote($lang, '/'); - }, pll_languages_list(['hide_empty' => false, 'fields' => 'locale']))) - ); - } + /** + * @return string A regex fragment for all polylang configured locales + */ + public static function locales_regex_fragment(): string { + return sprintf( + '(%s)', + implode( '|', array_map( function ( $lang ) { + return preg_quote( $lang, '/' ); + }, pll_languages_list( [ 'hide_empty' => false, 'fields' => 'locale' ] ) ) ) + ); + } } diff --git a/classes/main.php b/classes/main.php index f3520e4..20fcd26 100644 --- a/classes/main.php +++ b/classes/main.php @@ -55,7 +55,7 @@ public function get_default_reference( $reference, $field_name, $post_id ) { * Dynamically get the options page ID * @see : https://regex101.com/r/58uhKg/2/ */ - $_post_id = preg_replace( '/(_'.Helpers::locales_regex_fragment().')$/', '', $post_id ); + $_post_id = preg_replace( '/(_' . Helpers::locales_regex_fragment() . ')$/', '', $post_id ); remove_filter( 'acf/load_reference', [ $this, 'get_default_reference' ] ); $reference = acf_get_reference( $field_name, $_post_id ); From fc16e9d3521429786bf7365134b452281163d66f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Mulsant?= Date: Tue, 13 Jan 2026 17:25:45 +0100 Subject: [PATCH 3/6] Fix when no languages are configured --- classes/helpers.php | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/classes/helpers.php b/classes/helpers.php index 3d28692..8c5c57c 100644 --- a/classes/helpers.php +++ b/classes/helpers.php @@ -95,7 +95,11 @@ public static function get_option_page_ids() { * @return bool */ public static function already_localized( $post_id ) { - preg_match( '/' . self::locales_regex_fragment() . '$/', $post_id, $language ); + $locales_regex_fragment = self::locales_regex_fragment(); + if ( ! $locales_regex_fragment ) { + return false; + } + preg_match( '/' . $locales_regex_fragment . '$/', $post_id, $language ); return ! empty( $language ); } @@ -104,11 +108,16 @@ public static function already_localized( $post_id ) { * @return string A regex fragment for all polylang configured locales */ public static function locales_regex_fragment(): string { + $locales = pll_languages_list( [ 'hide_empty' => false, 'fields' => 'locale' ] ); + if ( ! $locales ) { + return ''; + } + return sprintf( '(%s)', implode( '|', array_map( function ( $lang ) { return preg_quote( $lang, '/' ); - }, pll_languages_list( [ 'hide_empty' => false, 'fields' => 'locale' ] ) ) ) + }, $locales ) ) ); } } From 89aa9e06628b5360eb933c823b8c56d90f5b522b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Mulsant?= Date: Tue, 13 Jan 2026 18:51:46 +0100 Subject: [PATCH 4/6] Fix when no languages are configured, in get_default_reference --- classes/main.php | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/classes/main.php b/classes/main.php index 20fcd26..56d6089 100644 --- a/classes/main.php +++ b/classes/main.php @@ -47,7 +47,9 @@ public function set_current_site_lang() { * */ public function get_default_reference( $reference, $field_name, $post_id ) { - if ( ! empty( $reference ) ) { + $locales_regex_fragment = Helpers::locales_regex_fragment(); + + if ( ! empty( $reference ) || ! $locales_regex_fragment ) { return $reference; } @@ -55,7 +57,7 @@ public function get_default_reference( $reference, $field_name, $post_id ) { * Dynamically get the options page ID * @see : https://regex101.com/r/58uhKg/2/ */ - $_post_id = preg_replace( '/(_' . Helpers::locales_regex_fragment() . ')$/', '', $post_id ); + $_post_id = preg_replace( '/(_' . $locales_regex_fragment . ')$/', '', $post_id ); remove_filter( 'acf/load_reference', [ $this, 'get_default_reference' ] ); $reference = acf_get_reference( $field_name, $_post_id ); @@ -85,8 +87,8 @@ public function get_default_value( $value, $post_id, $field ) { /** * Activate or deactivate the default value (all languages) for the given post id * - * @param bool $show_default : whatever to show default for the given post id - * @param string $original_post_id : the original post id without lang attributes + * @param bool $show_default : whatever to show default for the given post id + * @param string $original_post_id : the original post id without lang attributes * * @since 1.0.4 */ @@ -144,8 +146,8 @@ function ( $value_c ) { /** * Manage to change the post_id with the current lang to save option against * - * @param string $future_post_id - * @param string $original_post_id + * @param string $future_post_id + * @param string $original_post_id * * @return string * @author Maxime CULEA From 4a0fb79203c96c52434bcbfe4488ab5adcd84af7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Mulsant?= Date: Tue, 13 Jan 2026 19:09:27 +0100 Subject: [PATCH 5/6] Fix performance issue when $reference already has a value --- classes/main.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/classes/main.php b/classes/main.php index 56d6089..f5b992a 100644 --- a/classes/main.php +++ b/classes/main.php @@ -47,9 +47,11 @@ public function set_current_site_lang() { * */ public function get_default_reference( $reference, $field_name, $post_id ) { - $locales_regex_fragment = Helpers::locales_regex_fragment(); + if ( ! empty( $reference ) ) { + return $reference; + } - if ( ! empty( $reference ) || ! $locales_regex_fragment ) { + if ( ! $locales_regex_fragment = Helpers::locales_regex_fragment() ) { return $reference; } From d56e3da7a912a39467448a7f0c9a29cbe30a8514 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Mulsant?= Date: Tue, 13 Jan 2026 19:32:43 +0100 Subject: [PATCH 6/6] Fix possible false positive with short non-conventional locales --- classes/helpers.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/classes/helpers.php b/classes/helpers.php index 8c5c57c..95da1c1 100644 --- a/classes/helpers.php +++ b/classes/helpers.php @@ -99,7 +99,7 @@ public static function already_localized( $post_id ) { if ( ! $locales_regex_fragment ) { return false; } - preg_match( '/' . $locales_regex_fragment . '$/', $post_id, $language ); + preg_match( '/_(' . $locales_regex_fragment . ')$/', $post_id, $language ); return ! empty( $language ); }