Enkel WordPress-plugin for å følge dine favorittforfattere

Den utrolige veksten i WordPress har forenklet utvikling av nettsider. Populære opplæringssider som Tuts + -nettverket bruker WordPress til å drive sine nettsteder. Disse nettstedene gir deg hundrevis av nye opplæringsprogrammer, artikler og oppdateringer daglig. Så holde orden på hver artikkel er ikke lett selv med RSS-leseren din. Din feed leser vil bli fylt med nye raskt, og som lesere er vi bare interessert i visse emner. Så ideelt ville vi trenge en metode som gir artikler som vi er interessert i. Generelt forfattere spesialiserer seg på bestemte områder. Hvis Darren Rowse skriver en artikkel om blogging, vil alle lese det. På samme måte har vi favorittforfattere som vi ønsker å lese hver gang.

Så i denne opplæringen skal jeg lage et enkelt WordPress-plugin som lar deg abonnere på favorittforfatterne dine. Du vil få en e-post hver gang din favorittforfatter publiserer et innlegg. Derfor vil du ikke gå glipp av viktige artikler igjen.


Hva utvikler vi i dag

Vårt plugin vil i utgangspunktet tillate brukere å få varsler om nye innlegg fra abonnenterte forfattere. Følgende er funksjonene og komponentene vi skal utvikle under opplæringen:

  • Opprette en kortkode for å liste opp alle forfatterne
  • Tillater brukere å følge og følge opp forfattere
  • Send e-post når et nytt innlegg publiseres

Trinn 1 Opprette pluginfilen

Jeg kommer ikke til å forklare dette trinnet i detalj, siden du kanskje allerede vet at en WordPress-pluginfil må ha en kommentarseksjon øverst for å identifisere plugin-detaljene. Jeg har kalt pluginet WP Følg forfattere. Så opprett en ny katalog i / Wp-content / plugins katalog kalt wp-follow-forfattere og opprett index.php fil med følgende detaljer:

 

Trinn 2 Opprette tabeller på Plugin Activation

Vi trenger to databasetabeller for denne plugin. Jeg navngir dem wp_author_subscribe og wp_author_followers (hvor wp_ vil egentlig være det konfigurerte db-prefikset). Bordet wp_author_subscribe vil beholde abonnentene e-post, aktiveringsstatus og etterfulgt av forfatterliste. De wp_author_followers Tabellen inneholder forfatter-ID og liste over tilhenger. Vi må lage disse tabellene ved pluginaktivering. Så la oss vurdere følgende kode.

 spørring ("DROP TABLE IF EXISTS $ wpdb-> prefix author_subscribe"); $ sql1 = "CREATE TABLE $ wpdb-> prefiks author_subscribe (id int (11) IKKE NULL AUTO_INCREMENT, activation_code varchar (255) IKKE NULL, email varchar (75) IKKE NULL, status int (11) IKKE NULL, followed_authors tekst IKKE NULL, PRIMARY KEY (id)) MOTOR = InnoDB AUTO_INCREMENT = 1; "; dbDelta ($ sql1); $ sql2 = ("CREATE TABLE $ wpdb-> prefiks author_followers (id int (11) IKKE NULL AUTO_INCREMENT, author_id int (11) IKKE NULL, followers_list tekst IKKE NULL, PRIMARY KEY (id)) ENGINE = InnoDB AUTO_INCREMENT = 1 ; "); dbDelta ($ SQL2);  register_activation_hook (__ FILE__, 'wp_authors_tbl_create'); ?>
  • Vi kan opprette en funksjon som skal kalles i plugin aktivering ved hjelp av register_activation_hook. Det er her vi skal lage våre databasetabeller.
  • Database tabeller kan opprettes ved hjelp av et tilpasset spørreskjema for WordPress. Men den anbefalte måten bruker dbDelta funksjon for å utføre SQL-spørringen som vist i koden ovenfor.

Trinn 3 Kortkode for Viser Forfatterliste

Deretter må vi vise listen over forfattere som er tilgjengelige for at brukerne skal følge. Så jeg lager en kortkode som lar deg vise forfatterlisten på en gitt side. La oss begynne å lage shortocde.

 

Jeg har opprettet en kodenummer som heter bidragsytere og en funksjon som kalles bidragsytere for å vise forfatterlisten. Alle koden relatert til å vise forfattere er plassert inne i denne funksjonen. Du må opprette en spesiell side for å vise bidragsyterne dine. Du kan nevne det uansett hva du vil at det skal være. Sett deretter kortnummeret [bidragsytere] på siden og klikk på publiseringsknappen. Likevel har vi ikke noen kode inne i shortcode-funksjonen. Så la oss se på det.

Skjermforfatterliste

Noen blogger tillater brukere å registrere seg. De vil bli opprettet som abonnenter generelt, og abonnenter kan ikke opprette innlegg. Så når vi viser brukerlisten, må vi sørge for at brukerne får muligheten til å skape innlegg. La oss se på koden nedenfor.

 '; foreach ($ forfattere som $ forfatter) if (user_can ($ author-> ID, 'publish_posts')) $ authorsList. = '
'. get_avatar ($ author-> ID). '

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

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

'; $ authorsList. = '
'; ?>
  • Vi får alle brukerne ved hjelp av get_users funksjon.
  • Da vi slår gjennom brukerlisten, må vi sjekke om brukeren har lov til å publisere innlegg ved hjelp av user_can funksjon.
  • Vi lager HTML-kode for detaljer om forfatterne som kan publisere innlegg. Jeg har vist forfatterbildet ved hjelp av gravatar, forfatternavn og beskrivelse.
  • Deretter lager vi en knapp for å følge forfattere. Det viktigste her er jeg har oppgitt a data-forfatter Tilordne og angi forfatterens ID.

Nå har vi HTML-koden for å vise forfattere. Så la oss se på koden for å vise abonnementsskjemaet.

  
Følg WP Forfattere
'. $ actStatus. '
Skriv inn din email
'. $ authorsList. '
'; ekko $ utgang; ?>

I dette enkle HTML-skjemaet har vi et tekstfelt for en bruker å skrive inn sin e-postadresse. Deretter har vi 2 knapper for å abonnere og laste den etterfulgte forfatterlisten. Jeg bruker AJAX gjennom hele dette pluginet. Så id og klasser av HTML-elementer spiller en viktig rolle. Hvis du sjekker den faktiske pluginfilen, vil du legge merke til at jeg ikke har forklart koden øverst i bidragsytere funksjon. Det er vant til å bekrefte aktiveringen og vil bli forklart senere. Nå har vi fullstendig skjema med listen over forfattere, og det vil se ut som opplæringsbildet som vises øverst.


Trinn 4 Konfigurere JavaScript og CSS

Nå begynner den faktiske funksjonalitetsdelen, og vi trenger noen CSS-stiler og Javascript-filer for å støtte vår funksjonalitet. Så følgende kode vil vise deg hvordan du tar med nødvendige skript og stiler på den anbefalte måten.

  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'); ?>

Trinn 5 Abonner på Plugin

For å følge forfattere må en bruker abonnere ved hjelp av e-posten sin. Når en bruker går inn i e-posten og klikker på knappen Abonner, vil de abonnere på tjenesten, og en e-post vil bli sendt for å aktivere tjenesten. La oss se hva som skjer når du klikker på abonnentknappen.

Opprette AJAX-forespørsel om abonnement

 

Jeg har vedlagt en jQuery-funksjon ved bruk av live-arrangementet som skal ringes når knappen Abonner (#subscribeAuthors) er klikket. Det kontrollerer om e-posten er gyldig med et vanlig uttrykk. Deretter oppretter vi AJAX-forespørselen for å ringe abonnementsfunksjonen. Jeg skal forklare AJAX-forespørselen her.

Håndtering av AJAX-forespørsel i WordPress

For å håndtere AJAX-forespørsler fra plugin kan vi bruke følgende kode:

 

Det er handlinger kalt wp_ajax_nopriv og wp_ajax Å håndtere AJAX-forespørsler for brukere som er logget ut og logget inn henholdsvis. Disse handlingene følges av en understrek og handlingen vi definerte i AJAX-forespørselen fra JS-filen. Så i dette tilfellet subscribe_to_wp_authors handling vil ringe på subscribe_to_wp_authors funksjon.

"Pass på å bruke dø() på slutten av hver AJAX-funksjon i PHP-koden din siden WordPress returnerer 0 eller -1 avhengig av resultatet av AJAX-forespørselen, som kan føre til feil i JSON-strenger. "

La oss se hva som skjer inne i funksjonen:

 get_results ($ wpdb-> prepare ("velg * fra $ wpdb-> prefix author_subscribe der email =% s", $ subscriber_email)); hvis (count ($ email_result) == '0') $ activation_code = generate_random_act_code (); $ result = $ wpdb-> query ($ wpdb-> forberede ("INSERT INTO $ wpdb-> prefix author_subscribe (email, activation_code, status) VALUES (% s,% s,% s)", $ subscriber_email, $ activation_code, "unsubscribed")); $ activation_link = add_query_arg ('confirm-follow', $ activation_code, get_site_url (). $ _POST ['url']); hvis ($ resultat) hvis (wp_mail ($ subscriber_email, "WP Author Subscription", "Klikk $ activation_link for å aktivere.")) echo json_encode (array ("suksess" => "Vennligst sjekk e-post for aktiveringskobling.") );  ellers echo json_encode (array ("error" => "Email Error."));  else echo json_encode (array ("error" => "Email eksisterer allerede."));  else echo json_encode (array ("error" => "Vennligst fyll inn gyldig e-post"));  dø (); ?>

Så når brukeren klikker på aktiveringslenken i e-posten, blir de sendt tilbake til nettsiden med en aktiveringssuksessmelding, og e-postadressen blir lastet inn i tekstboksen. Aktiveringskontrollen er gjort øverst på shortcode-funksjonen. Jeg har utelatt forklaringen tidligere, nå er det på tide å se på koden i bidragsytere funksjon.

 get_results ($ wpdb-> prepare ("velg * fra $ wpdb-> prefix author_subscribe der activation_code =% s og status = 0"), $ activationCode); ($ activationCheck)! = 0) $ activationResult = $ wpdb-> forespørsel ($ wpdb-> forberede ("oppdatere $ wpdb-> prefiks author_subscribe set status = 1 hvor activation_code =% s"), $ aktiviseringskode); hvis ($ activationResult) $ confirmedEmail = $ activationCheck [0] -> email; $ actStatus = "Activation Successfull"; $ actClass = "suksess";  else $ actStatus = "Aktivering mislyktes"; $ actClass = "error"; ?>

En bruker kan besøke forfatterens side direkte eller ved hjelp av bekreftelseslinken. Så først sjekker vi om bekrefte følge parameteren er tilgjengelig i nettadressen for å finne ut om dette er en aktiveringsforespørsel eller ikke. Deretter søker vi etter en aktivering i databasetabellen for aktiveringskoden som er oppgitt i nettadressen. Da oppdaterer vi brukerens aktiveringsstatus og viser resultatmeldingen med relative CSS-klasse. Nå er hele prosessen med å abonnere fullført. Nå kan brukeren begynne å følge forfattere.


Trinn 6 Følgende forfattere

Nå aktiveres aktiveringen og e-posten din vises i e-postboksen. Dette er tidspunktet hvor du kan velge forfattere fra listen og klikke på "Følg" knapp. La oss se hvordan du får en bruker til å følge en forfatter. En AJAX-forespørsel vil bli gjort så snart du klikker på følgeknappen til en bestemt forfatter.

 

Hver forfatter har en følgeknapp foran navnet hans som inneholder en CSS-klasse som heter Følg. Så hver gang en følge-knapp klikkes, $ Jq ( "follow "). Live (" klikk") funksjonen vil bli utløst, og vi kan bare få den klikkte knappen ved hjelp av $ Jq (denne). Da lager vi en ny AJAX-forespørsel som tidligere med handlingen follow_wp_authors.

Den eneste forskjellen her er at vi legger til en ekstra parameter som heter author_id til forespørselen. Vi kan få forfatterens ID ved hjelp av data-forfatter attributt vi definerte i displayet delen. La oss bare ta en titt på PHP-koden for å håndtere denne AJAX-forespørselen.

 

Vi må legge til to nye handlinger for denne AJAX-forespørselen som vi gjorde tidligere. Funksjonen follow_up_authors vil inneholde koden som brukes til å følge en forfatter. Siden det ikke er noe poeng som forklarer repeterende kode igjen og igjen, skal jeg forklare de seksjonene som er nødvendige. Så jeg foreslår at du ser på funksjonen i plugin-filen mens du leser gjennom opplæringen. Den første delen av funksjonen vil verifisere nonce, validere e-posten, og se etter aktivering i databasen. Så la oss gå videre.

Legge til brukere for å følge

Siden vi bruker egendefinerte tabeller i pluginet vårt, selv om det er mange forfattere tilgjengelig på nettstedet, vil vår forfattertabell i utgangspunktet være tom. Så når en bruker klikker på Følg-knappen for en forfatter, kan vi sjekke om forfatteren er tilgjengelig i vårt bord. Hvis ikke, gjør vi den første oppføringen ved å sette forfatteren inn i tabellen. Vurder følgende kode:

 id; $ authorId = isset ($ _ POST ['author_id'])? $ _POST ['author_id']: "; / * * Sjekk om forfatter eksisterer og sett inn hvis ikke allerede tilgjengelig for å følge * / $ authorResult = $ wpdb-> get_results ($ wpdb-> prepare (" velg * fra $ wpdb- > prefix author_followers where author_id =% d "), $ authorId), hvis (count ($ authorResult) == '0') $ result = $ wpdb-> spørring ($ wpdb-> forberede (" INSERT INTO $ wpdb-> prefix author_followers (author_id) verdier (% d) ", $ authorId));?>

Motta brukere som fulgte listen over forfattere

 followed_authors; hvis $ subscribedAuthorList! = ") $ subscribedAuthorList = eksplodere (", ", $ subscribedAuthorList); else $ subscribedAuthorList = array (); hvis (! (in_array ($ authorId, $ subscribedAuthorList))) array_push $ subscribedAuthorList, $ authorId);?>

Motta forfattere følgere liste og ferdigstillelse følg

 get_results ($ wpdb-> prepare ("velg * fra $ wpdb-> prefix author_followers hvor author_id =% d"), $ authorId); hvis (count ($ authorResult) == '1') if ($ authorResult [0] -> followers_list! = ") $ authorSubscribersArray = explodere (", ", $ authorResult [0] -> followers_list); else $ authorSubscribersArray = array (); hvis (! (in_array ($ subscriberID, $ authorSubscribersArray))) array_push ($ authorSubscribersArray, $ subscriberID); // Brukerliste som følger spesifikk forfatter $ followersList = implode , $ authorSubscribersArray); // Forfatterliste etterfulgt av spesifikk bruker $ subscribedAuthorList = implode (",", $ subscribedAuthorList); $ result = $ wpdb-> spørring ($ wpdb-> forberede ("oppdatere $ wpdb-> prefiks author_followers sett followers_list =% s hvor author_id =% d "), $ følgereList, $ authorId); $ result = $ wpdb-> forespørsel ($ wpdb-> forbered (" oppdater $ wpdb-> prefix author_subscribe set followed_authors =% s hvor e-post =% s "), $ subscribedAuthorList, $ subscriberEmail); echo json_encode (array (" status "=>" suksess "));

Trinn 7 Ikke fulgte forfattere

Hvis dette pluginet skal være effektivt, kan det hende at brukerne må ha funksjonen til å forfølge forfattere, samt følge forfattere til enhver tid. Jeg vil forklare prosessen med å ikke følge en forfatter. Siden det er veldig lik den følgende prosessen, kommer jeg til å utelate repeterende koder i forklaringen.

Knappen inline med alle de etterfølgende forfatterne vil bli vist som Følgende. Når du svinger på knappen, endres tekst til annen farge som Slutt å følge. Når du klikker på knappen, vil en annen AJAX-forespørsel bli gjort til "Unollow" forfatteren. Siden bare handlingsnavnet er forskjellig fra koden ovenfor, kommer jeg ikke til å inkludere den her. Du kan se på $ Jq ( "Følgende "). Live (" klikk", function () i followjs fil.

Funksjonen som brukes til å ufølge brukeren er unfollow_wp_authors. Denne koden ligner på følgende forfatterfunksjon. Vi kan sette den felles koden til en enkelt funksjon i fremtiden hvis du er villig til å utvide plugin. I den følgende forfatterens seksjon lagde vi forfatteren til listen hvis den ikke allerede var tilgjengelig. I dette tilfellet fjerner vi bare forfatteren fra listen hvis den allerede eksisterer. Koden nedenfor viser endringene i forhold til følgende forfatterfunksjon.

  $ verdi) hvis ($ authorId == $ verdi) unset ($ subscribedAuthorList [$ key]);  foreach ($ authorSubscribersArray som $ key => $ verdi) if ($ subscriberID == $ verdi) unset ($ authorSubscribersArray [$ key]); ?>

Du kan se at i stedet for å skyve forfattere til matrisen, fjerner vi dem ved hjelp av funksjonen unset.


Trinn 8 Laster forfatter Etter informasjon

I utgangspunktet vil e-postadressen være tom når du laster siden med forfatterlisten, siden vi ikke har en fremgangsmåte for å identifisere den gjeldende brukeren. Deretter må brukeren skrive inn e-posten og klikke på lasteknappen for å få listen med følgende detaljer for hver bruker. Dette kommer til å være en annen AJAX-forespørsel som ligner på de forrige, og du kan se på koden ved hjelp av $ Jq ( "# loadFollowers"). Live ( "klikk", function () . Jeg skal forklare resultatdelen av forespørselen, siden den er litt annerledes enn de forrige.

 

La oss se på funksjonen for å legge inn forfatterliste fra server side:

 get_results ($ wpdb-> prepare ("velg * fra $ wpdb-> prefix author_subscribe der e-post =% s og status = 1"), $ subscriber_email); hvis (count ($ email_result) == '1') $ subscriberID = $ email_result [0] -> id; $ authorResult = $ wpdb-> get_results ($ wpdb-> prepare ("velg * fra $ wpdb-> prefix author_subscribe der id =% d"), $ subscriberID); hvis (count ($ authorResult)! = '0') $ userFollowedAuthors = $ authorResult [0] -> followed_authors; $ userFollowedAuthors = eksplodere (",", $ userFollowedAuthors); ekko json_encode (array ("authors" => $ userFollowedAuthors));  else echo json_encode (array ("error" => "Vennligst fyll inn gyldig e-post"));  dø (); ?>

Nå abonnerer brukerne på tjenesten og kan følge og unollow forfattere når de vil. Den endelige og viktigste delen av opplæringen er å sende e-post til tilhenger når et innlegg publiseres av en forfatter. La oss komme i gang.


Trinn 9 Sende e-post når innlegg er publisert

Vi må utløse en handling når noen bruker publiserer et nytt innlegg. WordPress gir et sett med handlinger kalt Post Status Transitions for å oppnå denne funksjonaliteten. Jeg har satt opp fire overganger, som kan utløses når du publiserer et innlegg.

 

Ovennevnte handlinger vil ringe til notify_author_followers fungere når et innlegg konverteres til en publisert tilstand fra en av nye, utkast, ventende eller fremtidige stater. Så la oss sende e-post med notify_author_followers funksjon.

 post_author; $ authorDisplayName = get_the_author_meta ('display_name', $ publishedPostAuthor); $ authorsFollowers = $ wpdb-> get_results ($ wpdb-> prepare ("velg * fra $ wpdb-> prefix author_followers hvor author_id =% d"), $ publishedPostAuthor); hvis (count ($ authorsFollowers) == '1') $ authorsFollowersList = $ authorsFollowers [0] -> followers_list; hvis ($ authorsFollowersList! = ") $ authorsFollowersEmails = $ wpdb-> get_results ($ wpdb-> forberede (" velg e-post fra $ wpdb-> prefix author_subscribe der id i% s) "), $ authorsFollowersList); $ bccList = "; foreach ($ authorsFollowersEmails as $ key => $ emailObject) $ bccList. = $ emailObject-> email. "";  $ bccList = substr ($ bccList, 0, -1); $ postMessage = "guid">

$ Post-> POST_TITLE

"; $ emailHeaders. =" Fra: WP Følg forfattere ". \ r \ n"; $ emailHeaders. = "Bcc: $ bccList". "\ r \ n"; add_filter ("wp_mail_content_type", create_function ("", "return" tekst / html ";")); hvis (wp_mail ("[email protected]", "Ny post fra $ authorDisplayName", $ postMessage, $ emailHeaders)) >>

Vi har fullført prosessen med å lage et grunnleggende WordPress-plugin for å følge forfattere. Når et innlegg er publisert, vil følgere bli varslet. Det er så enkelt.


Konklusjon

Jeg måtte lage en lang opplæring for å forklare alt i å lage denne typen plugin ved hjelp av AJAX. Dette er fortsatt på sitt mest grunnleggende nivå. Som bruker vil jeg ha funksjonaliteten til å følge forfattere i hver blogg jeg leser. Så som webmastere bør du vurdere å forbedre pluginfunksjonalitetene slik at brukerne følger sine favorittforfattere. Du vil også få en gratis e-post abonnentliste som en bonus. Håper du likte opplæringen o