Я разрабатываю языковой плагин для Wordpress, который работает полностью. Единственное, чего сейчас не хватает, это переписывание URL. Я смотрел на множество веб-сайтов, источники и другие вопросы о stackoverflow, но я не могу заставить мои постоянные ссылки работать.
Мне удалось добавить переменную строки запроса так:
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'));
Здесь, например, меняют ссылки на http://www.mylink.com?lang=en_us
. Теперь я хочу добавить модификацию, чтобы пользователь мог иметь довольно url (например, http://www.mylink.com/en/
)
Я добавил следующий фрагмент кода:
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'));
Единственное, что мне сейчас нужно, это правило перезаписи, я полагаю, но я мог быть совершенно неправ. Любой, кто знает, какое лучшее решение для добавления этой permastruct?
ИЗМЕНИТЬ
Я пытаюсь получить эту работу в течение месяца, и я, похоже, не могу понять, что это касается постоянных ссылок, даже со всеми предыдущими ответами и моими собственными исследованиями. Поэтому, почему я снова натыкаюсь на этот пост с щедростью. Что мне нужно: у меня есть функция (get_locale), которая возвращает код языка. Этот код языка должен быть реализован в моем URL-адресе следующим образом: "http://www.mywebsite.com/LANGUAGE_HERE/..."
Я знаю, что мне нужно зарегистрировать свою собственную структуру ссылок для этого, но здесь все идет не так. Какие фильтры мне нужны и какие функции я должен использовать в своих фильтрах? Любая помощь очень ценится, потому что я становлюсь довольно отчаянным здесь.
РЕДАКТИРОВАТЬ 2
Итак, я добавил правила перезаписи, но они, похоже, тоже не работают. Я немного отчаялся здесь. В любом случае, это код для правил перезаписи:
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'));