ВОПРОС
Я занимаюсь разработкой дополнения для WordPress. И этот плагин полностью выполняет все поставленные задачи, но мне нужно, чтобы в нем было еще больше функционала. А именно – я хочу добавить функцию, которая будет переписывать адреса. Я пробовал искать решения в интернете, но это не принесло результатов. Единственное, что у меня получилось сделать – это добавить переменную строки запроса. Я реализовал это таким образом:
public function append_query_string($url)
{
$args = array(‘lang’ => $this->get_locale());
return add_query_arg($args, $url);
}
add_filter(‘page_link’, array($this, ‘append_query_string’));
add_filter(‘post_link’, array($this, ‘append_query_string’));
add_filter(‘the_permalink’, array($this, ‘append_query_string’));
Этот код уже изменяет ссылки, но я хочу, чтобы они выглядели более красиво и читабельно. Хотя-бы формата mylink.com/en/, вместо mylink.com?lang=en_us. Поэтому я попробовал воспользоваться следующим фрагментом:
public function add_query_var($vars)
{
$vars[‘lang’] = $this->get_locale();
return $vars;
}
add_filter(‘request’ , array($this, ‘add_query_var’), 10, 2 );
public function custom_permastruct()
{
add_permastruct(‘language’, ‘%lang%’, false);
}
add_action(‘wp_loaded’, array($this, ‘custom_permastruct’))
В целом, у меня есть функция, которая возвращает код языка. Это get_locate. И мне остается лишь умело воспользоваться ей, чтобы ссылка выглядела примерно так:
“mywebsite.com/ЗДЕСЬ_ЯЗЫК/…”
Насколько я разобрался, здесь необходимо зарегистрировать свою структуру ссылок. Но в этом месте уже начинаются проблемы. Помимо этого я добавил правила перезаписи, но они тоже не работают. Вот их код:
public function add_rewrite_rules()
{
$languages = $this->get_all_languages();
foreach($languages as $language) {
add_rewrite_rule(‘^’ . $language->code . ‘/([^/]*)/?$’, ‘index.php?lang=$matches[1]’, ‘top’);
}
}
add_action(‘init’, array($this, ‘add_rewrite_rules’));
Надеюсь, у вас найдется решение. А то я уже впадаю в отчаяние от того, что вообще не понимаю, что мне делать.
Полезно : Как сохранить get_template_part() в переменную(Откроется в новой вкладке браузера)
ОТВЕТ
Вообще, я думаю, что если ты правильно настроишь систему, то она сама перенаправит все запросы таким образом, что не нужно будет никаких обновлений htaccess, и зарегистрированная структура будет выглядеть нормально. Скорее всего, тебе достаточно только настроить WordPress для использования языковой структуры. И тогда можно будет нормально работать.