Błąd inicjalizacji wtyczki podpisywania Wtyczka nie została zainstalowana. Instalowanie wtyczki CryptoPro CSP w przeglądarce Mozilla Firefox. sposób. Wyłącz dodatkowe wtyczki

Zasady instalacji wtyczki CryptoPro CSP w Mozilla Firefox różnią się w zależności od wersji przeglądarki - 52 i nowszej lub starszej.

Mozilla Firefox w wersji poniżej 52

Aby podpisywać dokumenty w Mozilla Firefox:

  • Wyłącz automatyczne aktualizacje. Aby to zrobić, przejdź do „Menu” ⇒ „Ustawienia” ⇒ „Dodatkowe” ⇒ „Aktualizacje” (rys. 1).
Ryż. 1. Lokalizacja ustawień aktualizacji w Mozilla Firefox
  • Zainstaluj wersję 51.0.1 z oficjalnej strony Mozilla Firefox.

Aby zainstalować wtyczkę CryptoPro Browser, wykonaj następujące kroki:

  1. Pobierz instalator z oficjalnej strony internetowej firmy Crypto-Pro www.cryptopro.ru/products/cades/plugin i uruchom plik wykonywalny.

2. W oknie instalacji wtyczki CryptoPro Browser kliknij przycisk „Tak” (rys. 2-a).

Ryż. 2-a. Instalowanie wtyczki CryptoPro Browser

3. Poczekaj na zakończenie instalacji (rys. 2-b).

Ryż. 2b. Instalowanie wtyczki CryptoPro Browser

4. Kliknij przycisk „OK” i uruchom ponownie przeglądarkę internetową (rys. 2-c).

Ryż. 2 cale Instalowanie wtyczki CryptoPro Browser

Ważny

Po zainstalowaniu CryptoProPrzeglądarka wtyczka- wkonieczne jest sprawdzenie, czy dodatek do pracy z podpisem elektronicznym CryptoPro EDS Browser plug-in dla przeglądarek jest zainstalowany w przeglądarce.

5. Otwórz przeglądarkę, naciśnij przycisk „Menu przeglądarki”, wybierz sekcję „Dodatki” (rys. 3).

Ryż. 3. Menu przeglądarki

6. Otwórz zakładkę „Wtyczki”. Naprzeciwko wtyczki „CryptoPro CAdES NPAPI Browser Plug-in” w menu rozwijanym wybierz opcję „Zawsze włączaj” (rys. 4).


Ryż. 4. Zarządzanie dodatkami

7. Uruchom ponownie przeglądarkę.

Mozilla Firefox w wersji 52 i nowszych

Aby zainstalować wtyczkę CryptoPro Browser, wykonaj następujące czynności:

  1. Podążaj za linkiem www.cryptopro.ru/products/cades/plugin , a następnie wybierz „rozszerzenie przeglądarki” (rys. 5).


Ryż. 5. Strona internetowa CryptoPro

2. Kliknij „Zezwól” (rys. 6).


Ryż. 6. Poproś o rozwiązanie

3. Kliknij „Dodaj” (rys. 7).

Wysłany dnia 02.03.2016 w

Informacje ogólne

API wtyczki polega na wywoływaniu operacji asynchronicznych zaimplementowanych w oparciu o obiekty obietnicy. Możesz przeczytać więcej o specyfikacji użytej przy implementacji wtyczki. Obietnice wymagają dwóch rodzajów obsługi:

  • onFulfilled- wyzwalane, gdy obietnica jest w stanie „sukcesu”;
  • onRejected są zwalniane, gdy obietnica jest w stanie „nieudana”.
Ogólna metoda ustawiania obsługi jest następująca: obietnica.then(onFulfilled, onRejected)

Inicjalizacja wtyczki

Aby pracować z wtyczką, musisz wywołać funkcję inicjującą komponentu PKCS#11 plugin.initPKCS11 . Ta funkcja przyjmuje jako parametry listę nazw modułów (w postaci tablicy). Możesz zobaczyć listę dostarczonych modułów. Jeśli moduły nie zostaną określone, wtyczka zainicjuje wszystkie moduły.
Jeśli konieczne jest określenie, którzy dostawcy usług kryptograficznych mają być używani podczas działania modułu capi, należy użyć następującego formatu notacji:

Capi:(prov1),(tryb):(prov2),(tryb)

W tym wpisie:

  • prov1, prov2 - nazwa dostawcy krypto. Obecnie obsługiwane są następujące wartości:
    • Crypto-Pro GOST R 34.10-2001 Dostawca usług kryptograficznych;
    • Crypto-Pro GOST R 34.10-2012 Dostawca usług kryptograficznych;
    • Crypto-Pro GOST R 34.10-2012 Silny dostawca usług kryptograficznych;
    • Dostawca usług kryptograficznych Signal-COM CPGOST;
    • Signal-COM GOST R 34.10-2012 (256) Dostawca usług kryptograficznych;
    • Signal-COM GOST R 34.10-2012 (512) Dostawca usług kryptograficznych;
    • Dostawca usług kryptograficznych Infotecs.
  • tryb – tryb wyświetlania okna wprowadzania kodu PIN. Może przyjmować następujące wartości:
  • 0 – domyślny tryb dostarczany przez dostawcę krypto;
  • 1 - wyświetlenie natywnego okna dostawcy kryptograficznego.
    Uwaga: podczas pracy z Crypto-Pro w systemie Linux wyświetlanie natywnego okna dostawcy kryptograficznego nie jest dostępne.
  • 2 – wyświetlenie okna w interfejsie wtyczki.
    Uwaga: podczas pracy z Signal-COM wyświetlanie okna w interfejsie wtyczki jest niedostępne.

Aby uzyskać klucze z pamięci systemu Windows, określ jako dostawcę , a tryb to Mój.
Przykład uruchomienia wszystkich modułów:

Plugin.initPKCS11(["ISBC ESMART", "Aladdin R.D. Unified JaCarta", "Rutoken", "SafeNet", "capi:Crypto-Pro GOST R 34.10-2001 Dostawca usług kryptograficznych,0:Crypto-Pro GOST R 34.10-2012 Dostawca usług kryptograficznych,0:Crypto-Pro GOST R 34.10-2012 Silny dostawca usług kryptograficznych,0:Signal-COM CPGOST Dostawca usług kryptograficznych,0:Signal-COM GOST R 34.10-2012 (256) Dostawca usług kryptograficznych,0:Signal-COM GOST R 34.10-2012 (512) Dostawca usług kryptograficznych,0:Dostawca usług kryptograficznych Infotecs,0: ,Mój"])

Przykład zainicjowania modułu w celu pobrania kluczy z pamięci systemu Windows:

Plugin.initPKCS11(["wielkość: ,Mój"])

Po pomyślnej inicjalizacji funkcja zwraca obiekt (w dalszej części za pomocą mechanizmu obietnicy), który zawiera moduły i funkcje getCertsForSign.

Przeglądanie listy modułów i ich statusu

Aby wyświetlić listę modułów i ich stan, wywołaj funkcję modułów.
Przykład żądania:

Pkcs11.modules.then(onFulfilled, onRejected);

Przykład odpowiedzi funkcji (podane są przerwy dla czytelności):

[ ( "enable": true, "name": "Aladdin R.D. Unified JaCarta" ), ( "enable": true, "name": "Rutoken ECP" ), ( "enable": false, "error": "100 :nie udało się załadować modułu p11", "name": "ISBC ESMART" ) ]

Przeglądanie listy certyfikatów

Aby wyświetlić listę wykrytych certyfikatów, wywołaj funkcję getCertsForSign. Jako parametr wywołania funkcji należy określić, czy używać trybu równoległego odpytywania zainicjowanych modułów PKCS#11:

  • PRAWDA– dostęp równoległy do ​​modułów (zalecany tryb);
  • fałszywy- Sekwencyjny dostęp do modułów.
Lista certyfikatów to tablica (JavaScript Array), której elementami są obiekty certyfikatów. Funkcje full_info , cms_sign_on_it i start_signing można wykonać na obiekcie certyfikatu.

Przeglądanie informacji o konkretnym certyfikacie

Aby wyświetlić dane o konkretnym certyfikacie, należy wywołać właściwość full_info, która zwraca informacje o certyfikacie jako obiekt json. Zawiera następujące opcje:

  • sn– numer seryjny certyfikatu;
  • Przedmiot– dane dotyczące przedmiotu, na który wystawiono ten certyfikat podpisu elektronicznego. Zwracany jako json w formacie „parametr: wartość”, gdzie parametrem jest nazwa odpowiedniego identyfikatora obiektu (OID). Wszystkim standardowym identyfikatorom obiektów nadawane są wspólne oznaczenia, takie jak CN (nazwa zwyczajowa).
  • emitent– dane dotyczące wystawcy certyfikatu klucza podpisu elektronicznego. Zwracany jako json w formacie „parametr: wartość”, gdzie parametrem jest nazwa odpowiedniego identyfikatora obiektu (OID). Wszystkie standardowe identyfikatory obiektów mają wspólne oznaczenia;
  • nie przed– czas rozpoczęcia ważności certyfikatu (typ danych – ciąg w formacie ASN1_TIME);
  • nie później– czas ważności certyfikatu (typ danych – ciąg w formacie ASN1_TIME);
  • key_usage– informacja o przeznaczeniu klucza, zwracana w postaci tablicy.
Czas rozpoczęcia/zakończenia certyfikatu w formacie ASN1_TIME można przekonwertować na format standardowy za pomocą nowej funkcji Date(ASN1_TIME).

Przeglądanie danych na kluczu podpisu elektronicznego

Aby wyświetlić dane o określonym kluczu podpisu elektronicznego certyfikatu, należy wywołać metodę token_info. Metoda zwraca obiekt json z następującymi danymi:

  • etykieta– nazwa pojemnika na klucze urządzenia podpisu elektronicznego;
  • ID producenta– identyfikator producenta podpisu elektronicznego;
  • Model– wzór środka podpisu elektronicznego;
  • numer seryjny– numer seryjny narzędzia do podpisu elektronicznego.
W przypadku kluczy, które działają przez moduł capi, zwracane dane mają inną postać. Atrybut modelu zawsze przyjmuje wartość "capi", atrybut serialNumber jest nieobecny, identyfikator producenta odpowiada nazwie dostawcy usług kryptograficznych, a etykieta jest nazwą kontenera.

Operacja podpisywania wybranym certyfikatem

Prosty tryb podpisywania

Aby podpisać ciąg znaków przy użyciu wybranego certyfikatu, należy wywołać funkcję cms_sign_on_it, która przyjmuje następujące parametry wejściowe:

  • linia podpisu;
  • typ podpisu - czy podpis jest dołączony (musi być przekazany true) czy odłączony (false).
W odpowiedzi funkcja zwraca ciąg znaków z podpisem w formacie dołączonym/odłączonym CAdES-BES/PKCS#7.
Przykład wywołania funkcji, która powinna zostać wywołana na obiekcie certyfikatu: cms_sign_on_it("1234", 3, true).then(function(cms)(console.log(cms)));

Zaawansowany tryb podpisywania

Tryb zaawansowany umożliwia:

  • podpisywać dane o dużej objętości, takie jak pliki;
  • podpisuj wiele plików bez ponownego żądania kodu PIN.

Aby podpisać dane za pomocą wybranego certyfikatu, należy najpierw zainicjować obiekt osoby podpisującej za pomocą funkcji start_signing w obiekcie certyfikatu. Parametry funkcji:

  • typ podpisu - czy podpis jest dołączony (konieczne jest podanie wartości true) czy odłączony (false);
  • ilość prób wprowadzenia kodu PIN (np. wartość „1” oznacza, że ​​użytkownik ma tylko jedną próbę, po której funkcja zwraca błąd).

Metody będą dostępne w obiekcie podpisującego:

  • add_data_in_hex(hexDataString) - przyjmuje dane jako dane wejściowe w postaci ciągu hex;
  • add_data_in_base64(base64DataString) - przyjmuje dane jako dane wejściowe w postaci ciągu base64;
  • add_data_in_string(stringData) - przyjmuje dane jako dane wejściowe w postaci ciągu utf-8;
  • free() - zwraca true/false , co pozwala sprawdzić, czy certyfikat jest gotowy do podpisania. Jest wymagany w przypadku, gdy na różnych certyfikatach wykonywanych jest kilka iteracji podpisu. Innymi słowy, jeśli podpisujesz sekwencyjnie na wielu certyfikatach, musisz wywołać tę metodę przed podpisaniem i upewnić się, że zwraca true ;
  • finish() - finalizuje podpis i zwraca go w formacie CAdES-BES / PKCS#7.
W odpowiedzi funkcja zwraca ciąg znaków z podpisem w formacie dołączonym/odłączonym CAdES-BES/PKCS#7.

Podpisywanie linii

Przykład polecenia, które pozwala podpisać ciąg:

Signer.add_data_in_string("1234").then(function(res)( return signer.finish();)).then(function(cms)(console.log(cms)));

W tym poleceniu „1234” jest ciągiem do podpisania.

Ustawianie wielu podpisów

Po sfinalizowaniu podpisu obiekt osoby podpisującej powraca do swojego pierwotnego stanu. W ramach sesji można go ponownie wykorzystać do podpisania innych danych, takich jak nowy plik. W takim przypadku kod PIN nie będzie ponownie wymagany.

Aby podpisać się na innym certyfikacie, obiekt osoby podpisującej musi zostać wyczyszczony. W większości przeglądarek ten obiekt jest czyszczony automatycznie po opuszczeniu zakresu. Jednak w programie Internet Explorer zdarzają się sytuacje, w których osoba podpisująca nie jest usuwana, co skutkuje błędem. Aby uniknąć błędu, zaleca się jawne wyczyszczenie signer.free() . Operację tę można przeprowadzić we wszystkich przeglądarkach w celu ujednolicenia kodu. Przykład podpisania certyfikatu z wyczyszczeniem obiektu podpisującego:

Function sign(cert, info) ( function successCms(signature) ( alert(signature); ) cert.start_signing(false, 3) .then(function(signer) ( signer.add_data_in_base64("MTIzNDU2") .then(function() ( var data = signer.finish(); var free = signer.free(); zwróć dane; ), e) .then(successCms, e; ), e); )

Podpisywanie dużego pliku

Function readFileByChunk(file, cbToRead, cbToFinish) ( var fileSize = file.size; var chunkSize = 1024*1024; // bajty var offset = 0; var chunkReaderBlock = null; var self = this; var readEventHandler = function(evt) ( if (evt.target.error == null) ( cbToRead(evt.target.result, offset, fileSize); offset += evt.target.result.byteLength; ) else ( console.error("Błąd odczytu: " + evt .target.error); showError("Błąd odczytu pliku: " + evt.target.error); return; ) if (offset >= fileSize) ( cbToFinish() return; ) // do następnego chunk chunkReaderBlock(offset, chunkSize , plik); ) chunkReaderBlock = function(_offset, _chunkSize, _file) ( var r = new FileReader(); if (_file.slice) ( var blob = _file.slice(_offset, _chunkSize + _offset); ) else if (_file .webkitSlice) ( var blob = _file.webkitSlice(_offset, _chunkSize + _offset); ) else if (_file.mozSlice) ( var blob = _file.mozSlice(_offset, _chunkSize + _offset); ) r.onload = readEventHand readAsArrayBuffer(blo b); ) // rozpocznij odczytywanie pierwszego bloku chunkReaderBlock(offset, chunkSize, file); )

Należy zauważyć, że skoro podpisywanie odbywa się lokalnie, dla późniejszego przeniesienia wybranego przez użytkownika pliku i podpisu na serwer, konieczne jest zaimplementowanie odpowiedniej logiki po stronie strony internetowej.

Na niektórych stronach masz do czynienia z certyfikatami i kluczami sprzętowymi, a najpierw musisz rozwiązać różne problemy, aby to zadziałało. W tym artykule porozmawiamy o błędzie wtyczki CAdES, gdy jest ona ładowana, a obiekty nie są tworzone.

Rozwiązywanie problemu z wtyczką

Jak wynika z treści błędu, sama wtyczka CAdES wydaje się być załadowana; jest w systemie, ale coś przeszkadza w jego działaniu. Zwykle problem występuje w starszych wersjach Firefoksa do wersji 51 (w nowszych wersjach wtyczka po prostu nie działa). W tym artykule za przykład posłuży elektroniczna platforma transakcyjna i istnieją trzy sposoby rozwiązania problemu.

Metoda 1: Włącz wtyczkę dla bieżącej witryny

Włączenie wtyczki tylko dla bieżącej witryny jest uzasadnione ze względów bezpieczeństwa, gdy przeglądarka jest używana do celów osobistych i otwieranie różnych stron. A także, jeśli potrzebujesz wykonać zadanie z kluczami elektronicznymi tylko raz.

Metoda 2: Włącz wtyczkę dla wszystkich witryn

Jeśli kwestia bezpieczeństwa nie jest bardzo niepokojąca, ponieważ. komputer jest używany wyłącznie do pracy w kilku witrynach, można włączyć wtyczkę CAdES dla wszystkich witryn. Wtedy zadziała natychmiast po załadowaniu strony. Może to również pomóc, jeśli nie możesz znaleźć ciemnoszarego pola, aby włączyć wtyczkę.

Metoda 3: Korzystanie z innej przeglądarki

Z nieprzewidzianych powodów wtyczka CAdES może nadal odmawiać działania. Dlatego innym sposobem rozwiązania błędu jest użycie innej przeglądarki. Większość przeglądarek bazuje na silniku Chromium, wszystkie są nieco podobne, więc spójrzmy na przykład Google Chrome.


Wniosek

Jak widać, istnieje kilka sposobów rozwiązania problemu z nieprawidłowym działaniem wtyczki. W zależności od swoich preferencji i okoliczności możesz wybrać ten, który najbardziej Ci odpowiada.

) w sekcji "Produkty" -> "Wtyczka CryptoPro EDS Browser"

Po uruchomieniu pobranego pliku system poprosi o podniesienie uprawnień administratora systemu. Instalacja bez uprawnień administratora nie jest możliwa.

Po instalacji pamiętaj o ponownym uruchomieniu przeglądarki! Czasami (w przypadku korzystania z Chrome) wymagane jest ponowne uruchomienie systemu, ponieważ. zamknięcie wszystkich okien chrome nie powoduje wyładowania przeglądarki z pamięci RAM we wszystkich przypadkach.

Dodatkowe ustawienia dla FireFox w wersji 52.0 i nowszych

Nie zapomnij zainstalować wtyczki

Aby wtyczka działała w FireFox począwszy od wersji 52, musisz zainstalować najnowszą wersję wtyczki (co najmniej 2.0.12888) (patrz ) oraz specjalne rozszerzenie dla FireFox.

Aby zainstalować rozszerzenie, przejdź z FireFoxa do linku . Po przejściu zostaniesz poproszony o zainstalowanie rozszerzenia dla FireFox - musisz potwierdzić instalację, klikając Zainstaluj (Zainstaluj).

Dodatkowe ustawienia dla wersji FireFox starszych niż 52.0, FireFox ESR (Błąd: Wtyczka została załadowana, ale nie utworzono żadnych obiektów)

Po zainstalowaniu dodatku jego uruchomienie jest możliwe tylko po potwierdzeniu przez użytkownika. Możesz zezwolić na uruchomienie dodatku tylko dla bieżącej witryny lub na stałe dla wszystkich witryn

Opcja 1: ustawienie uprawnień do korzystania z dodatku tylko dla bieżącej strony (https://www.site)

Kiedy wystąpił błąd: Wtyczka jest załadowana, ale obiekty nie są tworzone zwróć uwagę na pasek adresu - pojawiła się w nim ikona dodatku:

Kliknij tę ikonę - zostaniesz poproszony o uruchomienie dodatku i zapamiętanie uprawnień do uruchamiania dodatku dla tej witryny na zawsze.

Opcja 2: ustawienie uprawnień do korzystania z dodatku dla wszystkich witryn

Otwórz stronę z zainstalowanymi dodatkami FireFox

Znajdź wtyczkę CryptoPro CAdES NPAPI Browser Plug-in na liście dodatków i zmień jej tryb uruchamiania na „Always On”

Dodatkowe ustawienia Opery

Otwórz stronę z wyszukiwaniem dodatku do zainstalowania:

Wpisz „CryptoPro” w pasku wyszukiwania – zostanie znalezione rozszerzenie „CryptoPro Extension for CAdES Browser Plug-in”. Kliknij „Dodaj do Opery”, aby zainstalować.

Dodatkowe ustawienia przeglądarki Yandex

W przypadku przeglądarki Yandex należy postępować podobnie jak w przypadku Opery.

Dodatkowe ustawienia Google Chrome: uprawnienia zainstalowanego dodatku

Jeśli dodatek zostanie pomyślnie zainstalowany, przy następnym uruchomieniu Chrome zostanie wyświetlony komunikat z prośbą o potwierdzenie uruchomienia dodatku

W tym oknie dialogowym musisz włączyć korzystanie z rozszerzenia

W programowaniu ważnym zadaniem jest inicjalizacja danych, ponieważ w tym kroku ustalamy wymagania wstępne dla aplikacji - atrybuty, wymagane pliki i dane, połączenie z bazą danych i tak dalej.

WordPress ma ustaloną procedurę inicjalizacji. Wdrażając cykl życia strony, platforma WordPress wykonuje wiele akcji, z których wiele omówiliśmy już wcześniej. System posiada zestaw zaczepów inicjujących, które służą do inicjowania aplikacji przed wykonaniem jej podstawowej funkcjonalności.

Bardzo ważne jest, aby twórcy motywów i projektanci dokładnie zrozumieli, w jaki sposób używane są haki, a także jakie są najczęstsze błędy w używaniu haków inicjujących, aby tworzyć wysokiej jakości aplikacje.

W tym artykule omówimy znaczenie haków inicjujących w WordPressie, a także pokażemy, jak z nich korzystać w różnych sytuacjach.

Wprowadzenie do haków inicjujących

WordPress oferuje szeroką gamę haczyków, które można wykorzystać do tworzenia wtyczek i motywów.

W przypadku typowego żądania strony, wszystkie podpięcia akcji są wykonywane w określonej kolejności. Ogólnie rzecz biorąc, wszystkie podpięcia są wykonywane po zakończeniu ładowania podstawowej aplikacji WordPress.

Tak więc zaczepy inicjujące są używane głównie do, jak można się domyślić, inicjowania ich działania we wtyczkach i motywach. Przyjrzyjmy się dostępnym hakom init w WordPress w kolejności wykonywania:

  • Init jest uruchamiany po zakończeniu ładowania WordPressa, ale przed przekazaniem jakichkolwiek nagłówków. Ogólnie rzecz biorąc, ten zaczep jest używany przez wtyczki do inicjowania procesu ich pracy.
  • widgets_init służy do rejestrowania widżetów aplikacji na pasku bocznym. Funkcja register_widget jest wykonywana w tym zaczepie.
  • admin_init jest wykonywane jako pierwsza akcja po wejściu użytkownika do panelu administracyjnego WordPress. Ogólnie służy do inicjowania ustawień specyficznych dla obszaru administracyjnego.

Oprócz tych trzech haków WordPress ma również inny hak o nazwie admin_bar_init, który jest wykonywany po zainicjowaniu paska administratora. Kodeks WordPressa nie zawiera opisu tego haka, ale jest używany tylko przez niewielką liczbę wtyczek.

W kodeksie możesz poznać pełny proces wykonywania podpięć akcji w WordPressie.

WordPress wykonuje każde podpięcie w określonej kolejności (opisanej w kodeksie). Ważne jest również, aby wziąć pod uwagę kolejność, w jakiej zdarzenia występują w każdym haku akcji. Przyjrzyjmy się następującym sytuacjom, aby zrozumieć różnicę.

Zdefiniuj admin_init wewnątrz haka init

Jeśli zajdzie taka potrzeba, możemy zdefiniować hooki WordPressa w innych hookach. W typowym żądaniu przechwycenie init jest wykonywane przed przechwyceniem admin_init. Spróbujmy coś wyświetlić, umieszczając admin_init w haczyku init:

Add_action("init", "test_init"); funkcja test_init()( add_action("admin_init", "test_admin_init"); ) funkcja test_admin_init() ( echo "Init admin Inside Init"; )

Po wykonaniu tego kodu otrzymamy pożądane dane wyjściowe za pomocą instrukcji echo.

Zdefiniuj init w haczyku admin_init

Przyjrzyjmy się kodowi i wynikom skryptu, gdy wcześniejszy zaczep jest zdefiniowany w zaczepie, który pojawia się później w kolejności wykonywania.

Add_action("admin_init", "test_admin_init"); funkcja test_admin_init() ( add_action("init", "test_init"); ) funkcja test_init() ( echo "Init Inside Admin Init"; )

W tym przypadku nie otrzymamy żadnych danych wyjściowych - zgodnie z oczekiwaniami - ponieważ zaczep init działa przed zaczepem admin_init, co nie jest dozwolone po zdefiniowaniu zaczepu admin_init.

Jak widać, bardzo ważne jest, aby zrozumieć, w jaki sposób wykonywane są hooki, aby tworzyć udane wtyczki. Kolejność, w jakiej pojawiają się zdarzenia, jest ważna dla wszystkich podpięć WordPressa.

Badanie zaczepów init i admin_init

Spośród wszystkich zaczepów inicjujących, bardzo ważne jest zwrócenie uwagi na init i admin_init, ponieważ te dwa zaczepy są bardzo często używane w wielu wtyczkach. Używanie wszystkich innych haków inicjujących jest znacznie łatwiejsze w porównaniu z tymi dwoma hakami.

Przyjrzymy się również funkcjonalności hooków init i admin_init.

Zaczep init jest wykonywany przy każdym żądaniu zarówno dla front-endu, jak i back-endu witryny WordPress.

Podpięcie admin_init jest wykonywane po zakończeniu procesu uruchamiania przez sekcję admin. Więc ten hak jest wykonywany dla wszystkich żądań do dowolnej strony administratora. Użytkownicy muszą być zarejestrowani, aby skorzystać z tego haka.

Ponieważ oba te haki są wykonywane przy każdym żądaniu, musimy pomyśleć o funkcjonalności opartej na ich implementacji, ponieważ może to znacząco wpłynąć na wydajność witryny.

Jak korzystać z haków startowych

Hooki inicjujące są często używane przez większość istniejących wtyczek WordPress i są bardzo ważne dla kontrolowania procesu ich wykonywania.

WordPress nie mówi nam dokładnie, co powinniśmy, a czego nie powinniśmy uwzględniać; dlatego programiści mogą popełniać drobne błędy, które z kolei mogą prowadzić do zauważalnego spadku wydajności. W tej sekcji pokażemy, jak efektywnie korzystać z hooków init i admin_init.

Przyjrzyjmy się najlepszym praktykom korzystania z haków inicjujących:

Zaczep init

  • Rejestracja niestandardowych typów postów — programiści WordPress zalecają używanie haka init do rejestrowania nowych niestandardowych typów postów.
  • Zainicjuj konfigurację i ustawienia wtyczki — konfiguracja i ustawienia wtyczki muszą być zdefiniowane na żądanie, więc dobrą praktyką jest umieszczenie ich w tym zaczepie.
  • Dostęp do przesłanych danych użytkownika (za pomocą $_GET i $_POST) - możemy przechwycić przesłane dane użytkownika bez użycia żadnej akcji, jednak w tym przypadku zaleca się użycie haka init, ponieważ gwarantuje wykonanie dla każdego żądania.
  • Dodanie nowych reguł przepisywania - możemy ustawić nowe reguły przepisywania za pomocą haka init, jednak będą one działać dopiero po resecie.
  • Dodawanie lub usuwanie akcji niestandardowych — wtyczki zawierają wiele akcji niestandardowych rozszerzających funkcjonalność. Mogą zaistnieć sytuacje, w których musimy dodać nowe działania lub usunąć stare. W takich przypadkach ważne jest, aby zastosować te akcje w haku init.
  • Przesyłanie domeny tekstowej wtyczki – WordPress obsługuje wiele języków, dzięki czemu możemy przesłać plik zawierający przetłumaczone ciągi. Należy to również zrobić w haku inicjującym.

Zaczep admin_init

  • Kontrola dostępu — ważne jest, aby sprawdzić prawa dostępu zalogowanych użytkowników przed zezwoleniem użytkownikowi na dostęp do określonego zestawu funkcji i funkcjonalności. admin_init to pierwsza akcja, która będzie miała miejsce w obszarze administracyjnym, więc możemy ją wykorzystać do kontroli dostępu.
  • Dodawanie nowych opcji — możemy użyć tego haka, aby dodać nowe ustawienia lub strony opcji do istniejącego obszaru opcji WordPress.

Istnieje wiele innych możliwych zastosowań tych haków, ale te funkcje mają swoje własne haki, więc nie musisz używać haków inicjujących.

Typowe błędy podczas korzystania z hooków inicjujących

Często spotykamy się z sytuacjami, w których programiści źle rozumieją użycie haków inicjujących. Nieprawidłowe użycie tych haków może prowadzić do poważnych problemów z wydajnością.

Zidentyfikujmy typowe błędy, a także sposoby ich obejścia:

  • Aktualizacja reguł przepisywania jest operacją bardzo zasobożerną, podczas której wszystkie reguły przepisywania są aktualizowane i porządkowane w celu dodania nowych lub usunięcia starych, które nie są wymagane. Wielu programistów aktualizuje reguły przepisywania w akcjach init. Powoduje to niepotrzebne obciążenie wydajności w każdym zapytaniu. Musimy zdefiniować sposób ręcznego aktualizowania reguł przepisywania za pomocą przycisków lub aktualizowania reguł dla rzadkich akcji, takich jak zapisywanie ustawień wtyczek.
  • Dostęp do bazy danych - Aby zaimplementować różne funkcje, musisz mieć dostęp do bazy danych, ale ważne jest również, aby zapobiec niepotrzebnym wywołaniom bazy danych w zaczepach inicjujących, ponieważ są one wykonywane przy każdym żądaniu. W tym celu idealnym rozwiązaniem byłoby powiązanie zaczepów bazy danych z zaczepami o określonej funkcjonalności, unikając ogromnych obciążeń wydajnościowych.
  • Wykonywanie procedur aktualizacji — wtyczki powinny zawierać procedury aktualizacji w celu aktualizacji ich możliwości w nowych wersjach. Zazwyczaj programiści używają zaczepów inicjujących, aby sprawdzić wersję wtyczki i istniejące ustawienia przed wykonaniem procesu aktualizacji. Możemy zaoferować użytkownikom aktualizację wtyczki na osobnym ekranie zamiast automatycznego sprawdzania przy każdym żądaniu.
  • Używanie haków inicjujących zamiast haków do określonych funkcji jest najczęstszym błędem popełnianym przez wielu programistów. WordPress posiada szeroką gamę hooków związanych z unikalną funkcjonalnością. Bardzo ważne jest, aby używać funkcjonalnych hooków, aby uniknąć konfliktów i uczynić kod rozszerzalnym. Hooki takie jak init i admin_init mogą być używane zamiast konkretnych hooków, więc wielu programistów ma tendencję do ich używania, nie zdając sobie sprawy z niszczycielskiego efektu, jaki mają.

Przykłady typowych przypadków użycia haków init i admin_init przez programistów zamiast zalecanych:

  • admin_menu - Możemy dodać strony menu za pomocą funkcji add_menu_page. Do tworzenia stron w menu admin zaleca się użycie zaczepu admin_menu. Jednak wielu programistów używa zaczepu admin_init, ponieważ jest on wykonywany po zaczepie admin_menu.
  • wp_enqueue_scripts - Zalecanym sposobem dodawania stylów i skryptów jest użycie haka wp_enqueue_scripts. Jednak wielu programistów używa wp_enqueue_script wewnątrz zaczepu init do ładowania skryptów i stylów.

Istnieje wiele podobnych sytuacji, w których programiści używają ogólnego haka init zamiast określonego haka dla określonej funkcjonalności i jeśli to możliwe, należy unikać tego podejścia.

Wniosek

Haki do inicjalizacji WordPressa odgrywają istotną rolę w tworzeniu wtyczek i motywów. Wielu programistów niewłaściwie używa hooków, powodując niepotrzebne obciążenie wydajności. W tym artykule omówiliśmy prawidłowe użycie tych haków, a także typowe błędy w ich użyciu i sposoby ich obejścia.

Teraz możemy zastosować te same techniki do hooków używanych we wtyczkach. Wielu twórców wtyczek używa własnych haków akcji, aby rozszerzać wtyczki. W przypadku takich wtyczek możemy zdefiniować zaczepy inicjujące specyficzne dla wtyczek, aby umożliwić programistom „zawieszenie” zadań inicjalizacji na predefiniowanych zaczepach.