'deki dil değişkenini içeriyor Tamamen çalışan wordpress için bir dil eklentisi geliştiriyorum. Şu anda eksik olan tek şey, url-yeniden yazma. Birçok web sitesine, kaynağa ve yığın sorgulama ile ilgili diğer sorulara bakıyordum, ancak izinlerimin işe yaraması mümkün görünmüyor.Wordpress: url
ben şöyle bir sorgu dize değişkeni eklemek mümkün olmuştur:
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'));
Bu, örneğin http://www.mylink.com?lang=en_us
benim bağlantıları değiştirir. Ne, şimdi istediğiniz kullanıcı olabilir böylece bir permastruct eklemektir oldukça url (örn http://www.mylink.com/en/
) Ben aşağıdaki kod parçasını eklemiş
:
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'));
Şu an ihtiyacım olan tek şey bir yeniden yazma olduğunu kuralı, sanırım, ama tamamen yanlış olabilirim. Bu permastruct eklemek için en iyi çözümün ne olduğunu bilen var mı?
DÜZENLEME Şimdi bir ay boyunca bu çalışma almak için uğraşıyorlar ve ben bile önceki tüm cevaplar ve kendi araştırma ile, kalıcı bir kavrayışa elde edebilmek için görünmüyor. İşte bu yüzden bu yazıyı yine bir ödülle çarpıyorum. İhtiyacım olan şey: Bir dil kodu döndüren bir işlevim (get_locale) var. Bu dil kodu, URL'mde şu şekilde uygulanmalıdır: "http://www.mywebsite.com/LANGUAGE_HERE/..."
Bunun için kendi permalink yapısını kaydetmem gerektiğini biliyorum, ancak her şeyin yanlış gittiği yer burası. Hangi filtrelere ihtiyacım var ve filtre işlevlerime ne yazmalıyım? Herhangi bir yardım büyük beğeni topluyor, çünkü burada oldukça çaresizleşiyorum. 2
DÜZENLEME Bu yüzden kuralları yeniden eklendi, ama onlar da çalışmak için görünmüyor. Burada biraz çaresizim. Neyse, bu yeniden yazma kuralları için kodudur:
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'));
Bu işlem tamamlanmadı, ancak nasıl devam edeceğinize dair ipucu alacaksınız. – Yash