Not: Bu, kademeli olarak genişletilecek eksik bir cevaptır
Birincil ve / veya başka herhangi bir blog bağlamının kalıcı bağlantı yapısını potansiyel olarak yok etmeden, birden çok sitede yeniden yazma kurallarını temizlemenin tek güvenilir yolu (nasıl ve neye geçiş yaptığınıza ve ne yaptığınıza bağlı olarak) böyle bir bağlamda yeniden yazma kurallarını temizlemektir. :
global $wp_rewrite;
$wp_rewrite->init(); //important...
$wp_rewrite->flush_rules();
Yukarıdakiler, yeniden yazma kurallarını oluşturmadan ve veritabanındaki değişiklikleri gerçekleştirmeden önce, verilen bağlam için doğru kalıcı bağlantı yapısının alınmasını ve ayarlanmasını sağlar.
Bu, bağlamın önemli olmadığı tek bir site için geçerli değildir, çünkü yalnızca bir bağlam vardır.
flush_rewrite_rules()
bence doğru bağlamı kabul ettiği öncülünde kusurludur, ancak switch_to_blog
kuralları tamamen değiştiren ve potansiyel olarak kuralları yıkmaya çalışırsak bizi tehlikeli topraklarda bırakan kullanımımızı dikkate almaz .
İç kısımları flush_rewrite_rules()
şöyle görünür:
function flush_rewrite_rules( $hard = true ) {
global $wp_rewrite;
$wp_rewrite->flush_rules( $hard );
}
Bunun böyle görünmemesi için bir neden düşünemiyorum:
function flush_rewrite_rules( $hard = true ) {
global $wp_rewrite;
$wp_rewrite->init(); //hello....
$wp_rewrite->flush_rules( $hard );
}
... özellikle kurucunun ne yaptığını düşündüğünüzde WP_Rewrite
? Bunu yapar ...
public function __construct() {
$this->init();
}
Bu çizgiyi daha da ileriye taşımak için ilk endişe noktanıza dokunarak,
Peki, eklenti çok sitede yeniden yazma kurallarını güvenilir bir şekilde temizlemeye nasıl devam eder :
- Site için yeni site oluşturulduğunda?
Bu işlem sırasında WordPress çekirdeğinin özellikle neyi arayacağına bakalım:
- ilk
wpmu_create_blog()
- Daha sonra hangi aramaları
install_blog()
hangi dönüş çağrılarıpopulate_options()
- ardından
populate_options()
seçenekler tablosunda varsayılan kalıcı bağlantı yapısını ayarlar
- sonra
install_blog()
koştu wp_install_defaults()
sonra çağırılır
- ardından
wp_install_defaults()
son olarak mevcut blog'a geri dönmeden önce yeni oluşturulan site için yeniden yazma kurallarını temizler restore_current_blog()
.
Dikkat edilmesi gereken nokta, wp_install_defaults()
yukarıda yukarıda önerdiğim gibi kuralları tam olarak temizler:
$wp_rewrite->init();
$wp_rewrite->flush_rules();
... çünkü permalink_structure
mevcut bağlam için doğru ve kuralların oluşturulduğundan emin olmanın tek yolu budur .
Ayrıca Github sorunu içinde ortaya çıkan problemde , kullanıcının aşağıdaki davranışı yaşama nedeni:
Yeni bir site oluşturulduğunda, gönderi düzeyi kalıcı bağlantılarını yalnızca en üst düzey sitede keser - çoğu kalıcı bağlantı yapılandırmasında, ancak hepsinde değil:
Bu 2 biçim düzgün çalışıyor.
Varsayılan - Beklendiği gibi çalışır
Gün ve İsim - Beklendiği gibi çalışır
... çünkü birincil blogda bir Gün ve Ad kalıcı bağlantı yapısı varsa /%year%/%monthnum%/%day%/%postname%/
, yeni bir site oluşturulduğunda, /%year%/%monthnum%/%day%/%postname%/
varsayılan olarak bir Gün ve Ad kalıcı bağlantı yapısına da sahiptir. shutdown
kanca kuralları .