Nota: questa è una risposta incompleta che verrà espansa in modo incrementale
L'unico modo affidabile per svuotare le regole di riscrittura in più siti, senza potenzialmente distruggere la struttura del permalink del contesto principale e / o di qualsiasi altro blog (a seconda di come e cosa si passa da e verso) è svuotare le regole di riscrittura in un determinato contesto in questo modo :
global $wp_rewrite;
$wp_rewrite->init(); //important...
$wp_rewrite->flush_rules();
Quanto sopra garantisce che la struttura del permalink corretta per il dato contesto sia recuperata e impostata prima di costruire le regole di riscrittura e confermare le modifiche al database.
Ciò non si applica al singolo sito in cui il contesto non è importante, poiché esiste un solo contesto.
flush_rewrite_rules()
a mio avviso è imperfetto nella premessa che assume il contesto corretto, ma non tiene conto del nostro uso switch_to_blog
per il quale cambia completamente il contesto e ci lascia in un territorio pericoloso se proviamo a svuotare le regole, potenzialmente.
Ecco l' flush_rewrite_rules()
aspetto degli interni di :
function flush_rewrite_rules( $hard = true ) {
global $wp_rewrite;
$wp_rewrite->flush_rules( $hard );
}
Non riesco a pensare a un motivo per cui non dovrebbe apparire così:
function flush_rewrite_rules( $hard = true ) {
global $wp_rewrite;
$wp_rewrite->init(); //hello....
$wp_rewrite->flush_rules( $hard );
}
... soprattutto se si considera che il costruttore di WP_Rewrite
cosa fa? Lo fa ...
public function __construct() {
$this->init();
}
Toccando il tuo primo punto di preoccupazione per favorire questa linea di pensiero,
Quindi, come farebbe il plugin a scaricare in modo affidabile le regole di riscrittura in più siti :
- Quando viene creato un nuovo sito, per il sito?
Diamo un'occhiata a ciò che il core di WordPress chiamerà in particolare durante questo processo:
- primo
wpmu_create_blog()
- che quindi chiama
install_blog()
che a sua volta chiamapopulate_options()
- quindi
populate_options()
imposta la struttura di permalink predefinita nella tabella delle opzioni
- dopo che
install_blog()
ha funzionato, wp_install_defaults()
quindi viene chiamato
- quindi
wp_install_defaults()
scarica le regole di riscrittura per il sito appena creato prima di tornare infine al blog corrente tramite restore_current_blog()
.
È importante notare che wp_install_defaults()
scarica le regole esattamente come ho suggerito sopra:
$wp_rewrite->init();
$wp_rewrite->flush_rules();
... perché è l'unico modo per essere sicuri che le permalink_structure
regole e le regole siano corrette per il contesto attuale.
Anche nel problema evidenziato nel problema di Github , il motivo per cui l'utente ha riscontrato il seguente comportamento:
Quando viene creato un nuovo sito, i permalink di livello post vengono interrotti solo sul sito di livello superiore, nella maggior parte delle configurazioni permalink, ma non in tutti:
Questi 2 formati funzionano correttamente.
Predefinito: funziona come previsto
Giorno e nome: funziona come previsto
... è perché se il blog principale ha una struttura permalink Day & Name /%year%/%monthnum%/%day%/%postname%/
, quando viene creato un nuovo sito, ha anche una struttura permalink Day & Name /%year%/%monthnum%/%day%/%postname%/
per impostazione predefinita, motivo per cui nessun problema rilevante si presenta quando il plug-in Yoast SEO scarica la riscrittura regole sul shutdown
gancio.