Podłączanie do wtyczek

12

Pracuję nad wtyczką, która idealnie byłaby w stanie robić rzeczy, gdy użytkownik robi coś za pomocą innej wtyczki.

Mogę dodawać niestandardowe zaczepy w tych wtyczkach, ale oczywiście nie zadziałałoby to dobrze, gdy chcę rozpowszechniać moją wtyczkę. Czy istnieje dobry sposób dodawania haczyków do wtyczek innych osób z własnej wtyczki? Czy to jedyne realne rozwiązanie, które prosi autora o dołączenie niestandardowych haków, aby inni programiści mogli czerpać korzyści ze swojej pracy?

Przykład: Chcę coś zrobić we wtyczce, gdy ktoś ponownie prześle artykuł. Gdyby w dowolnej popularnej wtyczce z retweetem był niestandardowy hak, do którego mógłbym się podłączyć i odpalić, byłoby świetnie. Nie ma, więc mogę zmodyfikować ich wtyczkę, aby ją uwzględnić, ale działa to tylko w przypadku mojej kopii i nie chcę próbować jej rozpowszechniać.

Czy musimy po prostu być lepszymi programistami wtyczek, aby wszyscy mogli grać razem dobrze?

Ryan Elkins
źródło
1
Świetne pytanie!
MikeSchinkel,
„Czy to jedyne prawdziwe rozwiązanie, w którym prosi się autora o dołączenie niestandardowych haków, aby inni programiści mogli czerpać korzyści z ich pracy? W większości przypadków tak. Są pewne sytuacje, w których można pośrednio podłączyć się do ich wtyczki, ale zwykle tak nie jest. Powiedz im, aby pisali swoje wtyczki tak, jakby pisali dla rdzenia WordPress - dołącz filtr / akcję tam, gdzie jest to potrzebne.
Viper007Bond
1
Wskazówka: udokumentuj zaczepy, które udostępnia Twoja wtyczka, aby inni autorzy wtyczek mogli z nią korzystać.
hakre

Odpowiedzi:

6

@Ryan Elkins:

Wydaje mi się, że odpowiedź zależy od tego, jak ważne jest importowanie każdego przypadku użycia. W niektórych przypadkach byłoby to coś, czego potrzebujesz szybko i brudno, w innych może to być bardziej znaczący przypadek użycia. Oto dwie rzeczy, które przychodzą na myśl:

Poszukaj alternatywnych haków w WordPress Core

Jeśli czasami coś jest szybkie i brudne, możesz użyć innych haczyków pobierania danych od rdzenia, aby zmodyfikować to, czego potrzebujesz, lub zarówno haków pobierania danych, jak i pobierania danych za pomocą ob_start()/ ob_end_clean()(patrz @Todd Perkins, odpowiedź na „ Radzenie sobie z dużym wyjściem HTML za pomocą kodu wtyczki ” na przykład kodu).

Aby wyśledzić haczyki, możesz użyć wtyczki Instrument Hooks, którą zamieściłem wczoraj, aby pomóc Ci znaleźć haki, których możesz potencjalnie użyć.

Prześlij łatkę ze swoim pożądanym hakiem do programisty wtyczek

Jeśli twój przypadek użycia jest bardziej znaczący dla ciebie lub społeczności, polecam pójść naprzód i dodać hak, którego potrzebujesz do wtyczki. Następnie przetestuj go dobrze, aby upewnić się, że naprawdę odnosi się do Twojego przypadku użycia, po którym możesz przesłać łatkę twórcy wtyczki w nadziei, że zastosuje ją. W ten sposób ułatwisz im działanie, dając im przetestowany kod, i samodzielnie przejrzysz przypadek użycia, aby upewnić się, że naprawdę jest to, czego potrzebujesz. Nie potrafię powiedzieć, jak często myślałem, że potrzebowałem pewnego haka, który znajdowałem po próbie jego wdrożenia, ale potrzebowałem haka, który był inny niż początkowo przewidywałem.

Jeśli nie jesteś zaznajomiony z tworzeniem łatek tutaj jest dobry artykuł na temat łatania rdzenia WordPress, dla którego większość dotyczy łatania wtyczek, a dla tego, czego nie ma, mam nadzieję, że będzie oczywiste, co zrobić:

Mam nadzieję że to pomoże?

PS Jedną rzeczą, która wydaje mi się nieco rozczarowująca, jest to, że adres twojego pytania dotyczy odsetka wtyczek, które są przeznaczone tylko dla użytkowników końcowych, tj. Nie mają własnych haczyków. Wyobraź sobie, że WordPress został zaprojektowany jak większość wtyczek? Byłoby to nieelastyczne i bardzo niszowe rozwiązanie.

Może byłoby inaczej, gdyby WordPress miał możliwość automatycznego instalowania wtyczek, od których zależały inne wtyczki? W tej chwili zazwyczaj muszę napisać wiele funkcji, których potrzebuję od zera, ponieważ klienci chcą pewnych rozwiązań i dostępnych wtyczek, a 90% tam nie pozwala mi na aktualizację pozostałych 10%.

Naprawdę żałuję, że osoby prowadzące społeczność WordPress nie znalazły sposobu, aby zapewnić, że wtyczki są nagradzane za przestrzeganie najlepszych praktyk (takich jak dodawanie haków dla innych programistów), podobnie jak dobre odpowiedzi są nagradzane na stronie StackExchange.

MikeSchinkel
źródło
2

Czy po prostu trzeba spróbować i aby być lepiej twórców wtyczek tak, że wszyscy możemy gry ładne razem?

Na początek tak.

Czy to jedyne realne rozwiązanie, które prosi autora o dołączenie niestandardowych haków, aby inni programiści mogli czerpać korzyści ze swojej pracy?

To byłoby dobre rozwiązanie.

Możesz także skopiować drugą wtyczkę i po prostu dodać wszelkie zmiany, choć byłoby to bardziej kłopotliwe.

Arlen Beiler
źródło
2

Myślę, że odpowiadasz na pytanie w pytaniu, aby stało się ono nieco retoryczne.

Oczywiście mówisz o systemie podobnym do tego, który Google zachęca z Androidem i systemem Intent, że aplikacja może publikować działania, które może wykonywać w imieniu innych aplikacji, które mogą się do nich podłączyć i przekazać dane z powrotem i naprzód. Osobiście uważam, że jest to coś, do czego powinniśmy zmierzać jako dobrzy programiści - używamy WordPress, ponieważ jest już niesamowity, wystarczająco wspaniały, aby podjąć decyzję, czy go użyć, czy opracować podobny wewnętrzny produkt w większości przypadków. Samo repozytorium wtyczek jest znowu to samo, głównie jako użytkownik końcowy + programista - po co opracowywać wtyczkę twitter, gdy jest ona idealnie dobra.

To samo „dlaczego opracowywać duplikaty” znajduje się w centrum pytania. System Android Intent umożliwia aplikacjom korzystanie z już utworzonych funkcji i przesyłanie danych między nimi, a to jest popularne i często używane, ponieważ jest tak mocno popychane. Podobny system jest już zaimplementowany w WordPress, ale bardzo rzadko jest używany poza hakami obecnymi w kodzie podstawowym, które są bardzo często używane.

Byłoby korzystne dla społeczności, gdyby było więcej zaczepów w niestandardowych wtyczkach, ale jak mówisz, nie ma łatwego sposobu dodawania zaczepów, kiedy / gdzie ich potrzebujesz.

Jeśli chodzi o wtyczkę Twittera, do której chcesz się podłączyć, wyślij autorowi wiadomość e-mail, jestem pewien, że chętnie go doda.

Jeśli istnieje miejsce, które Twoim zdaniem byłoby dobrym miejscem na włożenie haka do wtyczki, zrób to i dobrze udokumentuj. Jeśli więcej osób zacznie umieszczać haczyki we wtyczkach lub nastąpi ogólne dążenie do tego, w końcu tak się stanie.

Aby odpowiedzieć na końcowe pytanie:

Czy musimy po prostu być lepszymi programistami wtyczek, aby wszyscy mogli grać razem dobrze?

Tak.


Edycja: Zastanowiłem się trochę nad faktycznym pytaniem i najlepszym sposobem implementacji hooków, czy nie możesz dodać akcji, która uruchomiłaby się, gdyby konkretna funkcja, którą próbujesz uruchomić wtyczkę, była obecna?

nikt
źródło
To by działało, ale co, gdyby inna funkcja wtyczki miała tę samą nazwę?
Arlen Beiler,
Ups, może nie, bo musisz wiedzieć, co jest przesyłane dalej i przez kogo. Sprawdzanie funkcji jest rozwiązaniem działającym w czasie wykonywania, tym czego potrzebujemy jest rozwiązaniem działającym w czasie rzeczywistym, działającym, gdy dana funkcja jest wywoływana lub zwraca dane.
Arlen Beiler,
@Arlen - Załóżmy, że utworzyłeś własną funkcję, która sprawdza, czy dana funkcja istnieje. Byłby uruchamiany po 'plugins_loaded', a jeśli tak, ustawia wartość logiczną, która włącza funkcje. Jest to w dużej mierze zależne od tego, czy kod się nie zmienia, ale nie rozumiem, dlaczego to nie działa?
nikt
0

zdefiniuj funkcję:

function my_footer() {
    do_action('my_footer');
}

teraz możesz podpiąć się do tego haka: add_action('my_footer', 'example_function', 1);# więcej informacji zobacz na moim poście .

bueltge
źródło
nie => teraz, to własne => to. Poprawny?
Arlen Beiler,
Rozumiem, jak dodawać niestandardowe zaczepy - pytanie brzmi: jak podłączyć czyjąś wtyczkę, najlepiej w sposób, który nie wymaga bezpośredniej modyfikacji wtyczki.
Ryan Elkins
@Arlen: wielkie dzięki, przepraszam za mój zły angielski @Ryan: nie jest możliwe, kiedy wtyczka nie ma haka; ale możesz sprawdzić zastąpienie funkcji lub klasy, gdy autor poprosi o to w swojej wtyczce. Można jednak poprosić o aktywne wtyczki i zaczepić wcześniej w WP jako drugą wtyczkę i zastąpić jego funkcję.
bueltge