Mam trochę dziwny problem z nieprawidłowym opróżnianiem reguł przepisywania.
Próbowałem użyć flush_rewrite_rules();
i flush_rewrite_rules(true);
.
Próbowałem także globalizacji $wp_rewrite
za pomocą $wp_rewrite->flush_rules();
i$wp_rewrite->flush_rules(true);
Żaden z nich nie wydaje się poprawnie przepłukiwać reguł przepisywania. Te połączenia rzeczywiście opróżniają reguły przepisywania po wywołaniu. Skąd to wiem? Korzystanie z rozwiązania do debugowania przepłukiwania reguł przepisywania .
Obecnie mam przepisane przepisy dotyczące aktywacji i dezaktywacji wtyczek. Brak problemów.
Mam stronę ustawień administracji wtyczki, aby użytkownicy mogli skonfigurować wtyczkę. Niektóre ustawienia dostosowują strukturę permalink, więc reguły przepisywania muszą być opróżnione na stronie ustawień administracyjnych wtyczki „Zapisz ustawienia”. (Wykorzystuje standard update_option();
) do zapisywania ustawień.
Chciałbym zauważyć, że w zależności od określonych ustawień tworzone są niestandardowe typy postów, aby pasowały do ustawień określonych przez użytkownika. Dlatego reguły przepisywania muszą zostać usunięte natychmiast po zapisaniu ustawień. To tutaj rzeczy nie działają poprawnie.
Powyższe rozwiązanie link do debugowania reguł przepisywania dostarczone przez @toscho
pokazuje, że to spłukuje mnóstwo reguł przepisywania. Jednak podczas odwiedzania pojedynczego elementu niestandardowego typu posta, a nawet archiwum niestandardowego typu postu, każdy zwraca 404 błędów.
Niestandardowy typ postu jest zarejestrowany poprawnie i odpowiednio. Wiem na pewno, że nie o to chodzi.
Natychmiast następuje zapisanie ustawień strony administracyjnej wtyczki. Tworzone są niestandardowe typy postów, dostosowywana jest struktura permalink, a wszystkie reguły przepisywania są usuwane.
Niestandardowe typy postów są następnie ładowane zawsze i ładowane init
normalnie.
Z jakiegoś powodu reguły przepisywania nie są poprawnie opróżniane, ponieważ, jak powiedziałem wcześniej, odwiedzanie pojedynczych lub archiwalnych sekcji niestandardowego typu posta zwraca błędy 404.
Teraz dziwne jest to, że jeśli wszystko, co robię, to po prostu odwiedzam stronę ustawień permalinków administracyjnych, a następnie wracam do interfejsu, aby wyświetlić sekcje pojedyncze lub archiwalne niestandardowego typu postów, działają one magicznie zgodnie z oczekiwaniami.
Co robi ta strona ustawień administracyjnych Permalinks, czego nie robię, co pozwala na prawidłowe przepisywanie reguł przepisywania, a moje nie?
Mam na myśli, że jako rozwiązanie tymczasowe przekierowuję użytkownika na stronę ustawień bezpośrednich linków administracyjnych po zapisaniu strony ustawień administracyjnych wtyczek, ale nie jest to idealne rozwiązanie. Wolałbym, żeby reguły przepisywania były poprawnie umieszczone w kodzie mojej wtyczki.
Czy jest jakiś punkt w WordPress, w którym opróżnianie reguł przepisywania po prostu już nie opróżnia WSZYSTKICH reguł?
admin_menu
- Strona ustawień wtyczek została dodana do administracji WordPress.
add_options_page()
- Strona ustawień wtyczek została dodana w menu Ustawienia.
Strona ustawień jest renderowana w wywołaniu zwrotnym dla add_options_page()
. Tutaj $_POST
przetwarzane są także ustawienia aktualizacji wtyczek i reguły przepisywania przy przepłukiwaniu.
Ponieważ jest to już długie pytanie, chętnie przedstawię bloki kodu (jeśli to pomoże) w linku zewnętrznym, które pomogą w uzyskaniu prawidłowej odpowiedzi.
init
która rejestruje typy postów. Pomyślałem, że ustawienia strony są zapisywane, a strona przeładuje się ... a następnie init
ponownie uruchomi hak, aby zarejestrować niezbędne typy postów. Doszedłem więc do wniosku, że typy postów będą już załadowane i wystarczyło zaktualizować opcję, a następnie opróżnić reguły przepisywania ze strony ustawień wtyczek. Wyślę odpowiedź, jak wymyśliłem rozwiązanie.
flush_rewrite_rules
, co po prostu usuwarewrite_rules
opcję i regeneruje ją, możesz otworzyć plikwp-admin/options-permalinks.php
i zobaczyć, gdzie to się dzieje. ponieważ ta operacja po prostu usuwa całą opcję, nie można częściowo opróżnić reguł.