Det verkar inte som att vissa Wordpress plugins har tur? WooCommerce, Easy Digit Hämta, gravitations Forms : var och en av dessa plugins drivs av ett helt företag, med dussintals tillägg från tredje part och fler och fler funktioner som läggs till av dem som ökar pluginens potential. Under denna tid går de flesta andra plugins inte framåt.

Hur kan ett enda plugin bli grunden för ett blomstrande tekniskt ekosystem? Det finns många svar: var först med att marknadsföra, skapa en bra produkt, ha marknadsföringsegenskaper och allt däremellan. Men idag kommer vi att fokusera på en viktig del av det tekniska svaret, nämligen: utbyggbarhet genom WordPress-kroksystemet.

Idag ska vi använda ett exempel på Wordpress plugin för att täcka de två nyckelfunktionerna som ger utökningsstatus till ett plugin, nämligen: application_filters() och do_action().

Tillägg: Tillägg för plugins

Det är därför tydligt att när vi talar om "tillägg" hänvisar vi till plugins som är gjorda för andra. Låt oss ta ett exempel: " Stripe för WooCommerce ".

Det här tillägget gör ingenting om du inte redan har gjort det WooCommerce. Om du installerar WooCommerce, köp och installera sedan " Stripe För WooCommerce Som en separat plugin, och den kommer att utvidga funktionaliteten för WooCommerce så att du kan börja acceptera betalningar via Stripe-betalningsportalen.

Så du har ett plugin som förbättrar ett annat plugin på ett specifikt sätt. Det är en förlängning. Dessa är adverb från WordPress-ekosystemet.

Hur fungerar funktionerna: Apply_filters () och do_action ()?

Nästa fråga: hur ser WooCommerce sin utökade funktionalitet? När allt kommer omkring är det lätt att föreställa sig att skriva ett e-handelsplugin som “ fungerar bara med några betalning gateways ". Om du verkligen vill Stripe måste du helt ändra WooCommerce, och antagligen skapa ditt eget verktyg som heter StripeCommerce, som antingen blir en konkurrent till WooCommerce eller helt enkelt bor på webbplatsen för en av dina kunder som har råd att betala personlig hjälp.

Det är en röra att överväga, men lyckligtvis gör WooCommerce något mycket bättre. Den använder två funktioner: Apply_filters () och do_action (). Dessa två funktioner låter dig skapa parenteser på WordPress, och detta är en grundläggande del av WordPress Hooks-systemet i allmänhet.

Apply_filters () och do_action () En ganska enkel skillnad:

  • Apply_filters () låter dig ansluta filter till funktioner.
  • do_action () låter dig ansluta handlingar till funktioner.

Låt oss titta på ett exempel för att se hur de fungerar.

Exempel på användning av WooPress-krokar.

För vårt exempel använder vi ett "Quote of the Day" -plugin, plus ett tillägg som modifierar detta plugin på ett specifikt sätt. För att följa och se hela koden, ladda ner plugins som en ZIP-fil https://wpshout.com/media/2016/10/plugins.zip.

Den ursprungliga plugin

Detta plugin använder API som exponeras av ett externt offertbibliotek och lagrar den resulterande offerten som WordPress-övergående data som uppdateras var 24: e timme. Kom tillbaka till den här artikeln när som helst så kommer du att se ett slumpmässigt citat från denna dag om ämnet "liv", som borde vara tillräckligt brett.

plugin-tillägg

Som vi vet är problemet med de flesta citat att de inte sägs av "Carl Sagan". Vårt tillägg korrigerar detta problem med ett antal verktyg:

  • Ett stort brevhuvud som visar dagens datum och citatet är av Carl Sagan,
  • Några specifika ordersättare för att göra en offert till vad Carl Sagan kan ha sagt
  • Författarna till de ursprungliga citaten ändras och citaten tilldelas nu korrekt till Carl Sagan.

Här är plugin och tillägg, i aktion:

citering-i-handling

le code

För att detta ska ske är två steg nödvändiga:

Det ursprungliga pluginet definierar krokar - actionkrokar och filterkrokar - så att extern kod kan modifieras eller läggas till sin egen kod vid nyckelpunkter. Plugin använder Apply_filters () och do_action () för att uppnå detta.

Tillägget definierar krokfunktioner på åtgärden och filter - som ändrar originalplugin på ett nödvändigt sätt.

Nyckelkod i det ursprungliga plugin-programmet

Den viktigaste delen av koden för oss är vad vi gör när vi får våra data från API: et. Dessa data är tillgängliga som en matris med två element: text: texten i citatet; och författare: personen som sa citatet. Vår kod kommer därför att se ut så här:

add_shortcode ('extensible_plugin_demo', 'bpc_output_extensible_plugin'); funktion bpc_output_extensible_plugin () {ob_start (); // Krok före visning! do_action ('bpc_before_get_qod_text'); $ qod_data = bpc_get_qod_data (); om (is_array ($ qod_data)) {echo ' '; $ qod_text = $ qod_data ['text']; $ qod_author = $ qod_data ['författare']; // Filtrera innehållet! $ qod_text = Apply_filters ('bpc_qod_text', $ qod_text); $ qod_author = Apply_filters ('bpc_qod_author', $ qod_author); echo $ qod_text; eko ' '; echo $ qod_author; eko ' '; } // Actionkrok efter resten av produktionen! do_action ('bpc_after_get_qod_text'); returnera ob_get_clean (); }

Nyckelkod i tillägget

Plugin består inte av något annat än åtgärder och filter för att modifiera det ursprungliga pluginet. Här är koden för tillägget:

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>';
}

Som ni ser är det här ganska vanliga användningar av " add_action () "Och" add_filter () "Och båda funktionerna hakas i hakparenteser som vi kallade" bpc_qod_text ".

Slutresultatet är att vårt plugin nu är utdragbart: en andra utvecklare kan titta på modifiera plugin och säga "Jag önskar Carl Sagan säger », Och gör det medan du använder det ursprungliga pluginet som bas, ungefär som föräldra- och barnteman på WordPress.

Detta är ett sådant trick som gör ett plugin som WooCommerce, mycket populärt, så att du kan lägga till nya funktioner.

Det är det för den här tutorialen. Jag hoppas att du förstår bättre de olika användningsfallen av filter och WordPress-åtgärder.