-
-
Save senlin/4fd15ba7a19533ceb9fe to your computer and use it in GitHub Desktop.
<?php | |
/** | |
* To get this to work, you need to tinker with the acf/settings/ filter and reset the default language | |
* so that the get_field() function returns the correct results even when not on the default language. | |
* | |
* You can add the filter before you call the get_field() function and then call it again with the current | |
* language to reset it again, so it will affect other pages. | |
* | |
* answer courtesy of James of ACF Support | |
*/ | |
// add this | |
add_filter( 'acf/settings/current_language', function() { | |
global $sitepress; | |
return $sitepress->get_default_language(); | |
}); | |
// this is already in your code | |
$my_field = get_field( 'my_field', 'option' ); | |
// reset to original language | |
add_filter( 'acf/settings/current_language', function() { | |
return ICL_LANGUAGE_CODE; | |
}); |
Hi and thanks for the code-snippets.
Because there is no way to handle this smart in the WP-Backend (see the comment of @elliottmangham) I use the "language=all"-soloution with a force-redirect in the backend by admin_init-action.
Template-Code:
// Use this to force ACF to look for the "all" version of the fields.
add_filter('acf/settings/current_language', function() { return 'all' ; } );
// Insert your regular ACF code between the add_filter and remove_filter lines.
echo get_field('my_language_independet_option_field', 'option');
// Use this to re-enable language-specific retrieval of ACF fields.
remove_filter('acf/settings/current_language', function() { return ICL_LANGUAGE_CODE ; } );
Backend- / Admin-Code (functions.php):
function force_redirect_to_the__all__version_of_global_options() {
// correct page
global $pagenow ;
if($pagenow === "admin.php" && isset($_GET['page']) && $_GET['page'] === "global-options") { // global-options is the menu_slug you defined in acf_add_options_page
// lang not 'all'?
if(ICL_LANGUAGE_CODE !== 'all') {
// manipulate query (set lang to "all")
$query = $_GET;
$query['lang'] = 'all';
$query_result = http_build_query($query);
// redirect and die
wp_redirect(get_admin_url() . 'admin.php?' . $query_result);
die();
}
}
}
add_action( 'admin_init', 'force_redirect_to_the__all__version_of_global_options');
Nice gist, in particular the solution by @peterblickenstorfer (Backend/Admin Code) works for me. I just needed to group the really global option fields to a separate field group and option page.
It does makes a lot of sense to use the "All Languages" instead of setting the default language custom fields.
Update:
I have posted too soon without checking if things are working properly. There is just something wrong when I used add_filter('acf/settings/current_language', function() { return 'all' ; } );
. It might be my WPML setup?
So I have reverted back to using the "default language" field as a global field, and used the Backend/Admin Code by @peterblickenstorfer
This was extremely helpful! thanks!