Czy nie wydaje ci się, że niektóre WordPress wtyczki Są szczęśliwe? WooCommerce , Łatwe pobieranie cyfr, Formy Gravity : każda z tych wtyczek jest obsługiwana przez całą firmę, z dziesiątkami rozszerzeń innych firm i dodawanymi przez nich coraz więcej funkcji, które zwiększają potencjał wtyczki. W tym czasie większość innych wtyczek nie działa.

W jaki sposób pojedyncza wtyczka może stać się podstawą dobrze prosperującego ekosystemu technologicznego? Odpowiedzi jest wiele: bądź pierwszy, który wprowadzi na rynek, stwórz świetny produkt, bądź zręczny marketingowo i wszystko pomiędzy. Ale dzisiaj skupimy się na ważnej części odpowiedzi technicznej, a mianowicie: rozszerzalności dzięki systemowi haków WordPress.

Dzisiaj posłużymy się przykładem WordPress Plugin aby objąć dwie kluczowe funkcje, które nadają wtyczce status rozszerzalności, a mianowicie: apply_filters() i do_action().

Rozszerzenia: rozszerzenia wtyczek

Jest zatem jasne, że kiedy mówimy o „rozszerzeniach”, mamy na myśli wtyczki stworzone dla innych. Weźmy przykład: „ Paskiem do WooCommerce ".

To rozszerzenie nic nie robi, jeśli jeszcze tego nie zrobiłeś WooCommerce . Jeśli zainstalujesz WooCommerce , a następnie kup i zainstaluj „ Pasek dla WooCommerce  Jako osobna wtyczka rozszerzy funkcjonalność WooCommerce, dzięki czemu możesz zacząć akceptować płatności za pośrednictwem bramki płatności Stripe.

Masz więc wtyczkę, która ulepsza inną wtyczkę w określony sposób. To rozszerzenie. To przysłówki z ekosystemu WordPress.

Jak działają funkcje: apply_filters () i do_action ()?

Następne pytanie: w jaki sposób WooCommerce dostrzega swoją rozszerzoną funkcjonalność? W końcu łatwo wyobrazić sobie napisanie wtyczki eCommerce, która „ działa tylko z niektórymi bramami płatniczymi ”. Następnie, jeśli naprawdę chcesz Stripe, będziesz musiał całkowicie zmodyfikować WooCommerce, i prawdopodobnie skończysz na tworzeniu własnego narzędzia o nazwie StripeCommerce, które albo staje się konkurentem WooCommerce, albo po prostu mieszka na stronie jednego z twoich klientów, którzy mogliby pozwolić sobie na zapłatę spersonalizowana pomoc.

Zastanawiasz się nad tym, ale na szczęście WooCommerce robi coś znacznie lepszego. Wykorzystuje dwie funkcje: apply_filters () i do_action (). Te dwie funkcje pozwalają tworzyć nawiasy klamrowe na WordPressie i jest to zasadniczo podstawowa część systemu haków WordPress.

apply_filters () i do_action () Raczej prosta różnica:

  • Apply_filters () pozwala łączyć filtry z funkcjami.
  • do działań () pozwala łączyć działania z funkcjami.

Spójrzmy na przykład, aby zobaczyć, jak działają.

Przykład użycia haków WooPress.

W naszym przykładzie użyjemy wtyczki „Cytat dnia” oraz rozszerzenia, które modyfikuje tę wtyczkę w określony sposób. Aby śledzić i zobaczyć pełny kod, pobierz wtyczki jako plik ZIP https://wpshout.com/media/2016/10/plugins.zip.

Oryginalna wtyczka

Ta wtyczka korzysta z interfejsu API udostępnianego przez zewnętrzną bibliotekę cytatów i przechowuje wynikową ofertę jako przejściowe dane WordPress, które są odświeżane co 24 godziny. Wróć do tego artykułu w dowolnym momencie, a zobaczysz losowy cytat z tego dnia na temat „życia”, który powinien być wystarczająco szeroki.

rozszerzenie wtyczki

Jak wiemy, problem z większością cytatów polega na tym, że nie wypowiada ich „Carl Sagan”. Nasze rozszerzenie rozwiązuje ten problem przy użyciu szeregu narzędzi:

  • Duży papier firmowy z dzisiejszą datą i cytatem autorstwa Carla Sagana,
  • Niektóre konkretne zamienniki słów, aby zamienić cytat w to, co mógł powiedzieć Carl Sagan
  • Autorzy oryginalnych cytatów zostały zmienione, a cytaty są teraz poprawnie przypisywane Carlowi Saganowi.

Oto wtyczka i rozszerzenie w akcji:

cytat-in-action

kod

Aby tak się stało, konieczne są dwa kroki:

Oryginalna wtyczka definiuje punkty zaczepienia - punkty zaczepienia akcji i punkty zaczepienia filtru - umożliwiając zewnętrznemu kodowi modyfikowanie lub dodawanie własnego kodu w kluczowych punktach. Wtyczka używa do tego celu apply_filters () i do_action ().

Rozszerzenie definiuje funkcje podpięcia akcji i filtrów - które modyfikują oryginalną wtyczkę w niezbędny sposób.

Kod klucza w oryginalnej wtyczce

Najważniejszą dla nas częścią kodu jest to, co robimy po pobraniu danych z API. Dane te są dostępne jako tablica z dwoma elementami: tekst: tekst cytatu; i autor: osoba, która wypowiedziała cytat. Nasz kod będzie więc wyglądał następująco:

add_shortcode ('extensible_plugin_demo', 'bpc_output_extensible_plugin'); function bpc_output_extensible_plugin () {ob_start (); // Zaczep przed wyświetleniem! do_action („bpc_before_get_qod_text”); $ qod_data = bpc_get_qod_data (); if (is_array ($ qod_data)) {echo ' '; $ qod_text = $ qod_data ['tekst']; $ qod_author = $ qod_data ['autor']; // Filtruj zawartość! $ qod_text = apply_filters ('bpc_qod_text', $ qod_text); $ qod_author = apply_filters ('bpc_qod_author', $ qod_author); echo $ qod_text; Echo ' '; echo $ qod_author; Echo ' '; } // Przechwytywanie akcji po reszcie wyjścia! do_action („bpc_after_get_qod_text”); return ob_get_clean (); }

Kod klucza w rozszerzeniu

Wtyczka nie składa się z niczego innego niż akcje i filtry modyfikujące oryginalną wtyczkę. Oto kod rozszerzenia:

add_filter( 'bpc_qod_text', 'bpc_filter_qod_text' );
// Filter: remplacer des mots spécifique
function bpc_filter_qod_text( $text ) {
    $text = str_replace( 
        array( ' I ', ' me ', ' the ', ' is ', ' am ', ' are ' ),
        array( ' I, a descendent of savannah-dwelling hominids that somehow evolved an astounding capacity for self-reflection, ', ' the cooled-off stellar matter I call "me" ', ' the trillions of atoms that make up the ', ' seems, without the mind-boggling perspective of quantum physics, to be ', ' cannot, due to the Heisenberg Uncertainty Principle, be determined not to be ', ' appear to our best scientific instruments to be ' ),
        $text
    );
    return $text;
}

// Filter: barré le texte qui précède le nom de l'auteur et ajouter Carl Sagan à la suite
add_filter( 'bpc_qod_author', 'wpshout_filter_qod_author' );
function wpshout_filter_qod_author( $text ) {
    $text = '<strike>' . $text . '</strike> Carl Sagan';
    return $text;
}

// Action: Ajouter un titre
add_action( 'bpc_before_get_qod_text', 'bpc_set_up_quote' );
function wpshout_set_up_quote() {
    echo '<h4>Carl Sagan Quote of the Day for ' . date( 'F j, Y') . ':</h4>';
}

// Action: Ajouter une image
add_action( 'bpc_after_get_qod_text', 'bpc_add_carl_boom' );
function bpc_add_carl_boom() {

    echo '<div><img class="aligncenter" src="' . plugin_dir_url( __FILE__ ) . 'carl_sagan_mind_blown.gif"></div>';
}

Jak widać, są to dość standardowe zastosowania „ add_action () "A" add_filter () „Obie funkcje są zaczepione o nawiasy kwadratowe, które nazwaliśmy„ bpc_qod_text ”.

W rezultacie nasza wtyczka jest teraz rozszerzalna: drugi programista może oglądać modyfikację wtyczki i powiedzieć „Chciałbym powiedzieć Carlowi Saganowi », I zrób to, używając oryginalnej wtyczki jako podstawy, podobnie jak motywy nadrzędne i podrzędne w WordPress.

Jest to taka sztuczka, która sprawia, że ​​wtyczka taka jak WooCommerce jest bardzo popularna, umożliwiając dodawanie nowych funkcji.

To tyle w tym samouczku. Mam nadzieję, że lepiej rozumiesz różne przypadki użycia filtrów i akcji WordPress.