Evet, bu mümkündür, ancak eklenti rewrite => array('slug' => 'post_type')
parametresini kullanarak özel bir gönderi türü oluşturuyorsa , fişi değiştirebilecek olmanız mümkün değildir .
Özel gönderi türleri oluşturulduğunda, URL yeniden yazma kuralları veritabanına yazılır. Hangi eylemin özel yazı türünün oluşturulmasını tetiklediğine bağlı olarak (örneğin init eylemi gibi), WordPress hangi değişiklikleri yapmaya çalıştığınıza bakılmaksızın yeniden yazma kurallarını siler ve özel yazı türünün sümüklerini geri yükler.
Bu, özel yazı tipleri için özel sümüklü böcek sağlayabilir. Aşağıdaki örnek, özel bir gönderi türünüz olduğunu movies
ve /movies/
bilgiyi değiştirmeye çalıştığınızı varsayar /films/
.
Tamamlanmak üzere, işte movies
özel yazı türünü tanımlamak için kullanılan temel işlev . Başvurduğunuz eklenti şöyle bir şey yapıyor olmalı:
function movies_register_post_type() {
register_post_type(
'movies',
array(
'labels' => array(
'name' => __('Movies'),
'singular_name' => __('Movie')
),
'public' => true,
'has_archive' => true,
'rewrite' => array(
'slug' => 'movies'
)
)
);
} // end example_register_post_type
add_action('init', 'movies_register_post_type');
Mevcut gönderi türüne göre kendi özel kurallarınızı belirleyerek seçenekler tablosunu değiştirebilirsiniz.
Temel olarak, bunu yapacağız:
- Mevcut kurallara uyun ve sonra kendi sümüklü böceklerimizle kendimiz yazın
- Yeni kurala, özel gönderi türünün öbeğinden daha yüksek bir öncelik verin
İşte bunu nasıl yapabilirsiniz:
function add_custom_rewrite_rule() {
// First, try to load up the rewrite rules. We do this just in case
// the default permalink structure is being used.
if( ($current_rules = get_option('rewrite_rules')) ) {
// Next, iterate through each custom rule adding a new rule
// that replaces 'movies' with 'films' and give it a higher
// priority than the existing rule.
foreach($current_rules as $key => $val) {
if(strpos($key, 'movies') !== false) {
add_rewrite_rule(str_ireplace('movies', 'films', $key), $val, 'top');
} // end if
} // end foreach
} // end if/else
// ...and we flush the rules
flush_rewrite_rules();
} // end add_custom_rewrite_rule
add_action('init', 'add_custom_rewrite_rule');
Şimdi, filmlerinize erişmek için iki yönteminiz olacak:
/movies/Back-To-The-Future
/films/Back-To-The-Future
Çok sık ateşleyeceği add_custom_rewrite_rule
için init
eyleme takılmayı tavsiye etmediğimi unutmayın . Bu sadece bir örnek. İşlevi uygulamak için daha iyi bir yer tema etkinleştirme, eklenti etkinleştirme, belki de save_post eylemi, vb. Olabilir. Ne yapmanız gerektiğine bağlı olarak, yalnızca bir veya birkaç kez ateşlemeniz gerekebilir.
Bu noktada, /movies/
sümüklü böcek kullanmak için özel yazı tipi için kalıcı bağlantıların güncellenmesini düşünebilirsiniz . Örneğin, /films/
gezinirseniz, tüm filmlerin bir listesini görürsünüz, ancak başlığın üzerine /movies/
gelindiğinde, sümüklü böcek hala kullanılmakta olduğunu ortaya çıkarır .
Bir adım daha ileri gitmek /movies/
için, /films/
meslektaşlarına yönlendirme yapmak üzere tüm bağlantıları yakalamak için teknik olarak 301 yönlendirmesini yerleştirebilirsiniz , ancak bu, ne yapmaya çalıştığınıza bağlıdır.