Intereting Posts
Переименование загрузки изображений с шириной в имени файла Что делают схемы login, login_post, admin и относительное значение? сайт с довольно постоянными ссылками, кроме разбивки на страницы Аутентификация oAuth2 в WordPress с использованием WP OAuth Server и плагинов WP API Различные шаблоны продуктов для определенной категории. WooCommerce Каковы некоторые примеры хорошо написанных плагинов, которые иллюстрируют лучшие практики плагинов WordPress? как сохранить несколько настраиваемых полей для публикации за один раз? Nginx Rewrite Rule :: index.html добавлено к каждой постоянной ссылке Редактировать функцию_события Показывать объявления в определенной категории и ее подкатегориях Fallback_cb возится с контейнерами таможенная таксономия не возвращает значение Запрос нескольких таксономий в URL-адресе приводит к неправильному архиву таксономии вернуть раздел содержимого в json в wp rest api v1 Разделить длинную форму на несколько страниц

Многоязычная тема: изменение языкового стандарта на основе URL-адреса

Я разрабатываю многоязычную тему. Я использую функцию __ () для перевода, которая работает отлично. Основной язык – английский, но второй – немецкий. Для этого второго языка я хотел бы добавить «/ de /» – Slug, поэтому я создал правило перезаписи:

function rewrite_rule_de(){ add_rewrite_rule('de/(.+?)/?$', 'index.php?pagename=$matches[1]&language=de', 'top'); } add_action('init', 'rewrite_rule_de'); 

Как вы можете видеть, я также добавил переменную get (language = de), которая должна сообщить WordPress, что отображаемая страница – немецкий. Поскольку WordPress не просто обрабатывает эту переменную get-variable, я добавил ее в query_vars:

 function language_query_var($public_query_vars){ $public_query_vars[] = 'language'; return $public_query_vars; } add_action('query_vars', 'language_query_var'); 

Я хочу изменить локаль, исходя из отображаемого языка страницы, поэтому я использую следующую функцию:

 function set_my_locale( $lang ){ if ('de' == get_query_var('language')){ return 'de_DE'; }else{ return 'en_US'; } } add_filter('locale', 'set_my_locale'); 

Моя проблема в том, что get_query_var ('language') не определен в функции set_my_locale. Но он работает, когда используется до цикла, например …

Поэтому мой вопрос просто: как я могу изменить локаль (чтобы функция __ () выводила правильный язык) на основе правила перезаписи?

Моя проблема здесь в том, что get_query_var('language') не определен в функции set_my_locale

Поскольку get_locale (который применяет locale фильтра) вызывается перед wp() (который анализирует запрос и устанавливает переменные).

Вам придется вручную проверить запрос самостоятельно:

 if ( strpos( $_SERVER['REQUEST_URI'], '/de/' ) === 0 ) { // German } else { // English } 

Обратите внимание, что ожидается, что WordPress будет запущен под корневым URL-адресом, то есть http://example.com/