Catatan: ini adalah jawaban yang tidak lengkap yang akan diperluas secara bertahap
Satu-satunya cara yang dapat diandalkan untuk menyiram aturan penulisan ulang di multisite, tanpa berpotensi menghancurkan struktur permalink utama dan atau konteks blog lainnya (tergantung pada bagaimana dan apa yang Anda beralih ke dan dari) adalah untuk menyiram aturan penulisan ulang dalam konteks tertentu seperti :
global $wp_rewrite;
$wp_rewrite->init(); //important...
$wp_rewrite->flush_rules();
Di atas memastikan bahwa struktur permalink yang benar untuk konteks yang diberikan diambil dan diatur sebelum membuat aturan penulisan ulang dan melakukan perubahan pada database.
Ini tidak berlaku untuk situs tunggal di mana konteks tidak menjadi masalah, karena hanya ada satu konteks.
flush_rewrite_rules()
menurut pendapat saya cacat dalam premis bahwa itu mengasumsikan konteks yang benar, tetapi tidak memperhitungkan penggunaan kami switch_to_blog
untuk yang benar-benar mengubah konteks dan meninggalkan kami di wilayah berbahaya jika kami mencoba untuk menyiram aturan, berpotensi.
Inilah yang flush_rewrite_rules()
tampak seperti internal :
function flush_rewrite_rules( $hard = true ) {
global $wp_rewrite;
$wp_rewrite->flush_rules( $hard );
}
Saya tidak dapat memikirkan alasan mengapa tidak terlihat seperti ini:
function flush_rewrite_rules( $hard = true ) {
global $wp_rewrite;
$wp_rewrite->init(); //hello....
$wp_rewrite->flush_rules( $hard );
}
... terutama ketika Anda menganggap bahwa konstruktor WP_Rewrite
melakukan apa? Itu melakukan ini ...
public function __construct() {
$this->init();
}
Menyentuh titik perhatian pertama Anda untuk melanjutkan garis ini,
Jadi, bagaimana plugin melakukan pembilasan aturan penulisan ulang yang andal di multisite :
- Kapan situs baru dibuat, untuk situs itu?
Mari kita lihat apa yang akan disebut inti WordPress selama proses ini:
- pertama
wpmu_create_blog()
- yang kemudian memanggil
install_blog()
yang pada gilirannya panggilanpopulate_options()
- lalu
populate_options()
atur struktur tautan permanen default di tabel opsi
- setelah
install_blog()
berlari, wp_install_defaults()
lalu dipanggil
- kemudian
wp_install_defaults()
siram aturan penulisan ulang untuk situs yang baru dibuat sebelum akhirnya beralih kembali ke blog saat ini via restore_current_blog()
.
Yang penting untuk dicatat adalah bahwa wp_install_defaults()
flushes aturan persis seperti yang saya sarankan di atas:
$wp_rewrite->init();
$wp_rewrite->flush_rules();
... karena itulah satu-satunya cara untuk memastikan permalink_structure
aturan yang benar dan dibangun untuk konteks saat ini.
Juga dalam masalah yang dibuktikan dalam masalah Github , alasan mengapa pengguna mengalami perilaku berikut:
Ketika sebuah situs baru dibuat, ia merusak permalink level posting hanya di situs level atas - dalam sebagian besar konfigurasi permalink tetapi tidak semua:
2 format ini berfungsi dengan benar.
Default - Bekerja seperti yang diharapkan
Hari & Nama - Bekerja seperti yang diharapkan
... adalah karena jika blog utama memiliki struktur permalink Day & Name /%year%/%monthnum%/%day%/%postname%/
, ketika situs baru dibuat, itu juga memiliki struktur permalink Day & Name /%year%/%monthnum%/%day%/%postname%/
secara default yang mengapa tidak ada masalah penting muncul ketika plugin Yoast SEO memerah menulis ulang aturan tentang shutdown
hook.
$wp_rewrite
sehingga Anda dapat mengulang dan mengatur ulang setiap situs jaringan? Saya memiliki situs jaringan besar yang menderita beberapa masalah permalink pada plugin khusus. Membuat plugin yang menambahkan cron tampaknya berlebihan karena akan selalu mengatur ulang mereka. Mengaitkannya dengan URL khusus akan ideal tetapi saya tidak tahu bagaimana melakukannya untuk semua situs.