WordPress för webbapplikationsutveckling händelser, åtgärder och filter

Under hela serien har vi tittat på hur WordPress kan användas för att bygga webbapplikationer.

Fram till den här tiden har vi fastställt att WordPress är en grund - snarare än en ram - och vi har pratat lite om hur vi behöver för att undvika att försöka Skohorns WordPress till en annan typ av designmönster än den av sin inbyggda typ.

För det ändamålet har vi fastställt att WordPress använder ett händelsestyrt designmönster, och att detta representeras bäst med sitt system av åtgärder och filter.

Även om det övergripande syftet med denna serie är att ge en undersökning av hur WordPress kan användas för webbapplikationsutveckling anser jag att det är viktigt att ta en titt på några praktiska exempel på hur kraftfull kroksystemet verkligen är för att förstå hur mycket vi - som utvecklare - kan anpassa WordPress för att passa våra behov.

Så i den här artikeln kommer vi att kolla på någon kod som representerar några vanliga åtgärder som kan uppnås med hjälp av WordPress-krokar, liksom lite lite standardfunktionalitet.

I slutändan, i slutet av artikeln, borde du ha en klar förståelse för varför utnyttja WordPresss händelsesdrivna karaktär är nyckeln till byggnadsprogram och varför vi inte bör försöka göra WordPress och dess underliggande mönster till något som de är inte.


Krokar: Åtgärder och filter

I den föregående artikeln gav vi två definitioner - en speciell för åtgärder och en speciellt för krokar:

Åtgärder är händelser i WordPress-livscykeln när vissa saker har inträffat - vissa resurser är laddade, vissa faciliteter är tillgängliga och, beroende på hur tidigt åtgärden har uppstått, har vissa saker ännu inte laddats.

Filter är funktioner som WordPress skickar data igenom under vissa punkter i sidans livscykel. De är främst ansvariga för att avlyssna, hantera och returnera data innan de gör det till webbläsaren eller spara data från webbläsaren till databasen.

Det här är nyckeln till att förstå de två typerna av WordPress-händelser eftersom det kommer att finnas tillfällen där du vill förutse en process, följa upp en process eller manipulera information innan du gör det till skärmen.

Att veta skillnaden i åtgärder och filter är nyckeln till byggprogram, plugins och teman i WordPress.

Därför ska vi pausa diskussionen om Varför WordPress kan användas för webbapplikationer och ta en praktisk titt på flera åtgärder och filter för att se till att vi alla förstår hur händelsessystemet fungerar, vilka typer av saker vi kan göra med det och förhoppningsvis få kreativitet att flöda om hur Dessa kan användas för att skapa en mer anpassad upplevelse.

Gemensamma åtgärder

Först ska vi ta en titt på flera åtgärder som ökar komplexiteten från den förut för att hjälpa till att visa hur kraftfulla handlingar kan bli.

1. Lägga till en JavaScript-fil i rubriken

Denna åtgärd är så vanlig att det är sannolikt att rota bland även de mest mellanliggande utvecklarna. Ändå är punkten kvar: Detta är ett exempel på en klassisk WordPress-åtgärd som används i nästan alla typer av teman som finns där ute.

Kort sagt, det drar nytta av wp_enqueue_scripts krok. Det här brinner under sidladdningssekvensen och låter dig berätta för WordPress vilka källfiler den ska innehålla såväl som var det ska inkludera det (som i, i rubriken eller sidfoten).

funktion example_add_theme_scripts () wp_enqueue_script ('reexample-script', get_stylesheet_directory_uri (). '/js/example.js', array ('jquery'), '1.0.0', FALSE);  add_action ('wp_enqueue_scripts', 're_add_theme_scripts');

Det här är lätt att förstå, rätt?

Ta tag i skriptet i tematets example.js filen från JavaScript-katalogen, se till att den är markerad som beroende av att jQuery laddas först, notera att det är version 1.0.0 av skriptet, och vi gör det inte vill ladda den i sidfoten.

2. Anpassa Läs mer Länk

Utanför rutan ger WordPress möjligheten att lägga till en "Läs mer ..." eller en "Fortsätt läsa ..." -länk som uppnås genom att använda tagg i postredigeraren.

Du kan ställa in den med hjälp av inbyggda stilar, men låt oss säga att du vill lägga till ytterligare kod som gör det mer snyggt med ditt tema, vara lättare att integrera med en lyhörd design eller något liknande.

Du kan sedan använda följande åtgärd:

funktion example_add_more_link_class ($ länk, $ text) $ html = '
'; $ html. = '
'. $ länk. '
'; $ html. = '
'; returnera $ html; add_action ("the_content_more_link", "example_add_more_link_class", 10, 2);

Lägg märke till att vi hakar i the_content_more_link som accepterar ankaret och ankarets text för den mer länken.

Inom funktionen släpper vi själva själva länken div behållare så att vi kan ha större kontroll över styling länken.

3. Hämta en persons namn via Ajax

Det här exemplet förutsätter att du använder Ajax i ditt projekt och att du redan har skapat lämpliga faciliteter för att se till att du kan göra asynkrona förfrågningar.

Detta förutsätter också att de data som skickas från klientsidan till serverns sida är ID för en användare för vilken du vill returnera hans eller hennes namn.

funktion example_get_user_name () $ user = null; om (isset ($ _GET ['user_id']) && 0 < strlen( trim( $_GET['user_id'] ) ) )  $user = get_user_by( 'id', $_GET['user_id'] ); if ( FALSE == $user )  echo $user->förnamn;  annat eko '-1';  // slut om dö;  // end re_get_employee_by_name add_action ('wp_ajax_example_get_user_name', 'example_get_user_name'); add_action ('wp_ajax_nopriv_example_get_user_name', 'example_get_user_name');

Så i ovanstående exempel kontrollerar vi först för att se till att användar ID är inställd i $ _GET insamling, och i så fall försöker det att hämta användaren från det ID-numret.

Om användaren existerar kommer den att echo användarens första namn tillbaka till klienten; annars kommer det att ekosätta en "-1'. Detta ger oss sedan flexibiliteten att svara på lämpligt sätt på kundsidan.

Vanliga filter

Precis som vi gjorde med de ovan nämnda åtgärderna, tar vi en titt på flera filter som vart och ett ökar något i komplexitet så att vi kan se några av de saker som vi kan göra med filter som ger oss större flexibilitet inom våra WordPress-projekt.

1. Lägger till innehåll i en enda post

Även om titeln på den här åtgärden ska vara tydlig nog, låt oss säga att du vill lägga till en mening längst ner på varje inlägg på din blogg, men du endast vill göra det på enskilda inlägg.

Detta kan uppnås med följande kod:

funktion example_append_post_content ($ content) if (is_single ()) $ html = '
'; $ html. = 'Det här innehållet kommer att visas i slutet av ett inlägg.'; $ html. = '
'; $ content. = $ html; returnera $ innehåll add_filter ('the_content', 'example_append_post_content');

Det här är lätt att förstå, rätt?

innehållet filtret passerar det faktiska innehållet i posten till den hakade funktionen. Därifrån kan vi manipulera uppgifterna på något sätt som vi passar.

I vårt fall kontrollerar vi först för att se om det är en enda sida. Om så är fallet lägger vi till en post-suffix behållare med en enda mening, lägg till innehållet och returnera sedan det.

Om det inte är ett enda inlägg, returneras innehållet som vanligt.

2. Omdirigera användare efter inloggning

En annan typ av filter som du kanske vill dra nytta av är omdirigering av användare efter att de har loggat in i programmet.

Till exempel, kanske om de är en administratör, bör de riktas till postpanelen. Annars borde de omdirigeras till webbplatsens hemsida.

För att uppnå detta kan vi dra nytta av login_redirect-filter:

funktion example_login_redirect ($ redirect_to, $ request, $ user) return (isset ($ user-> roller) && is_array ($ user-> roller) && in_array ('administrator', $ user-> roller))? home_url ('/ wp-admin /'): home_url ();  // end soi_login_redirect add_filter ('login_redirect', 'example_login_redirect', 10, 3);

I koden ovan har vi försett ett anpassat filter i login_redirect krok som utför följande:

  • Om användaren är en administratör, omdirigera dem till instrumentpanelen
  • Annars, rikta dem till HOME_URL av webbplatsen.

Lätt nog.

Även om det är ett relativt enkelt exempel, bör det få dig att tänka på mer av de avancerade sakerna du kan göra baserat på användarens roller och / eller funktioner.

Till exempel, istället för att bara omdirigera dem till vissa aspekter av ansökan, skulle du kunna visa dem olika bitar av information baserat på, säg deras roller.

3. Anpassa e-postmeddelanden

Detta speciella exempel är lite mer komplicerat eftersom add_filter samtal ingår inom ramen för en annan funktion som har en tredje part som ringer.

Specifikt kommer vi att skicka ett mail, men vi vill se till att vi har anpassat innehållstypen, innehållet och namnet innan det skickas innehållet.

För att göra detta måste vi först definiera en funktion:

funktion example_exmail_user ($ input) // Kod borttagen från korthet. // Anta att $ meddelande är definierat som innehållet i email add_filter ('wp_mail_content_type', create_function ("," return "text / html"; ")); add_filter ('wp_mail_from', 'example_mail_from'); add_filter ('wp_mail_from_name ',' example_mail_from_name '), om (wp_mail ($ input [' email-adress '],' Ditt konto har skapats! ', $ meddelande)) // Omdirigera hemma wp_redirect (home_url ()); else  // Ange en sida som ska leda till ett fel avsluta; funktion example_mail_from ($ email) returnera] [email protected] '; funktion example_mail_from_name ($ name) returnera "Exempel Webapps";

Därefter måste vi definiera funktioner som är anslutna till filtret som anges ovan. Nämligen…

  • wp_mail_content_type
  • wp_mail_from
  • wp_mail_from_name

Som du kan se kan filmar bli komplicerade relativt snabbt, men de är kraftfull och om du förstår vad du gör och hur alla bitar passar ihop, så att säga så kan du verkligen göra några fantastiska saker.


Bara att skrapa ytan

Som med de flesta handledningar och exempel på den här sidan klipper vi bara ytan på vad som kan göras med hjälp av WordPress-kroksystemet.

Naturligtvis är dessa exempel menade att vara just det - exempel på hur mäktiga handlingar och filter kan vara när det gäller att anpassa WordPress-upplevelsen.

Även om den här artikeln och exemplenkoden är avsedda att fungera som ett praktiskt exempel på några av de saker du kan göra är de inte avsedda att vara den slutgiltiga guiden för att arbeta med krokar.

I stället är de avsedda att visa hur vi kan börja utnyttja det som finns tillgängligt i WordPress API när du bygger en webbapplikation.


Strax…

I nästa artikel kommer vi att börja titta på flera faciliteter som tillhandahålls av WordPress direkt ur lådan. Vi ser hur de är användbara för att bygga webbapplikationer, hur man utnyttjar dem för vårt specifika arbete och hur de kan vara användbara vid uppbyggnad av webbapplikationer.

Därefter tar vi en titt på hur många av dessa funktioner fungerar bra inom ramen för ett webbprogram och hur vi kan använda krokar för att ytterligare anpassa det beteende som de tillhandahåller.