Enkelt WordPress-plugin för att följa dina favoritförfattare

Den otroliga tillväxten i WordPress har förenklat webbutveckling. Populära handledningssidor som Tuts + -nätverket använder WordPress för att driva sina webbplatser. Dessa webbplatser tillhandahåller hundratals nya handledningar, artiklar och uppdateringar dagligen. Så att hålla reda på varje artikel är inte lätt även med din RSS-läsare. Din matläsare fylls med nya snabbt och som läsare är vi bara intresserade av vissa ämnen. Så idealiskt skulle vi behöva en metod som ger artiklar som vi är intresserade av. Allmänt författare specialiserar sig på specifika områden. Om Darren Rowse skriver en artikel om bloggar vill alla läsa den. På samma sätt har vi favoritförfattare som vi vill läsa varje gång.

Så i denna handledning kommer jag att skapa ett enkelt WordPress-plugin som låter dig prenumerera på dina favoritförfattare. Du får ett mail varje gång din favoritförfattare publicerar ett inlägg. Därför kommer du inte att sakna de viktiga artiklarna någonsin igen.


Vad utvecklar vi idag

Vår plugin tillåter i princip användare att få meddelanden om nya inlägg från abonnenterade upphovsmän. Följande är de funktioner och komponenter som vi kommer att utveckla under handledningen:

  • Skapa en kortnummer för att lista alla författare
  • Tillåter användarna att följa och följa upp författare
  • Skicka e-postmeddelanden när ett nytt inlägg publiceras

Steg 1 Skapa pluginfilen

Jag kommer inte att förklara detta steg i detalj, eftersom du kanske redan vet att en WordPress-pluginfil måste ha en kommentar sektion överst för att identifiera plugin-detaljerna. Jag har namngett plugin WP Följ författare. Så skapa en ny katalog i / Wp-content / plugins katalog heter wp-följ-författare och skapa index.php fil med följande uppgifter:

 

Steg 2 Skapa tabeller vid pluginaktivering

Vi behöver två databas tabeller för denna plugin. Jag heter dem wp_author_subscribe och wp_author_followers (var wp_ kommer faktiskt att vara det konfigurerade db-prefixet). Bordet wp_author_subscribe kommer att behålla abonnenternas e-post, aktiveringsstatus och efterföljande författarlista. De wp_author_followers tabellen innehåller författarens id och lista över anhängare. Vi måste skapa dessa tabeller om plugin-aktivering. Så låt oss överväga följande kod.

 fråga ("DROP TABLE IF EXISTS $ wpdb-> prefix author_subscribe"); $ sql1 = "SKAPA TABELL $ wpdb-> prefix author_subscribe (id int (11) INTE NULL AUTO_INCREMENT, activation_code varchar (255) INTE NULL, email varchar (75) INTE NULL, status int (11) INTE NULL, följt av författarens text NOT NULL, PRIMARY KEY (id)) MOTOR = InnoDB AUTO_INCREMENT = 1; "; dbDelta ($ sql1); $ sql2 = ("CREATE TABLE $ wpdb-> prefix author_followers (id int (11) INTE NULL AUTO_INCREMENT, author_id int (11) INTE NULL, följare_list text INTE NULL, PRIMÄR KEY (id)) ENGINE = InnoDB AUTO_INCREMENT = 1 ; "); dbDelta ($ sql2);  register_activation_hook (__ FILE__, 'wp_authors_tbl_create'); ?>
  • Vi kan skapa en funktion som ska kallas i plugin aktivering med register_activation_hook. Här ska vi skapa våra databas tabeller.
  • Databas tabeller kan skapas med hjälp av en anpassad WordPress-fråga. Men det rekommenderade sättet är att använda dbDelta funktion för att utföra SQL-frågan som visas i koden ovan.

Steg 3 Kortnummer för Visar Författarlista

Nästa måste vi visa listan över författare som är tillgängliga för att användarna ska följa. Så jag skapar en kortnummer som låter dig visa författarlistan på en viss sida. Låt oss börja skapa shortocde.

 

Jag har skapat en kortnummer som heter bidrags och en funktion som heter bidrags för att visa författarlistan. Alla koden relaterade till att visa författare finns i denna funktion. Du måste skapa en särskild sida för att visa dina bidragsgivare. Du kan namnge det vad du vill att det ska vara. Placera sedan kortnumret [bidrags] inuti sidan och klicka på publicera-knappen. Fortfarande har vi inte någon kod inom kortkodsfunktionen. Så låt oss titta på det.

Visa författarlista

Vissa bloggar tillåter användare att registrera sig. De kommer att skapas som abonnenter i allmänhet och abonnenter kan inte skapa inlägg. Så när vi visar användarlistan måste vi se till att få de användare som har förmågan att skapa inlägg. Låt oss titta på koden nedan.

 '; foreach ($ författare som $ författare) if (user_can ($ author-> ID, 'publish_posts')) $ authorsList. = '
'. get_avatar ($ author-> ID). '

'. get_the_author_meta ('display_name', $ author-> ID). '

'. get_the_author_meta ('description', $ author-> ID). '

'; $ authorsList. = '
'; ?>
  • Vi får alla användare som använder get_users fungera.
  • Då måste vi se om användaren får publicera inlägg med hjälp av user_can fungera.
  • Vi skapar HTML-kod för information om författare som kan publicera inlägg. Jag har visat författarbilden med hjälp av gravatar, författarens visningsnamn och beskrivning.
  • Nästa skapar vi en knapp för att följa författarna. Det viktiga här är jag har angett a data författaren ange och ange författarens ID.

Nu har vi HTML-koden för att visa författare. Så låt oss titta på koden för att visa prenumerationsformuläret.

  
Följ WP-författare
'. $ actStatus. '
Skriv in din e-postadress
'. $ authorsList. '
'; echo $ output; ?>

I denna enkla HTML-formulär har vi ett textfält för en användare att ange sin e-postadress. Då har vi 2 knappar för att prenumerera och ladda den efterföljande författarlistan. Jag använder AJAX genom hela denna plugin. Så spelar ID och klasser av HTML-element en viktig roll. Om du kontrollerar den faktiska pluginfilen märker du att jag inte har förklarat koden längst upp i bidrags fungera. Det används för att verifiera aktiveringen och kommer att förklaras senare. Nu har vi det fullständiga formuläret med författarnas lista och det kommer att se ut som bildspelet som visas längst upp.


Steg 4 Konfigurera JavaScript och CSS

Nu börjar den faktiska funktionalitetsdelen och vi behöver några CSS-format och Javascript-filer för att stödja vår funktionalitet. Så följande kod visar dig hur du tar med nödvändiga skript och stilar på det rekommenderade sättet.

  admin_url ('admin-ajax.php'), 'ajaxNonce' => wp_create_nonce ('follow-nonce'), 'currentURL' => $ _SERVER ['REQUEST_URI']); wp_localize_script ('followjs', 'ajaxData', $ config_array);  add_action ('wp_enqueue_scripts', 'apply_wp_author_scripts'); ?>

Steg 5 Prenumerera på plugin

För att följa författare måste en användare prenumerera via deras email. När en användare har skrivit in sin epost och klickar på knappen Prenumerera, kommer de att prenumerera på tjänsten och ett e-postmeddelande skickas för att aktivera tjänsten. Låt oss se vad som händer när prenumerationsknappen klickas.

Skapa AJAX-förfrågan om prenumeration

 

Jag har bifogat en jQuery-funktion med liveevenemanget som ska ringas när knappen Prenumerera (#subscribeAuthors) är klickat. Det kontrollerar om e-postadressen är giltig med ett vanligt uttryck. Då skapar vi AJAX-förfrågan för att ringa prenumerationsfunktionen. Jag förklarar AJAX-förfrågan här.

Hantering av AJAX-förfrågan i WordPress

För att hantera AJAX-förfrågningar från plugin kan vi använda följande kod:

 

Det finns åtgärder som heter wp_ajax_nopriv och wp_ajax för att hantera AJAX-förfrågningar för användare som är inloggade och inloggade respektive. Dessa åtgärder följs av en understrykning och den åtgärd vi definierade i AJAX-förfrågan från JS-filen. Så i det här fallet subscribe_to_wp_authors åtgärd kommer att ringa subscribe_to_wp_authors fungera.

"Se till att du använder dö() i slutet av varje AJAX-funktion i din PHP-kod sedan WordPress returnerar 0 eller -1 beroende på resultatet av AJAX-förfrågan, vilket kan orsaka fel i JSON-strängar. "

Låt oss se vad som händer inom funktionen:

 get_results ($ wpdb-> prepare ("välj * från $ wpdb-> prefix author_subscribe där email =% s", $ subscriber_email)); om (räkna ($ email_result) == '0') $ activation_code = generate_random_act_code (); $ result = $ wpdb-> query ($ wpdb-> förbereda ("INSERT INTO $ wpdb-> prefix author_subscribe (email, activation_code, status) VALUER (% s,% s,% s)", $ subscriber_email, $ activation_code, "unsubscribed")); $ activation_link = add_query_arg ("confirm-follow", $ activation_code, get_site_url (). $ _POST ['url']); om $ resultat if (wp_mail ($ subscriber_email, "WP Author Subscription", "Klicka $ activation_link to activate.")) echo json_encode (array ("success" => "Vänligen kolla e-post för aktiveringslänk.") );  annars echo json_encode (array ("error" => "Email Error."));  else echo json_encode (array ("error" => "E-post finns redan."));  else echo json_encode (array ("error" => "Vänligen ange giltig e-post"));  dö (); ?>

Så snart användaren klickar på aktiveringslänken i e-postmeddelandet, kommer de att styras tillbaka till webbplatsen med ett aktiveringssuccesmeddelande och deras e-postadress laddas i textrutan. Aktiveringskontrollen görs längst upp i kortkodsfunktionen. Jag har förklarat förklaringen tidigare, nu är det dags att kolla in den koden i bidrags fungera.

 get_results ($ wpdb-> prepare ("välj * från $ wpdb-> prefix author_subscribe där activation_code =% s och status = 0"), $ activationCode); ($ activationCheck)! = 0) $ activationResult = $ wpdb-> fråga ($ wpdb-> förbereda ("uppdatera $ wpdb-> prefix author_subscribe set status = 1 där activation_code =% s"), $ aktiveringskod); om ($ activationResult) $ confirmedEmail = $ activationCheck [0] -> email; $ actStatus = "Activation Successfull"; $ actClass = "success";  else $ actStatus = "Aktivering misslyckades"; $ actClass = "error"; ?>

En användare kan besöka författarens sida direkt eller använda länken för bekräftelse. Så först kontrollerar vi om bekräfta-följ Parameter finns i webbadressen för att se om det här är en aktiveringsförfrågan eller inte. Då söker vi efter en aktivering i databattabellen för aktiveringskoden som finns i webbadressen. Då uppdaterar vi användarens aktiveringsstatus och visar resultatmeddelandet med relativ CSS-klass. Nu är hela processen att prenumerera avslutad. Nu kan användaren börja följa författare.


Steg 6 Följande författare

Aktiveringen är nu framgångsrik och din e-post visas i e-postrutan. Det här är den tid då du kan välja författare från listan och klicka på "Följ" knapp. Låt oss se hur man får en användare att följa en författare. En AJAX-förfrågan kommer att göras så snart du klickar på en specifik författares följarknapp.

 

Varje författare har en följeknapp framför hans namn som innehåller en CSS-klass som heter Följ. Så varje gång en följeknapp klickas, så $ Jq ( "Följ "). Lever (" klick") funktionen kommer att utlösas och vi kan bara få den klickade knappen med $ JQ (detta). Då gör vi en ny AJAX-förfrågan som tidigare med åtgärden follow_wp_authors.

Den enda skillnaden här är att vi lägger till en extra parameter som heter author_id till begäran. Vi kan få författarens ID med hjälp av data författaren attribut vi definierade i visningsavsnittet. Låt oss nu bara titta på PHP-koden för hantering av denna AJAX-förfrågan.

 

Vi måste lägga till två nya åtgärder för denna AJAX-förfrågan som vi gjorde tidigare. Funktionen follow_up_authors kommer att innehålla koden som används för att följa en författare. Eftersom det inte går att förklara repeterande kod igen och igen ska jag förklara de sektioner som är nödvändiga. Så jag föreslår att du tittar på funktionen i pluginfilen medan du läser igenom handledningen. Den inledande delen av funktionen verifierar nonce, validerar e-postmeddelandet och kontrollerar aktiveringen i databasen. Så låt oss gå framåt.

Lägger till användare för att följa

Eftersom vi använder egna tabeller i vårt plugin, trots att det finns många författare som finns på webbplatsen, kommer vår författartabell att vara tom. Så när en användare klickar på knappen Följ för en författare kan vi kolla om författaren är tillgänglig i vårt bord. Om inte gör vi den ursprungliga inmatningen genom att förlägga författaren till tabellen. Tänk på följande kod:

 id; $ authorId = isset ($ _ POST ['author_id'])? $ _POST ['author_id']: "; / * * Kontrollera om författaren finns och sätt in om det inte redan är tillgängligt för att följa * / $ authorResult = $ wpdb-> get_results ($ wpdb-> förbereda (" välj * från $ wpdb- > prefix author_followers where author_id =% d "), $ authorId), om (count ($ authorResult) == '0') $ result = $ wpdb-> fråga ($ wpdb-> förbereda (" INSERT INTO $ wpdb-> prefix author_followers (author_id) värden (% d) ", $ authorId));>>

Mottagande användare följde upphovsrättslistan

 followed_authors; om $ subscribedAuthorList! = ") $ subscribedAuthorList = explodera (", ", $ subscribedAuthorList); annars $ subscribedAuthorList = array (); om (! (in_array ($ authorId, $ subscribedAuthorList))) array_push $ subscribedAuthorList, $ authorId);?>

Motta författare följare lista och slutföra följa

 get_results ($ wpdb-> prepare ("välj * från $ wpdb-> prefix author_followers where author_id =% d"), $ authorId); om count ($ authorResult) == '1') if ($ authorResult [0] -> followers_list! = ") $ authorSubscribersArray = explodera (", ", $ authorResult [0] -> followers_list); $ authorSubscribersArray = array (); if (! (in_array ($ subscriberID, $ authorSubscribersArray))) array_push ($ authorSubscribersArray, $ subscriberID); // Användarlista som följer specifik författare $ followersList = implode , $ authorSubscribersArray); // Författarlista följt av specifik användare $ subscribedAuthorList = implode (",", $ subscribedAuthorList); $ result = $ wpdb-> fråga ($ wpdb-> förbereda ("uppdatera $ wpdb-> prefix author_followers set followers_list =% s där author_id =% d "), $ följareLista, $ authorId); $ result = $ wpdb-> fråga ($ wpdb-> förbereda (" uppdatera $ wpdb-> prefix author_subscribe set followed_authors =% s där email =% s "), $ subscribedEuthorList, $ subscriberEmail); echo json_encode (array (" status "=>" framgång "));

Steg 7 Ouppföljande författare

Om det här pluginet ska vara effektivt kan det hända att användarna måste ha funktionen att följa upp upphovsmän och följa upphovsmän vid en viss tidpunkt. Jag förklarar processen att följa upp en författare. Eftersom det väldigt liknar följande process kommer jag att släppa upp repeterande koder i förklaringen.

Knappen inline med alla efterföljande författare kommer att visas som Följande. När du sveper på knappen ändras texten till olika färger som Sluta följa. När du klickar på knappen kommer en annan AJAX-förfrågan att göras till "Avfölja" författaren. Eftersom endast åtgärdsnamnet skiljer sig från ovanstående kod kommer jag inte att inkludera det här. Du kan titta på $ Jq ( "följa "). Lever (" klick", function () i followjs fil.

Funktionen som användes för att följa upp användaren är unfollow_wp_authors. Denna kod liknar följande författarfunktion. Vi kan lägga den gemensamma koden i en enda funktion i framtiden om du är villig att förlänga plugin. I den följande författaravsnittet lade vi till författaren till listan om den inte redan är tillgänglig. I det här fallet tar vi bara bort författaren från listan om det redan finns. Koden nedan visar ändringarna jämfört med följande författarfunktion.

  $ värde) om ($ authorId == $ värde) unset ($ subscribedAuthorList [$ key]);  foreach ($ authorSubscribersArray som $ key => $ värde) if ($ subscriberID == $ värde) unset ($ authorSubscribersArray [$ key]); ?>

Du kan se att vi istället för att trycka författare till matrisen tar bort dem med hjälp av funktionen unset.


Steg 8 Laddar författare Följande information

Ursprungligen kommer e-postadressen att vara tom när du laddar sidan med författarlistan eftersom vi inte har ett förfarande för att identifiera den aktuella användaren. Då måste användaren ange e-postmeddelandet och klicka på lastknappen för att få listan med följande uppgifter för varje användare. Detta kommer att bli en annan AJAX-förfrågan som liknar tidigare och du kan titta på koden med $ JQ ( "# loadFollowers"). Leva ( "klick", function () . Jag förklarar resultatdelen av förfrågan eftersom den är lite annorlunda än de föregående.

 

Låt oss ta en titt på funktionen för att ladda följande författarlista från serverns sida:

 get_results ($ wpdb-> prepare ("välj * från $ wpdb-> prefix author_subscribe där email =% s och status = 1"), $ subscriber_email); om (räkna ($ email_result) == '1') $ subscriberID = $ email_result [0] -> id; $ authorResult = $ wpdb-> get_results ($ wpdb-> förbereda ("välj * från $ wpdb-> prefix author_subscribe där id =% d"), $ subscriberID); om (räkna ($ authorResult)! = '0') $ userFollowedAuthors = $ authorResult [0] -> followed_authors; $ userFollowedAuthors = explodera (",", $ userFollowedAuthors); echo json_encode (array ("authors" => $ userFollowedAuthors));  else echo json_encode (array ("error" => "Vänligen ange giltig e-post"));  dö (); ?>

Nu abonnerar användarna på tjänsten och kan följa och följa upp författare när de vill. Den sista och viktigaste delen av handledningen är att skicka e-post till anhängare när ett inlägg publiceras av en författare. Låt oss börja.


Steg 9 Skicka e-post när inlägg publiceras

Vi måste utlösa en åtgärd när någon användare publicerar ett nytt inlägg. WordPress tillhandahåller en uppsättning åtgärder som heter Post Status Transitions för att uppnå denna funktionalitet. Jag har satt upp fyra övergångar, som kan utlösas när du publicerar ett inlägg.

 

Ovanstående åtgärder kommer att ringa notify_author_followers Funktion när ett inlägg konverteras till ett publicerat tillstånd från ett av nya, utkast, pågående eller framtida stater. Så låt oss skicka e-post med hjälp av notify_author_followers fungera.

 post_author; $ authorDisplayName = get_the_author_meta ("display_name", $ publishedPostAuthor); $ authorsFollowers = $ wpdb-> get_results ($ wpdb-> förbereda ("välj * från $ wpdb-> prefix author_followers where author_id =% d"), $ publishedPostAuthor); om (räkna ($ authorsFollowers) == '1') $ authorsFollowersList = $ authorsFollowers [0] -> followers_list; om $ authorsFollowersList! = ") $ authorsFollowersEmails = $ wpdb-> get_results ($ wpdb-> förbereda (" välj e-post från $ wpdb-> prefix author_subscribe där id i (% s) "), $ authorsFollowersList); $ bccList = "; foreach ($ authorsFollowersEmails as $ key => $ emailObject) $ bccList. = $ emailObject-> email. "";  $ bccList = substr ($ bccList, 0, -1); $ postMessage = "guid">

$ Post-> POST_TITLE

"; $ emailHeaders. =" Från: WP Följ författare ". \ r \ n"; $ emailHeaders. = "Bcc: $ bccList". "\ r \ n"; add_filter ("wp_mail_content_type", create_function ("", "return" text / html ";")); om (wp_mail ("[email protected]", "Ny post från $ authorDisplayName", $ postMessage, $ emailHeaders)) ?>

Vi har slutfört processen med att skapa ett grundläggande WordPress-plugin för att följa författarna. När ett inlägg publiceras kommer följare att bli underrättad. Så enkelt är det.


Slutsats

Jag var tvungen att skapa en lång handledning för att förklara allt för att skapa denna typ av plugin med AJAX. Detta är fortfarande på sin mest grundläggande nivå. Som användare skulle jag vilja ha funktionaliteten att följa författare i varje blogg jag läste. Så som webbmasters bör du överväga att förbättra pluginfunktionerna så