Ser det ikke ud til, at nogle WordPress plugins er heldige? WooCommerce, Nem celle download, Gravity Forms : hvert af disse plugins er drevet af et helt firma med snesevis af tredjepartsudvidelser og flere og flere funktioner tilføjet af dem, der føjer til pluginets potentiale. I løbet af denne periode går de fleste andre plugins ikke frem.

Hvordan kan et enkelt plugin blive grundlaget for et blomstrende teknologisk økosystem? Der er mange svar: at være den første til at markedsføre, skabe et godt produkt, marketingkyndigt og alt imellem. Men i dag vil vi fokusere på en vigtig del af det tekniske svar, nemlig: udvidelse gennem WordPress-krogsystemet.

I dag skal vi bruge et eksempel på WordPress plugin for at dække de to nøglefunktioner, der giver et plugin udvidelsesstatus, nemlig: apply_filters() og do_action().

Udvidelser: udvidelser til plugins

Det er derfor klart, at når vi taler om "udvidelser", henviser vi til plugins, der er lavet til andre. Lad os tage et eksempel: " Stripe til WooCommerce '.

Denne udvidelse gør intet, hvis du ikke allerede har gjort det WooCommerce. Hvis du installerer WooCommerce, køb og installer derefter " Stribe til WooCommerce Som et separat plugin, og det vil udvide funktionaliteten af ​​WooCommerce, så du kan begynde at acceptere betalinger via Stripe-betalingsgateway.

Så du har et plugin, der forbedrer et andet plugin på en bestemt måde. Det er en udvidelse. Dette er adverb fra WordPress-økosystemet.

Hvordan fungerer funktionerne: Apply_filters () og do_action ()?

Det næste spørgsmål: Hvordan kan WooCommerce se sin udvidede funktionalitet? Når alt kommer til alt er det let at forestille sig at skrive et e-handels-plugin, der “ fungerer kun med nogle betalings gateways ". Så hvis du virkelig ønsker at Stripe, bliver du nødt til at ændre WooCommerce fuldstændigt og sandsynligvis ende med at oprette dit eget værktøj kaldet StripeCommerce, som enten bliver en konkurrent til WooCommerce eller simpelthen bor på webstedet for en af ​​dine kunder, der har råd til at betale personlig hjælp.

Det er et rod at overveje, men heldigvis gør WooCommerce noget meget bedre. Det gør brug af to funktioner: Apply_filters () og do_action (). Disse to funktioner giver dig mulighed for at oprette parenteser på WordPress, og dette er en grundlæggende del af WordPress Hooks-systemet generelt.

Apply_filters () og do_action () En temmelig enkel forskel:

  • Apply_filters () giver dig mulighed for at forbinde filtre til funktioner.
  • do_action () giver dig mulighed for at forbinde handlinger til funktioner.

Lad os se på et eksempel for at se, hvordan de virker.

Eksempel på brug af WooPress-kroge.

I vores eksempel bruger vi et "Quote of the Day" plugin plus en udvidelse, der ændrer dette plugin på en bestemt måde. For at følge og se den fulde kode skal du downloade plugins som en ZIP-fil https://wpshout.com/media/2016/10/plugins.zip.

Det oprindelige plugin

Dette plugin bruger API'en, der er eksponeret af et eksternt citatbibliotek, og gemmer det resulterende tilbud som WordPress-forbigående data, der opdateres hver 24. time. Kom tilbage til denne artikel når som helst, og du vil se et tilfældigt citat fra denne dag om emnet "liv", som skal være bredt nok.

plugin-udvidelse

Som vi ved, er problemet med de fleste citater, at de ikke bliver sagt af "Carl Sagan". Vores udvidelse retter dette problem ved hjælp af en række værktøjer:

  • Et stort overskrift, der viser dagens dato, og at citatet er af Carl Sagan,
  • Nogle specifikke ordudskiftninger for at omdanne et citat til det, Carl Sagan måtte have sagt
  • Forfatterne af de originale citater ændres, og citaterne tilskrives nu korrekt til Carl Sagan.

Her er plugin og udvidelse, i aktion:

citation-i-handling

Koden

For at dette skal ske, er to trin nødvendige:

Det originale plugin definerer kroge - actionkroge og filterkroge - der tillader ekstern kode at ændre eller tilføje sin egen kode på nøglepunkter. Pluginet bruger Apply_filters () og do_action () for at opnå dette.

Udvidelsen definerer krogfunktioner på handlingen og filtre - som ændrer det originale plugin på en nødvendig måde.

Nøglekode i det originale plugin

Den vigtigste del af koden for os er, hvad vi gør, når vi får vores data fra API'en. Disse data er tilgængelige som en matrix med to elementer: tekst: teksten til citatet; og forfatter: den person, der sagde citatet. Vores kode vil derfor se sådan ud:

add_shortcode ('extensible_plugin_demo', 'bpc_output_extensible_plugin'); funktion bpc_output_extensible_plugin () {ob_start (); // Krog før visning! do_action ('bpc_before_get_qod_text'); $ qod_data = bpc_get_qod_data (); hvis (is_array ($ qod_data)) {echo ' '; $ qod_text = $ qod_data ['tekst']; $ qod_author = $ qod_data ['forfatter']; // Filtrer indholdet! $ qod_text = Apply_filters ('bpc_qod_text', $ qod_text); $ qod_author = Apply_filters ('bpc_qod_author', $ qod_author); ekko $ qod_text; ekko ' '; ekko $ qod_author; ekko ' '; } // Actionkrog efter resten af ​​output! do_action ('bpc_after_get_qod_text'); returner ob_get_clean (); }

Nøglekode i udvidelsen

Pluginet består ikke af andet end handlinger og filtre for at ændre det originale plugin. Her er koden til udvidelsen:

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 du kan se, dette er ganske standard anvendelser af " ADD_ACTION () "Og" add_filter () "Og begge funktioner er knyttet til firkantede parenteser, som vi kaldte" bpc_qod_text ".

Slutresultatet er, at vores plugin nu kan udvides: en anden udvikler kan se ændre plugin og sige "Jeg ønsker Carl Sagan at sige », Og gør det, mens du bruger det originale plugin som base, ligesom forældre- og børnetemaer på WordPress.

Dette er sådan et trick, der gør et plugin som WooCommerce, meget populært, så du kan tilføje nye funktioner.

Det er det til denne tutorial. Jeg håber, du forstår bedre de forskellige anvendelsestilfælde af filtre og WordPress-handlinger.