Zakładanie wiki społeczności w celu zebrania obiektywnych najlepszych praktyk w zakresie opracowywania wtyczek. To pytanie zostało zainspirowane komentarzami @ EAMann dotyczącymi wp-hackerów .
Chodzi o to, aby współpracować nad tym, jakie obiektywne najlepsze praktyki mogą być, abyśmy mogli potencjalnie wykorzystać je w procesie przeglądu współpracy społeczności.
AKTUALIZACJA: Po zobaczeniu kilku pierwszych odpowiedzi staje się jasne, że potrzebujemy tylko jednego pomysłu / sugestii / najlepszych praktyk na odpowiedź i ludzie powinni przejrzeć listę, aby upewnić się, że nie ma duplikatów przed opublikowaniem.
plugin-development
customization
wiki
MikeSchinkel
źródło
źródło
Odpowiedzi:
Użyj akcji i filtrów
Jeśli sądzisz, że ludzie chcieliby dodać lub zmienić niektóre dane: podaj return_filters () przed powrotem .
Weźmy przykład z innego pytania :
Związane z
źródło
Załaduj skrypty / CSS za pomocą
wp_enqueue_script
iwp_enqueue_style
Wtyczki nie powinny ładować / próbować ładować duplikatów plików JS / CSS, szczególnie jQuery i innych plików JS zawartych w WP Core.
Wtyczki powinny zawsze używać
wp_enqueue_script
iwp_enqueue_style
podczas łączenia plików JS i CSS, a nigdy bezpośrednio przez<script>
tagi.Związane z
źródło
Wsparcie I18n
Wszystkie ciągi wyjściowe powinny być połączone z odpowiednią domeną tekstową, aby umożliwić internacjonalizację przez zainteresowane strony, nawet jeśli programista nie jest zainteresowany tłumaczeniem własnej wtyczki.
Pamiętaj, że bardzo ważne jest, aby załadować pliki językowe podczas
init
akcji, aby użytkownik mógł się do niej przyczepić.Zobacz Codex: I18n dla programistów WordPress
A także ten artykuł: Poprawne ładowanie plików językowych WP .
Od WordPress 4.6+
WP 4.6 zmienił kolejność ładowania i sprawdzone lokalizacje, znacznie ułatwiło to programistom i użytkownikom.
Biorąc pod uwagę wtyczkę z „my-plugin” domeny tekstowej, WordPress PIERWSZE szuka pliku tłumaczenia w:
/wp-content/languages/plugins/my-plugin-en_US.mo
Jeśli nie uda się go znaleźć, będzie szukał takiego, w którym wtyczka każe mu szukać (zwykle w folderze „języka” pluigns, jeśli postępuje zgodnie z kodeksem):
/ wp-content / plugins / my-plugin / languages / my- plugin-en_US.mo
Na koniec, jeśli nie zostanie znaleziony żaden plik językowy, sprawdzi domyślną lokalizację:
/wp-content/languages/my-plugin-en_US.mo
Pierwsze sprawdzenie zostało dodane w 4.6 i daje użytkownikom określone miejsce do dodania pliku językowego, ponieważ wcześniej musieliby wiedzieć, gdzie programista dodał plik językowy, teraz użytkownik musi tylko znać domenę tekstową wtyczki: / wp-content / języki / wtyczki / TEXTDOMAIN-LOCAL.mo
Poniżej jest stary sposób (Nie dotyczy od WP 4.6+)
źródło
Upewnij się, że wtyczki nie generują błędów dzięki WP_DEBUG
Zawsze testuj wtyczki przy
WP_DEBUG
włączonych i najlepiej włączaj je podczas całego procesu programowania. Wtyczka nie powinna generować ŻADNYCH błędów przyWP_DEBUG
włączeniu. Obejmuje to przestarzałe powiadomienia i niesprawdzone indeksy.Aby włączyć debugowanie, edytuj
wp-config.php
plik tak, abyWP_DEBUG
stała była ustawiona natrue
. Aby uzyskać więcej informacji, zobacz Kodeks dotyczący debugowania .źródło
Najpierw użyj istniejących funkcji w WordPress Core
Jeśli możesz: użyj istniejących funkcji zawartych w rdzeniu WordPress zamiast pisać własne. Twórz niestandardowe funkcje PHP tylko wtedy, gdy nie ma odpowiedniej wcześniej istniejącej funkcji w rdzeniu WordPress.
Jedną z korzyści jest to, że można użyć „nieaktualnych powiadomień”, aby łatwo monitorować funkcje, które należy wymienić. Kolejną korzyścią jest to, że użytkownicy mogą przeglądać dokumentację funkcji w Kodeksie i lepiej zrozumieć, co robi wtyczka, nawet jeśli nie są doświadczonym programistą PHP.
Związane z
źródło
wp-login.php
. Tak więc „Jeśli potrafisz” było dobrym początkiem odpowiedzi ...Odinstalowanie powinno usunąć wszystkie dane wtyczki
Po usunięciu z instalacji WordPress wtyczka powinna usunąć wszystkie pliki, foldery, wpisy bazy danych i tabele, które utworzyła, a także utworzone przez siebie wartości opcji .
Wtyczki mogą oferować opcję eksportowania / importowania ustawień, dzięki czemu ustawienia można zapisać poza WordPress przed usunięciem.
Związane z
źródło
Zapobiegaj wstrzykiwaniu SQL za pomocą danych wejściowych
Wtyczka powinna zdezynfekować wszystkie dane wejściowe użytkownika pobrane bezpośrednio lub pośrednio (np. Przez
$_POST
lub$_GET
) przed użyciem wartości wejściowych do zapytania do bazy danych MySQL.Zobacz: Formatowanie instrukcji SQL .
źródło
Prefiks Wszystkie globalne elementy przestrzeni nazw
Wtyczka powinna poprawnie poprzedzać WSZYSTKIE globalne elementy przestrzeni nazw (stałe, funkcje, klasy, zmienne, a nawet rzeczy takie jak niestandardowe taksonomie, typy postów, widżety itp.). Na przykład nie twórz funkcji o nazwie
init()
; zamiast tego nazwij to jakośjpb_init()
.Zwykle powinien używać trzy- lub czteroliterowego prefiksu przed nazwami lub korzystać z funkcji przestrzeni nazw PHP . Porównaj: Jednoliterowy prefiks dla stałych klas PHP?
Związane z
źródło
Użyj zorientowanego na klasy i obiekt kodu PHP5
Nie ma powodu, aby nie pisać czystego, obiektowego kodu PHP5. Obsługa PHP4 zostanie wycofana po następnej wersji (WP 3.1). Oczywiście możesz prefiksować wszystkie nazwy funkcji, aby skończyć na nieskończenie długich nazwach funkcji z licznymi partiami, ale o wiele łatwiej jest napisać prostą klasę i spakować wszystko. Ponadto umieść klasę w osobnym pliku i nadaj jej odpowiednią nazwę, abyś mógł ją łatwo rozszerzać i utrzymywać:
źródło
Dezaktywacja nie powinna powodować utraty danych
Wtyczka nie powinna usuwać żadnych danych po dezaktywacji .
Związane z
źródło
Uwzględnij tylko pliki, których potrzebujesz ...
Jeśli jesteś w interfejsie, nie dołączaj kodu związanego z obszarem administracyjnym.
źródło
Ogłoś utratę danych przy deinstalacji wtyczek
Po odinstalowaniu wtyczka powinna poinformować użytkownika, że usunie swoje dane, i otrzymać potwierdzenie, że użytkownik jest w stanie usunąć dane przed zrobieniem tego, a wtyczka powinna również pozwolić użytkownikowi na zachowanie danych po odinstalowaniu. (Ten pomysł @EAMann.)
Związane z
źródło
Pozwól zmienić nazwę folderu wtyczki
/ plugins / nazwa wtyczki / {różne}
„Nazwa wtyczki” używana dla folderu powinna zawsze być zmienialna.
Zwykle jest to obsługiwane przez definiowanie stałych i konsekwentne ich używanie w całej wtyczce.
Nie trzeba dodawać, że wiele popularnych wtyczek jest grzesznikami.
Związane z:
plugins_url()
dla łatwego linkowania do zasobów, zawartych we wtyczce.źródło
plugin_basename(__FILE__)
aby ustalić lokalną nazwę wtyczki. Jest to przydatne w przypadku posiadania kopii tej samej wtyczki (testowanie, wiele kont w innym miejscu, ale tylko jedna na wtyczkę ...).Użyj WordPress (wbudowany) Obsługa błędów
Nie tylko,
return;
jeśli dane wprowadzone przez użytkownika były nieprawidłowe. Podaj im, że niektóre informacje zostały zrobione źle.Jeden błąd (obiekt) dla wszystkich
Możesz ustawić globalny obiekt błędu dla swojej kompozycji lub wtyczki podczas ładowania:
Później możesz dodać nieograniczoną liczbę błędów na żądanie:
Następnie możesz pobrać je wszystkie na końcu swojego motywu. W ten sposób nie przerywasz renderowania strony i nadal możesz wygenerować wszystkie błędy do opracowania
Można znaleźć dalsze informacje na ten Q . Powiązany bilet, aby naprawić „współpracę”
WP_Error
iwp_die()
jest stamtąd połączony, a następnie pojawi się kolejny bilet. Komentarze, krytycy i takie są mile widziane.źródło
wp_die();
była niepoprawna (odwrócona). O twoim Q) Nie rozumiem całkowicie. Po skonfigurowaniu instancję klasy WP_Error masz pełny dostęp do swoich danych za pomocą funkcji, takich jakget_error_code();
,get_error_message();
,get_error_data();
i liczby mnogiej. Możesz także utworzyć go tylko raz przy ładowaniu twojego motywu lub wtyczki i po prostu użyć$error->add();
do wypełnienia innych błędów, a na końcu wypisać je w stopce,$error->get_error_messages();
aby złapać je wszystkie.WP_Error
iwp_die()
bliżej siebie (ma już łatkę) w dolnej części Q. Wszelkie komentarze, sugestie, krytykę i dalej jest bardzo ceniona.Minimalizuj nazwy dodane do globalnej przestrzeni nazw
Wtyczka powinna maksymalnie ograniczyć jej wpływ, minimalizując liczbę nazw dodawanych do globalnej przestrzeni nazw .
Można to zrobić poprzez enkapsulację funkcji wtyczki w klasę lub użycie funkcji przestrzeni nazw PHP . Prefiksowanie wszystkiego może również pomóc, ale nie jest tak elastyczne.
Oprócz funkcji i klas wtyczka nie powinna wprowadzać zmiennych globalnych. Korzystanie z klas zwykle je przestarza i upraszcza obsługę wtyczek.
Związane z
źródło
Komentuj za pomocą PhpDoc
Najlepsza praktyka jest zbliżona do stylu PhpDoc. Jeśli nie używasz IDE takiego jak „Eclipse”, możesz po prostu rzucić okiem na Podręcznik PhpDoc .
Nie musisz dokładnie wiedzieć, jak to działa. Profesjonalni programiści mogą mimo to odczytać kod i potrzebują go tylko jako podsumowania. Koderzy i użytkownicy hobbystów mogą docenić sposób, w jaki to wyjaśniasz na tym samym poziomie wiedzy.
źródło
Użyj interfejsu API ustawień przed opcją add_option
Zamiast dodawać opcje do DB za pomocą funkcji add_option, powinieneś przechowywać je jako tablicę za pomocą interfejsu API ustawień, który dba o wszystko za Ciebie.
Użyj interfejsu API modyfikacji motywów przed opcją add_option
Modyfikacje API jest dość prosta konstrukcja i bezpieczny sposób, który umożliwia dodawanie i pobieranie opcje. Wszystko zostaje zapisane jako wartość zserializowana w bazie danych. Łatwy, bezpieczny i prosty.
źródło
update_option
i nigdyadd_option
, funkcja aktualizacji utworzy opcję, jeśli nie istnieje .. :)add_option
. Jest dobry przypadek użycia, wadd_option
którym jeśli opcja jest już ustawiona, nie jest zmieniana, więc używam jej w aktywacji, aby zachować potencjalnie już istniejące preferencje użytkownika.add_option
jest, gdy chcesz jawnie wyłączyć automatyczne ładowanie.update_option
wymusi automatyczne ładowanie do wartości true, więc chcesz wyłączyć automatyczne ładowanie, użyjadd_option
przy początkowym tworzeniu opcji.Chroń prywatność użytkowników wtyczek
(Wcześniej: anonimowa komunikacja API)
Jeśli wtyczka komunikuje się z zewnętrznym systemem lub interfejsem API (np. Niektórymi usługami internetowymi), powinna to zrobić anonimowo lub zapewnić użytkownikowi anonimową opcję, która zagwarantuje, że żadne dane powiązane z użytkownikiem wtyczki nie wyciekną do drugiej strony w sposób niekontrolowany.
źródło
Host Wtyczki na WordPress.org
Użyj repozytorium SVN podanego na WordPress.org do hostowania wtyczek. Ułatwia to aktualizację interfejsu użytkownika, a jeśli nigdy wcześniej nie korzystałeś z SVN, możesz go zrozumieć, używając go w kontekście, który to uzasadnia.
źródło
Zapewnij kontrolę dostępu za pomocą uprawnień
W wielu przypadkach użytkownicy mogą nie chcieć, aby wszyscy mieli dostęp do obszarów utworzonych przez wtyczkę, szczególnie w przypadku wtyczek wykonujących wiele skomplikowanych operacji, pojedyncze sprawdzenie zdolności może nie być wystarczające.
Przynajmniej sprawdź odpowiednie możliwoś ci wszystkich różnych procedur, do których można wykorzystać wtyczkę.
źródło
Importuj / eksportuj ustawienia wtyczek
Nie jest to tak powszechne we wszystkich wtyczkach, ale jeśli wtyczka ma (niektóre) ustawienia, powinna zapewniać import / eksport danych, takich jak konfiguracja i wprowadzanie danych przez użytkownika .
Import / eksport poprawia użyteczność wtyczki.
Przykładową wtyczką, która ma taką funkcję importowania i eksportowania (a także mechanizm cofania) jest Breadcrumb NavXT (Wtyczka Wordpress) (pełne ujawnienie: trochę kodu przeze mnie tam, większość została wykonana przez mtekk).
Związane z
źródło
Uporządkuj swój kod
Zawsze trudno jest odczytać kod, który nie jest zapisany w kolejności wykonania. Najpierw włącz / wymagaj, zdefiniuj, wp_enqueue_style & _script itp., A następnie funkcje, których potrzebuje wtyczka / motyw, a na końcu program budujący (np. Ekran administratora, elementy zintegrowane z motywem itp.).
Spróbuj oddzielić rzeczy takie jak css i js we własnych folderach. Spróbuj także zrobić to z funkcjami, które są tylko pomocnikami, takimi jak spłaszczacze tablic i tym podobne. Utrzymywanie „głównego” pliku tak czystym i łatwym do odczytania, jak to możliwe, jest sposobem, który pomaga użytkownikom, programistom i tobie, gdy próbujesz dokonać aktualizacji za rok i nie widziałeś kodu przez dłuższy czas.
Dobrze jest też mieć strukturę, którą często powtarzasz, więc zawsze znajdziesz drogę. Opracowanie w znanej strukturze różnych projektów da ci czas na ulepszenie, a nawet jeśli twój klient zmieni się na innego programistę, nigdy nie usłyszysz „opuścił chaos”. To buduje twoją reputację i powinno być długoterminowym celem.
źródło
Umrzyj ze stylem
umierać w przyzwoity sposób Wszystkie funkcje wtyczek (a nawet motywów) powinny być używane
wp_die()
w krytycznych miejscach, aby dać użytkownikowi trochę informacji o tym, co się stało. Błędy php są denerwujące iwp_die
mogą dać użytkownikowi przyjemny styl wiadomości o tym, co wtyczka (lub ona) zrobiła źle. Dodatkowo, jeśli użytkownik wyłączył debugowanie, wtyczka po prostu się zepsuje.Korzystanie
Związane z:wp_die()
pomaga również, że twoje wtyczki / motywy są kompatybilne z wordsu testsuite .źródło
Zapewnij użytkownikom ekrany pomocy
Lepiej jest powiedzieć RTFM (kliknięcie pomocy) jako odpowiedź niż konieczność ciągłego odpowiadania na pytanie.
aktualizacja / uwaga: (patrz komentarze Kaisera): powyższy przykład należy zastosować w klasie
źródło
Oferta formularzy rozszerzalnych
Kiedy wtyczka oferuje możliwość wprowadzania danych, zawsze powinna mieć haczyk na końcu, tuż przed przyciskiem „prześlij” i / lub „zresetuj”, aby programiści mogli z łatwością rozszerzyć formularz nie tylko o pola, ale także przyciski.
Zobacz: Ustawienia API
Związane z
źródło
obejmują funkcję zawsze przez hak, a nie bezpośrednio.
Przykład:
Nie należy używać do włączenia klasy wtyczki poprzez nowy bez haka
Użyj haka plugins_loaded
Aktualizacja: mały przykład na żywo: Plugin-svn-trunk-page i pseudo przykład
Możesz także załadować za pomocą mu_plugins_loaded podczas instalacji na wielu serwerach, zobacz kodeks działań: http://codex.wordpress.org/Plugin_API/Action_Reference Widzisz też, jak inlcude wP z tym hakiem: http: // adambrown. info / p / wp_hooks / hook / plugins_loaded? version = 2.1 & file = wp-settings.php Używam tego bardzo często i nie jest to tak trudne i wczesne, lepsze jak nowa klasa ();
źródło
//avoid direct calls to this file where wp core files not present if (!function_exists ('add_action')) { header('Status: 403 Forbidden'); header('HTTP/1.1 403 Forbidden'); exit(); } if ( !class_exists( 'plugin_class' ) ) { class plugin_class { function __construct() { } } // end class function plugin_start() { new plugin_class(); } add_action( 'plugins_loaded', 'plugin_start' ); } // end class_exists
Wtyczki licencji na licencji zgodnej z GPL
Wtyczki i motywy powinny być licencjonowane na podstawie licencji zgodnej z WordPress. Umożliwia to ich ponowną dystrybucję z WordPress jako „program”. Zalecaną licencją jest GPL . Uważaj, aby wszystkie biblioteki kodów dołączone do wtyczki były zgodne z tą samą licencją.
(Był to problem i poważny punkt debaty zarówno w przeszłości, jak i obecnie .)
źródło
Opis wtyczki powinien dokładnie określać funkcje wtyczki. Istnieje 10 polecanych wtyczek postowych. Wszystkie z nich zawierają polecane posty, ale wiele z nich ma różne funkcje. Powinno być łatwo porównać wtyczkę z podobnymi wtyczkami, czytając opis.
Powinieneś unikać przechwalania się tym, jak prosta jest Twoja wtyczka, chyba że jest naprawdę bardzo prosta. W opisie należy podać przydatne linki, takie jak link do ustawień.
źródło
Minimalizuj skutki uboczne zdalnych źródeł danych i usług sieciowych
Wtyczka powinna buforować / chronić żądania Webservice i / lub XMLRPC / SOAP przez warstwę buforującą / dostawcę danych, jeśli ich używasz, aby nie wysuwać żądań frontowych na (powolną) odpowiedź usługi internetowej.
Obejmuje to pobieranie kanału RSS i innych stron. Zaprojektuj swoje wtyczki, aby żądały danych w tle.
Jednym z możliwych KROKÓW jest (Weźmy przykład do ping.fm): Utwórz tabelę buforów, powiedzmy: ping_fm_buffer_post (data, godzina, wiadomość, przesłane_czas, status)
źródło
Przetestuj swoją wtyczkę
Powinniśmy definitywnie mieć narzędzia do testowania w naszym środowisku programowania wtyczek.
Na podstawie tej odpowiedzi przez Ethan Seifert na pytanie testu, są dobre praktyki, których należy przestrzegać:
źródło