Tworzę wtyczkę Wordpress. Jakie są typowe rzeczy, które powinienem uwzględnić w funkcji odinstalowywania?
Na przykład, czy powinienem usunąć tabele utworzone w funkcji instalacji?
Czy usuwam wpisy opcji?
Coś jeszcze?
plugins
activation
uninstallation
deactivation
redconservatory
źródło
źródło
Odpowiedzi:
Istnieją trzy różne haki. Wyzwalają w następujących przypadkach:
Jak uruchomić wyzwalacz, działa bezpiecznie podczas scenariuszy
Poniżej pokazano właściwe sposoby bezpiecznego przechwytywania funkcji zwrotnych uruchamianych podczas wymienionych działań.
Jak możesz użyć tego kodu we wtyczce, która używa
Pokażę trzy różne wtyczki demonstracyjne , które możesz sprawdzić, a następnie zaimplementuj kod we własnych wtyczkach.
Ważna uwaga z góry!
Ponieważ ten temat jest niezwykle trudny i bardzo szczegółowy i zawiera ponad tuzin skrzynek, odpowiedź ta nigdy nie będzie idealna. Z czasem będę go poprawiać, więc sprawdzaj regularnie.
(1) Aktywuj / dezaktywuj / odinstaluj wtyczki.
Do wywołania zwrotne instalacji wtyczki są wyzwalane przez rdzeń i masz żadnego wpływu na sposób rdzeń to robi. Należy pamiętać o kilku rzeczach:
echo/print
nic (!) Podczas wywołań zwrotnych instalacji. Doprowadzi to doheaders already sent
wiadomości, a rdzeń zaleci dezaktywację i usunięcie wtyczki ... nie pytaj: wiem ...exit()
oświadczenia do wszystkich różnych wywołań zwrotnych, abyś mógł uzyskać wgląd w to, co naprawdę się dzieje. Po prostu odkomentuj je, aby zobaczyć, jak działają.__FILE__ != WP_PLUGIN_INSTALL
i (jeśli nie: przerwanie!), Aby naprawdę odinstalować wtyczkę. Polecam po prostu wywoływaćon_deactivation()
wywołania zwrotne podczas programowania, abyś zaoszczędził czas na odzyskanie wszystkiego. Przynajmniej tak robię.defined( 'ABSPATH' ) OR exit;
wp_die()
ekranem z prośbą o odpowiednie uprawnienia (i jeśli chcesz spróbować ponownie ... tak, pewnie ), gdy pojawi się błąd. Dzieje się tak, gdy rdzeń przekierowuje cię, ustawia prąd$GLOBALS['wp_list_table']->current_action();
na,error_scrape
a następnie sprawdza polecającegocheck_admin_referer('plugin-activation-error_' . $plugin);
, gdzie$plugin
jest$_REQUEST['plugin']
. Przekierowanie odbywa się więc w połowie ładowania strony, a ten przewodowy pasek przewijania i ekran matrycy pozwalają wyświetlić żółte okno powiadomienia / komunikatu administratora. Jeśli tak się stanie: zachowaj spokój i po prostu wyszukaj błąd przy niektórychexit()
i debugowaniu krok po kroku.(A) Wtyczka funkcji zwykłych
Pamiętaj, że może to nie zadziałać, jeśli odhaczysz wywołania zwrotne przed definicją funkcji.
(B) Architektura oparta na klasie / OOP
Jest to najczęstszy przykład we współczesnych wtyczkach.
(C) Architektura oparta na klasie / OOP z zewnętrznym obiektem instalacji
Ten scenariusz zakłada, że masz główny plik wtyczki i drugi plik o nazwie
setup.php
w podkatalogu plugin o nazwieinc
:~/wp-content/plugins/your_plugin/inc/setup.php
. Działa to również wtedy, gdy folder wtyczki znajduje się poza domyślną strukturą folderów WP, a także gdy nazwa katalogu zawartości zostanie zmieniona lub w przypadkach, gdy plik instalacyjny ma inną nazwę. Tylkoinc
folder musi mieć tę samą nazwę i lokalizację względem katalogu głównego wtyczek.Uwaga: Możesz po prostu wziąć trzy
register_*_hook()*
funkcje i klasy i upuścić je we wtyczce.Główny plik wtyczki:
Plik instalacyjny:
(2) Aktualizacje wtyczek
Jeśli napiszesz wtyczkę, która ma własną tabelę DB lub opcje, mogą istnieć scenariusze, w których musisz coś zmienić lub uaktualnić.
Niestety do tej pory nie ma możliwości uruchomienia czegoś na instalacji wtyczki / motywu lub aktualizacji / aktualizacji. Chętnie obejdziemy to: Podłącz niestandardową funkcję do niestandardowej opcji (tak, jest kiepska - ale działa).
Źródło
Ta funkcja aktualizacji nie jest tak ładnym / dobrze napisanym przykładem, ale jak powiedziano: To przykład, a technika działa dobrze. Poprawi to w późniejszej aktualizacji.
źródło
check_admin_referer()
. Nie muszą się dezynfekować, ponieważ rdzeń nie robi tego sam, i tak czy inaczej porównałby to z niezauczonymi$_REQUEST
wartościami. Ale jeśli z tego powodu zaczną płakać jak małe dziewczynki, po prostu użyjfilter_var()
lubesc_attr()
na nim.Aby przetestować obecny system pod kątem wymaganych funkcji, takich jak wersja PHP lub zainstalowane rozszerzenia, możesz użyć czegoś takiego:
Przetestuj z czekiem dla PHP 5.5:
źródło
register_activation_hook
- dlaczego go nie użyć? Czy ten ogień będzie strzelał przed czy poregister_activation_hook
i będzieregister_activation_hook
strzelał, nawet jeśli powyższe nie przejdzie?add_action( 'admin_notices', 't5_check_admin_notices', 0 );
do haka aktywacyjnego, a wtyczka aktywuje się bez przeprowadzania kontroli. . .admin_notices
.