Sto riscontrando un problema un po 'strano con le regole di riscrittura che non funzionano correttamente.
Ho provato a usare flush_rewrite_rules();
e flush_rewrite_rules(true);
.
Ho anche provato a globalizzare $wp_rewrite
usando $wp_rewrite->flush_rules();
e$wp_rewrite->flush_rules(true);
Nessuno dei due sembra svuotare correttamente le regole di riscrittura. Quelle chiamate stanno effettivamente svuotando le regole di riscrittura quando vengono chiamate. Come faccio a saperlo? Utilizzando la soluzione per il debug risciacquo flushing delle regole .
Attualmente, ho riscritto le regole scaricate sull'attivazione e la disattivazione del plugin. Nessun problema lì.
Ho una pagina delle impostazioni di amministrazione del plugin per gli utenti per configurare il plugin. Alcune impostazioni regolano la struttura del permalink, pertanto è necessario scaricare le regole di riscrittura nella pagina delle impostazioni di amministrazione del plug-in "Salva impostazioni". (Utilizza lo standard update_option();
) per il salvataggio delle impostazioni.
Vorrei sottolineare che, a seconda delle impostazioni specificate, vengono creati tipi di posta personalizzati in base alle impostazioni specificate dall'utente. Pertanto, le regole di riscrittura devono essere scaricate immediatamente dopo il salvataggio delle impostazioni. Questo è dove le cose non funzionano in modo appropriato.
La soluzione di collegamento sopra per il debug delle regole di riscrittura fornita da @toscho
sta mostrando che sta scaricando tonnellate di regole di riscrittura. Tuttavia, quando si visita l'elemento singolare del tipo di post personalizzato, o addirittura l'archivio del tipo di post personalizzato, ognuno restituisce come errori 404.
Il tipo di post personalizzato è registrato correttamente e in modo appropriato. So per certo che non è questo il problema.
Immediatamente dopo con il salvataggio delle impostazioni della pagina di amministrazione del plugin. Vengono creati i tipi di post personalizzati, la struttura del permalink viene modificata e si tenta di svuotare tutte le regole di riscrittura.
I tipi di post personalizzati vengono quindi caricati sempre e caricati init
come al solito.
Per qualche ragione, le regole di riscrittura non stanno scaricando correttamente, perché come ho detto prima, visitando sezioni singole o di archivio del tipo di post personalizzato restituisce errori 404.
Ora la parte strana, se tutto ciò che faccio è semplicemente visitare la pagina delle impostazioni dei permalink di amministrazione e quindi tornare al front-end per visualizzare sezioni singole o di archivio del tipo di post personalizzato, funzionano magicamente come previsto.
Che cosa fa quella pagina delle impostazioni dei permalink di amministrazione che non sto facendo che consente alle regole di riscrittura di svuotare in modo appropriato e il mio no?
Voglio dire, come soluzione temporanea, sto reindirizzando l'utente alla pagina delle impostazioni dei permalink di amministrazione dopo aver salvato la pagina delle impostazioni di amministrazione del plug-in, ma questa non è una soluzione ideale. Preferirei che le regole di riscrittura si scarichino correttamente nel codice del mio plugin.
C'è un certo punto in WordPress in cui svuotare le regole di riscrittura non scarica più TUTTE le regole?
admin_menu
- La pagina delle impostazioni del plugin viene aggiunta all'amministrazione di WordPress.
add_options_page()
- La pagina delle impostazioni del plugin viene aggiunta nel menu Impostazioni.
La pagina delle impostazioni viene visualizzata nel callback per add_options_page()
. Questo è anche il punto in cui $_POST
viene elaborato per aggiornare le impostazioni del plug-in e svuotare le regole di riscrittura.
Dal momento che questa è già una lunga domanda, sarei disposto a fornire blocchi di codice (se aiuta) in un collegamento fuori sede che aiuta a produrre una risposta valida.
init
cui registra i tipi di posta. Ho pensato, le impostazioni della pagina venivano salvate e la pagina si sarebbe ricaricata ... quindi sparando di init
nuovo il gancio per registrare i tipi di post necessari. Quindi ho pensato che i tipi di post sarebbero già stati caricati, e tutto ciò che dovevo fare era aggiornare l'opzione, quindi svuotare le regole di riscrittura dalla mia pagina delle impostazioni del plugin. Pubblicherò una risposta su come ho trovato una soluzione.
flush_rewrite_rules
, che elimina solo l'rewrite_rules
opzione e la rigenera, puoi aprire il filewp-admin/options-permalinks.php
e vedere dove questo accade. poiché questa operazione elimina l'intera opzione, non è possibile svuotare parzialmente le regole.