Pracuję nad wtyczką językową dla wordpress, która działa całkowicie. Jedyne, czego teraz brakuje, to przepisywanie adresu URL. Patrzę na wiele stron internetowych, źródeł i innych pytań na temat stackoverflow, ale nie mogę sprawić, żeby moje permalinki działały.Wordpress: uwzględnij zmienną języka w url
I udało się dodać zmienną ciąg kwerendy tak:
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'));
To zmienia moje linki do http://www.mylink.com?lang=en_us
na przykład. Co chcę teraz, jest dodanie permastruct tak, że użytkownik może mieć dość URL (np http://www.mylink.com/en/
)
Dodałem następujący fragment kodu:
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'));
Jedyne co muszę teraz jest przepisanie rządzić, jak sądzę, ale mogę się całkowicie mylić. Ktoś, kto wie, jakie jest najlepsze rozwiązanie do dodania tego permastructa?
EDIT staram się uzyskać tej pracy na miesiąc teraz i nie wydają się być w stanie uzyskać zrozumienie na permalinks, nawet ze wszystkimi poprzednimi odpowiedziami i moich własnych badań. Dlatego właśnie ponownie napotykam ten post z nagrodą. Potrzebuję: Mam funkcję (get_locale), która zwraca kod języka. Ten kod językowy powinien być zaimplementowany w moim adresie URL w następujący sposób: "http://www.mywebsite.com/LANGUAGE_HERE/..."
Wiem, że muszę zarejestrować własną strukturę do tego linku, ale tutaj wszystko idzie źle. Jakich filtrów potrzebuję i co powinienem umieścić w moich funkcjach filtra? Każda pomoc jest bardzo doceniana, ponieważ tutaj jestem bardzo zdesperowana.
EDIT 2
Więc dodałem przepisywania zasady, ale nie wydaje się do pracy albo. Trochę tu jestem zrozpaczony. W każdym razie, jest to kod dla reguł przepisywania:
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'));
To nie jest kompletne, ale otrzymasz podpowiedź, jak postępować. – Yash