Nu vi se pare că unii WordPress plugin-uri sunt norocosi? WooCommerce, Descărcare ușoară a cifrelor, Formulare Gravity : fiecare dintre aceste plugin-uri este alimentat de o companie întreagă, cu zeci de extensii terță parte și din ce în ce mai multe funcții adăugate de acestea, care se adaugă potențialului pluginului. În acest timp, majoritatea celorlalte pluginuri nu reușesc să progreseze.

Cum poate un singur plugin să devină baza unui ecosistem tehnologic înfloritor? Există o mulțime de răspunsuri: fii primul care introduce pe piață, creează un produs excelent, are o perspectivă de marketing și orice altceva între ele. Dar astăzi ne vom concentra pe o parte importantă a răspunsului tehnic și anume: extensibilitatea, prin sistemul cârlig WordPress.

Astăzi vom folosi un exemplu de WordPress plug-in pentru a acoperi cele două funcții cheie care conferă statut de extensibilitate unui plugin și anume: apply_filters() și do_action().

Extensii: extensii pentru pluginuri

Prin urmare, este clar că, atunci când vorbim de „extensii”, ne referim la pluginuri care sunt create pentru alții. Să luăm un exemplu: " Stripe pentru WooCommerce ".

Această extensie nu face nimic dacă nu ați făcut-o deja WooCommerce. Daca instalezi WooCommerce, apoi cumpărați și instalați „ Stripe Pentru WooCommerce Ca un plugin separat, și va extinde funcționalitatea WooCommerce, astfel încât să puteți începe să acceptați plățile prin gateway-ul de plată Stripe.

Deci, aveți un plugin care îmbunătățește un alt plugin într-un mod specific. Este o extensie. Acestea sunt adverbe din ecosistemul WordPress.

Cum funcționează funcțiile: apply_filters () și do_action ()?

Următoarea întrebare: cum ajunge WooCommerce să-și vadă funcționalitatea extinsă? La urma urmei, este ușor să vă imaginați că scrieți un plugin de comerț electronic care „ funcționează numai cu niște gateway-uri de plată “. Apoi, dacă doriți cu adevărat Stripe, va trebui să modificați complet WooCommerce și, probabil, să ajungeți la crearea propriului dvs. instrument numit StripeCommerce, care fie devine un concurent al WooCommerce, fie pur și simplu locuiește pe site-ul unuia dintre clienții dvs. care ar putea permite să plătească. asistenta personalizata.

Este o mizerie de luat în considerare, dar din fericire, WooCommerce face ceva mult mai bine. Utilizează două funcții: apply_filters () și do_action (). Aceste două funcții vă permit să creați paranteze pe WordPress, iar aceasta este o parte fundamentală a sistemului WordPress Hooks în general.

apply_filters () și do_action () O diferență destul de simplă:

  • apply_filters () vă permite să conectați filtrele la funcții.
  • do_action () vă permite să conectați acțiuni la funcții.

Să examinăm un exemplu pentru a vedea cum funcționează.

Exemplu de utilizare a cârligelor WooPress.

Pentru exemplul nostru, vom folosi un plugin „Citatul zilei”, plus o extensie care modifică acest plugin într-un mod specific. Pentru a urmări și a vedea codul complet, descărcați pluginurile ca fișier ZIP https://wpshout.com/media/2016/10/plugins.zip.

Pluginul original

Acest plugin folosește API-ul expus de o bibliotecă de cotații externă și stochează cotația rezultată ca date tranzitorii WordPress care se reîmprospătează la fiecare 24 de ore. Reveniți la acest articol oricând și veți vedea un citat aleatoriu din această zi pe tema „vieții”, care ar trebui să fie suficient de larg.

extensie plugin

După cum știm, problema cu majoritatea citatelor este că nu sunt rostite de „Carl Sagan”. Extensia noastră corectează această problemă, folosind o serie de instrumente:

  • Un antet mare care arată data de astăzi și citatul este de Carl Sagan,
  • Unele înlocuitori de cuvinte specifice pentru a transforma un citat în ceea ce ar fi putut spune Carl Sagan
  • Autorii citatelor originale sunt schimbate, iar citatele sunt acum atribuite corect lui Carl Sagan.

Iată pluginul și extensia, în acțiune:

citare-in-actiune

Codul

Pentru ca acest lucru să se întâmple, sunt necesari doi pași:

Pluginul original definește cârlige - cârlige de acțiune și cârlige de filtrare - permițând codului extern să modifice sau să adauge propriul cod în punctele cheie. Pluginul folosește apply_filters () și do_action () pentru a realiza acest lucru.

Extensia definește funcțiile de cârlig pe acțiune și filtre - care modifică pluginul original într-un mod necesar.

Cod cheie în pluginul original

Cea mai importantă parte a codului pentru noi este ceea ce facem după ce obținem datele din API. Aceste date sunt disponibile sub formă de matrice cu două elemente: text: textul citației; și autor: persoana care a spus citatul. Prin urmare, codul nostru va arăta astfel:

add_shortcode ('extensibil_plugin_demo', 'bpc_output_extensible_plugin'); funcție bpc_output_extensible_plugin () {ob_start (); // Cârlig înainte de afișare! do_action ('bpc_before_get_qod_text'); $ qod_data = bpc_get_qod_data (); if (is_array ($ qod_data)) {echo ' '; $ qod_text = $ qod_data ['text']; $ qod_author = $ qod_data ['autor']; // Filtrați conținutul! $ qod_text = apply_filters ('bpc_qod_text', $ qod_text); $ qod_author = apply_filters ('bpc_qod_author', $ qod_author); echo $ qod_text; ecou ' '; echo $ qod_author; ecou ' '; } // Cârlig de acțiune după restul ieșirii! do_action ('bpc_after_get_qod_text'); returnează ob_get_clean (); }

Cod cheie în extensie

Pluginul nu constă în altceva decât acțiuni și filtre pentru a modifica pluginul original. Iată codul pentru extensie:

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

După cum puteți vedea, acestea sunt utilizări destul de standard ale „ add_action () "Și" add_filter () „Și ambele funcții sunt agățate de paranteze pătrate, pe care le-am numit„ bpc_qod_text ”.

Rezultatul final este că pluginul nostru este acum extensibil: un al doilea dezvoltator poate urmări modificarea pluginului și spune „Îi doresc lui Carl Sagan să spună », Și faceți-o în timp ce utilizați pluginul original ca bază, la fel ca temele părinte și copil de pe WordPress.

Acesta este un astfel de truc care face ca un plugin precum WooCommerce să fie foarte popular, permițându-vă să adăugați noi funcții.

Asta e pentru acest tutorial. Sper să înțelegeți mai bine cazurile de utilizare diferite ale filtrelor și acțiunilor WordPress.