Настройка внешнего интерфейса на основе postmeta, не загружающего перевод

Я пытаюсь показать другой язык на передней панели, основываясь на настройке метаданных страницы. Проблема с минами в том, что я вижу, что язык изменен, но текст остается на английском. Только если я изменю locale trough 'Settings> General' и установите его на желаемый, мои переводы загружаются и отображаются правильно.

add_filter( 'locale', 'set_my_locale' ); function set_my_locale( $lang ) { if ( get_field('page_language', get_the_ID() ) ) { $lang = get_field('page_language', get_the_ID() ); } return $lang; } function load_textdomain(){ $domain = 'textdomain'; load_theme_textdomain( $domain, trailingslashit( WP_LANG_DIR ) . $domain ); load_theme_textdomain( $domain, get_stylesheet_directory() . '/lang' ); load_theme_textdomain( $domain, get_template_directory() . '/lang' ); } add_action( 'after_setup_theme', 'load_textdomain' ); 

Если я пытаюсь print_r( get_locale() ); Я вижу, что правильный языковой стандарт установлен, но переводы не отображаются, но вместо этого я вижу исходный текст.

Если кто-то может указать мне, пожалуйста?

Должен ли я использовать какой-то другой крючок или что я делаю неправильно?

Solutions Collecting From Web of "Настройка внешнего интерфейса на основе postmeta, не загружающего перевод"

Хорошо, я нашел способ сделать это с помощью query_var. Похоже, проблема заключалась в том, что локали были установлены в конце процесса загрузки.

Если мета-поле / значение существует, перенаправление на страницу с помощью атрибута? Lang = lang-а, а затем установите на нем локаль.

 function si_update_locale( $lang ) { if ( isset( $_GET['lang'] ) && ! empty( $_GET['lang'] ) ) { if( $_GET['lang'] == 'it' ) { $lang = 'it_IT'; } } return $lang; } add_filter( 'locale', 'si_update_locale' ); function si_load_textdomain(){ $domain = 'textdomain'; load_theme_textdomain( $domain, trailingslashit( WP_LANG_DIR ) . $domain ); load_theme_textdomain( $domain, get_stylesheet_directory() . '/lang' ); load_theme_textdomain( $domain, get_template_directory() . '/lang' ); } add_action( 'after_setup_theme', 'si_load_textdomain' ); function si_set_locale() { $post_id = get_the_ID(); $lang = get_field('page_language', $post_id ); if ( $lang && ! isset( $_GET['lang'] ) ) { switch ( $lang ) { case 'it_IT': wp_redirect( add_query_arg( array( 'lang' => 'it'), get_permalink( $post_id ) ) ); exit; break; } } } add_filter( 'template_redirect', 'si_set_locale' );