De ongelooflijke groei van WordPress heeft de ontwikkeling van websites vereenvoudigd. Populaire tutorials zoals het Tuts + -netwerk gebruiken WordPress om hun websites van stroom te voorzien. Deze websites bieden dagelijks honderden nieuwe handleidingen, artikelen en updates. Dus bijhouden van elk artikel is niet eenvoudig, zelfs niet met uw RSS-feedlezer. Je feedlezer zal snel gevuld zijn met nieuwe en als lezer zijn we alleen geïnteresseerd in bepaalde onderwerpen. Dus idealiter hebben we een methode nodig die artikelen bevat waarin we geïnteresseerd zijn. Over het algemeen zijn auteurs gespecialiseerd in specifieke gebieden. Als Darren Rowse een artikel schrijft over bloggen, wil iedereen het lezen. Op dezelfde manier hebben we favoriete auteurs die we elke keer willen lezen.
Dus in deze tutorial ga ik een eenvoudige WordPress plugin maken waarmee je je kunt abonneren op je favoriete auteurs. Je krijgt een e-mail wanneer je favoriete auteur een bericht publiceert. Vandaar dat u de belangrijke artikelen nooit meer zult missen.
Onze plug-in zorgt ervoor dat gebruikers in principe meldingen over nieuwe berichten van geabonneerde auteurs kunnen ontvangen. Hieronder volgen de functies en componenten die we zullen ontwikkelen tijdens de tutorial:
Ik ga deze stap niet in detail uitleggen, omdat je misschien al weet dat een WordPress plugin-bestand bovenaan een sectie met reacties moet hebben om de details van de plug-in te identificeren. Ik heb de plugin genoemd WP Auteurs volgen. Dus maak een nieuwe map aan in de / Wp-content / plugins map genoemd wp-follow-auteurs en maak de index.php bestand met de volgende details:
We hebben twee databasetabellen nodig voor deze plug-in. Ik ben ze aan het benoemen wp_author_subscribe
en wp_author_followers
(waar wp_
is eigenlijk het geconfigureerde db-voorvoegsel). De tafel wp_author_subscribe
houdt de e-mail van de abonnees, de activeringsstatus en de lijst van de gevolgde auteurs. De wp_author_followers
tabel bevat de auteurs-id en lijst met volgers. We moeten deze tabellen aanmaken over activering van plug-ins. Laten we dus de volgende code overwegen.
query ("DROP TABLE IF EXISTS $ wpdb-> prefix author_subscribe"); $ sql1 = "MAAK TAFEL $ wpdb-> prefix author_subscribe (id int (11) NOT NULL AUTO_INCREMENT, activation_code varchar (255) NOT NULL, email varchar (75) NOT NULL, status int (11) NOT NULL, gevolgd_authors tekst NOT NULL, PRIMARY KEY (id)) MOTOR = InnoDB AUTO_INCREMENT = 1; "; dbDelta ($ sql1); $ sql2 = ("MAAK TAFEL $ wpdb-> prefix author_followers (id int (11) NOT NULL AUTO_INCREMENT, author_id int (11) NOT NULL, volgers_lijst tekst NOT NULL, PRIMARY KEY (id)) ENGINE = InnoDB AUTO_INCREMENT = 1 ; "); dbDelta ($ sql2); register_activation_hook (__ FILE__, 'wp_authors_tbl_create'); ?>
register_activation_hook
. Dit is waar we onze databasetabellen zouden moeten maken.dbDelta
functie om de SQL-query uit te voeren zoals weergegeven in de bovenstaande code.Vervolgens moeten we de lijst met beschikbare auteurs weergeven zodat gebruikers deze kunnen volgen. Dus ik maak een shortcode waarmee je de auteurslijst op elke pagina kunt weergeven. Laten we beginnen met het maken van de shortocde.
Ik heb een shortcode gemaakt met de naam bijdragers
en een functie genaamd bijdragers
om de auteurslijst weer te geven. Alle code met betrekking tot het weergeven van auteurs bevindt zich binnen deze functie. U moet een speciale pagina maken om uw bijdragers te tonen. Je kunt het benoemen zoals je zou willen. Plaats vervolgens de shortcode [Bijdragen]
binnen de pagina en klik op de publicatieknop. Toch hebben we geen code in de shortcode-functie. Laten we daar dus eens naar kijken.
Sommige blogs stellen gebruikers in staat om te registreren. Ze zullen in het algemeen als abonnees worden aangemaakt en abonnees kunnen geen berichten maken. Dus wanneer we de gebruikerslijst weergeven, moeten we ervoor zorgen dat we de gebruikers krijgen die berichten kunnen maken. Laten we naar de onderstaande code kijken.
'; foreach ($ authors as $ author) if (user_can ($ author-> ID, 'publish_posts')) $ authorsList. = ''; $ authorsList. = ''. get_avatar ($ author-> ID). ''. get_the_author_meta ('display_name', $ author-> ID). '
'. get_the_author_meta ('description', $ author-> ID). '
get_users
functie.user_can
functie.data-auteur
attribuut en stel de ID van de auteur in.Nu hebben we de HTML-code voor het weergeven van auteurs. Laten we dus kijken naar de code voor het weergeven van het inschrijfformulier.
Volg WP Authors'. $ authorsList. ''. $ actStatus. 'Voer je e-mailadres in
In dit eenvoudige HTML-formulier hebben we een tekstveld waarin een gebruiker zijn e-mailadres kan invoeren. Dan hebben we 2 knoppen om in te schrijven en de gevolgde auteurslijst te laden. Ik gebruik AJAX in deze hele plug-in. Dus de ID en klassen van HTML-elementen spelen een vitale rol. Als u het actuele plug-in bestand controleert, zult u merken dat ik de code bovenaan de bijdragers
functie. Het wordt gebruikt om de activering te verifiëren en zal later worden uitgelegd. Nu hebben we de volledige vorm met de lijst van auteurs en het zal lijken op de afbeelding van de tutorial bovenaan.
Nu begint het feitelijke functionaliteitgedeelte en hebben we een aantal CSS-stijlen en Javascript-bestanden nodig om onze functionaliteit te ondersteunen. Dus de volgende code zal u laten zien hoe u de nodige scripts en stijlen op de aanbevolen manier kunt opnemen.
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'); ?>
wp_enqueue_script ( 'jquery')
followjs
die zich in de map met plug-ins bevindt.wp_register_style
en wp_enqueue_style
functies. Het bevindt zich ook in de map voor invoegtoepassingen.plugins_url
functie geeft je het pad naar de huidige plugin-map. Dit is de beste manier om scripts op te nemen. Sommige mensen krijgen de directory-URL van de plug-in en voegen de mapnaam van de plug-in toe om het pad te krijgen. Dit wordt niet aanbevolen en veroorzaakt fouten wanneer de mapnaam van de plug-in wordt gewijzigd.wp_localize_script
functie. ajaxUrl
- Hiermee wordt het pad naar het ajax-bestand in WordPress opgehaald.ajaxNonce
- Geeft een unieke sleutel voor elke ajax-aanvraag voor validatiedoeleinden.CURRENTURL
- Hiermee wordt het pad naar de huidige URL opgehaald om de pagina met bijdragers te identificeren.Om auteurs te volgen, moet een gebruiker zich abonneren via zijn e-mail. Zodra een gebruiker zijn e-mail invoert en op de knop Abonneren klikt, worden ze geabonneerd op de service en wordt een e-mail verzonden om de service te activeren. Laten we eens kijken wat er gebeurt als op de abonneerknop wordt geklikt.
Ik heb een jQuery-functie gekoppeld met de live-gebeurtenis die moet worden aangeroepen wanneer de knop Abonneren (#subscribeAuthors
) is geklikt. Het controleert of de e-mail geldig is met behulp van een reguliere expressie. Vervolgens maken we het AJAX-verzoek om de abonneerfunctie te bellen. Ik zal het AJAX-verzoek hier uitleggen.
subscribe_to_wp_authors
.Om AJAX-verzoeken vanuit de plug-in af te handelen, kunnen we de volgende code gebruiken:
Er worden acties genoemd wp_ajax_nopriv
en wp_ajax
om AJAX-verzoeken af te handelen voor gebruikers die zijn uitgelogd en respectievelijk zijn ingelogd. Deze acties worden gevolgd door een onderstrepingsteken en de actie die we hebben gedefinieerd in de AJAX-aanvraag van het JS-bestand. Dus in dit geval de subscribe_to_wp_authors
actie zal de subscribe_to_wp_authors
functie.
"Zorg ervoor om te gebruiken
dood gaan()
aan het einde van elke AJAX-functie in je PHP-code sinds WordPress terugkeert0
of-1
afhankelijk van het resultaat van de AJAX-aanvraag die fouten in JSON-strings kan veroorzaken. "
Laten we eens kijken wat er gebeurt in de functie:
get_results ($ wpdb-> prepare ("select * from $ wpdb-> prefix author_subscribe waar email =% s", $ subscriber_email)); if (count ($ email_result) == '0') $ activation_code = generate_random_act_code (); $ result = $ wpdb-> query ($ wpdb-> prepare ("VOEG IN IN $ 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']); if ($ result) if (wp_mail ($ subscriber_email, "WP Author Subscription", "Click $ activation_link to activate.")) echo json_encode (array ("success" => "Controleer e-mail voor activeringslink.") ); else echo json_encode (array ("error" => "Email Error.")); else echo json_encode (array ("error" => "Email bestaat al.")); else echo json_encode (array ("error" => "Geef een geldig e-mailadres op")); dood gaan(); ?>
wp_verify_nonce
functie. Verschillende nonce-waarden betekenen dat de AJAX-aanvraag ongeldig moet zijn en moet worden weggegooid.is_email
.Zodra de gebruiker vervolgens op de activatielink in de e-mail klikt, worden deze teruggestuurd naar de website met een activeringssuccesbericht en wordt zijn e-mailadres in het tekstvak geladen. De activeringscontrole vindt plaats aan de bovenkant van de shortcode-functie. Ik heb de uitleg eerder weggelaten, nu is het tijd om die code te bekijken in de bijdragers
functie.
get_results ($ wpdb-> prepare ("select * from $ wpdb-> prefix author_subscribe waar activation_code =% s en status = 0"), $ activationCode); if (count ($ activationCheck)! = 0) $ activationResult = $ wpdb-> query ($ wpdb-> prepare ("update $ wpdb-> prefix author_subscribe set status = 1 waarbij activation_code =% s"), $ activatie code); if ($ activationResult) $ confirmedEmail = $ activationCheck [0] -> email; $ actStatus = "Activering succesvol"; $ actClass = "succes"; else $ actStatus = "Activering mislukt"; $ actClass = "error"; ?>
Een gebruiker kan de auteurspagina rechtstreeks bezoeken of via de bevestigingslink. Dus eerst kijken we of het bevestigen volgen
parameter is beschikbaar in de URL om uit te zoeken of dit een activeringsverzoek is of niet. Vervolgens zoeken we naar een activering in de databasetabel voor de activeringscode die in de URL wordt verstrekt. Vervolgens worden de activeringsstatus van de gebruiker bijgewerkt en wordt het resultaatbericht met de relatieve CSS-klasse weergegeven. Nu is het hele inschrijvingsproces voltooid. Nu kan de gebruiker beginnen met het volgen van auteurs.
Nu is de activering geslaagd en wordt uw e-mail in het e-mailvak weergegeven. Dit is het moment waarop u auteurs uit de lijst kunt kiezen en op de knop kunt klikken "Volgen"
knop. Laten we kijken hoe een gebruiker een auteur kan volgen. Een AJAX-verzoek zal worden gedaan zodra u op de knop Volgen van een specifieke auteur klikt.
Elke auteur heeft een volgknop voor zijn naam die een CSS-klasse heeft genoemd volgen
. Dus telkens als op een vervolgknop wordt geklikt, wordt het $ Jq ( "volgen "). Live (" klik")
functie zal worden geactiveerd en we kunnen alleen de geklikte knop gebruiken $ Jq (deze)
. Vervolgens maken we een nieuw AJAX-verzoek zoals eerder met de actie follow_wp_authors
.
Het enige verschil hier is dat we een extra parameter toevoegen met de naam author_id
op het verzoek. We kunnen de ID van de auteur verkrijgen met behulp van de data-auteur
kenmerk dat we hebben gedefinieerd in de displaysectie. Laten we nu eens kijken naar de PHP-code voor het verwerken van dit AJAX-verzoek.
We moeten twee nieuwe acties toevoegen voor dit AJAX-verzoek, zoals we eerder deden. De functie follow_up_authors
bevat de code die wordt gebruikt voor het volgen van een auteur. Omdat het geen zin heeft telkens weer herhalende code te verklaren, ga ik de secties uitleggen die nodig zijn. Dus ik stel voor dat je de functie in het plugin-bestand bekijkt terwijl je de tutorial doorleest. Het eerste deel van de functie zal de nonce verifiëren, de e-mail valideren en controleren op activering in de database. Dus laten we verder gaan.
Aangezien we aangepaste tabellen gebruiken in onze plug-in, zelfs als er veel auteurs beschikbaar zijn op de site, zal onze auteurstabel aanvankelijk leeg zijn. Dus wanneer een gebruiker op de knop Volgen klikt voor een auteur, kunnen we controleren of de auteur beschikbaar is in onze tabel. Zo niet, dan maken we de eerste invoer door de auteur in de tabel te plaatsen. Beschouw de volgende code:
ID kaart; $ authorId = isset ($ _ POST ['author_id'])? $ _POST ['author_id']: "; / * * Controleer of de auteur bestaat en invoegen indien niet reeds beschikbaar om te volgen * / $ authorResult = $ wpdb-> get_results ($ wpdb-> prepare (" select * from $ wpdb- > prefix author_followers waarbij author_id =% d "), $ authorId); if (count ($ authorResult) == '0') $ result = $ wpdb-> query ($ wpdb-> prepare (" INSERT INTO $ wpdb-> voorvoegsel author_followers (author_id) VALUES (% d) ", $ authorId));?>
followed_authors; if ($ subscribedAuthorList! = ") $ subscribedAuthorList = explode (", ", $ subscribedAuthorList); else $ subscribedAuthorList = array (); if (! (in_array ($ authorId, $ subscribedAuthorList))) array_push ( $ subscribedAuthorList, $ authorId);?>
followed_authors
kolomwaarde in de wp_author_subscribe
tafel.ontploffen
en controleer vervolgens of de gebruiker al is geabonneerd op de auteur met behulp van de in_array
functie. Vervolgens voegen we de auteurs-ID toe aan de lijst met door de gebruiker gevolgde auteurs.get_results ($ wpdb-> prepare ("select * from $ wpdb-> prefix author_followers waarbij author_id =% d"), $ authorId); if (count ($ authorResult) == '1') if ($ authorResult [0] -> followers_list! = ") $ authorSubscribersArray = explode (", ", $ authorResult [0] -> followers_list); else $ authorSubscribersArray = array (); if (! (in_array ($ subscriberID, $ authorSubscribersArray))) array_push ($ authorSubscribersArray, $ subscriberID); // Gebruikerslijst die de specifieke auteur volgt $ followersList = implode ("," , $ authorSubscribersArray); // Auteurslijst gevolgd door specifieke gebruiker $ subscribedAuthorList = implode (",", $ subscribedAuthorList); $ result = $ wpdb-> query ($ wpdb-> prepare ("update $ wpdb-> prefix author_followers set volgers_list =% s waar author_id =% d "), $ followersList, $ authorId); $ result = $ wpdb-> query ($ wpdb-> prepare (" update $ wpdb-> prefix author_subscribe set follow_authors =% s waar e-mail =% s "), $ subscribedAuthorList, $ subscriberEmail); echo json_encode (array (" status "=>" succes "));?>
$ authorSubscribersArray
en toewijzen aan een variabele genaamd $ followersList
$ subscribedAuthorList
Als deze plug-in effectief moet zijn, moeten gebruikers mogelijk de functie hebben om auteurs niet meer te volgen en auteurs op elk gewenst moment te volgen. Ik zal het proces van het niet volgen van een auteur uitleggen. Omdat het erg op het volgende proces lijkt, zal ik herhaalde codes in de uitleg weglaten.
De knop inline met alle gevolgde auteurs wordt weergegeven als Volgend op. Wanneer u de muisaanwijzer op de knop houdt, verandert de tekst in een andere kleur Volg niet. Wanneer u op de knop klikt, wordt er een ander AJAX-verzoek gedaan om de auteur te 'Ontvolgen'. Omdat alleen de actienaam anders is dan de bovenstaande code, neem ik deze hier niet op. Je kunt naar kijken $ Jq ( "na "). Live (" klik", function ()
in de followjs
het dossier.
De functie die wordt gebruikt om de gebruiker niet meer te volgen, is unfollow_wp_authors
. Deze code is vergelijkbaar met de functie volg auteur. We kunnen de gemeenschappelijke code in de toekomst in één functie veranderen als u bereid bent de plug-in uit te breiden. In het gedeelte 'Volgende auteurs' hebben we de auteur toegevoegd aan de lijst als deze nog niet beschikbaar is. In dit geval verwijderen we de auteur van de lijst als deze al bestaat. Code hieronder toont u de wijzigingen in vergelijking met de functie van de volg-auteur.
$ waarde) if ($ authorId == $ waarde) niet ingesteld ($ subscribedAuthorList [$ key]); foreach ($ authorSubscribersArray as $ key => $ value) if ($ subscriberID == $ value) unset ($ authorSubscribersArray [$ key]); ?>
U kunt zien dat in plaats van auteurs naar de array te duwen, we ze verwijderen door de functie Uitschakelen te gebruiken.
In eerste instantie is het e-mailadres leeg wanneer u de pagina met de auteurslijst laadt, omdat we geen procedure hebben om de huidige gebruiker te identificeren. Vervolgens moet de gebruiker de e-mail invoeren en op de knop Laden klikken om de lijst met de volgende gegevens van elke gebruiker te krijgen. Dit wordt een andere AJAX-aanvraag die lijkt op de vorige en u kunt de code bekijken met $ Jq ( "# loadFollowers"). Live ( "klik", function ()
. Ik zal het resultaatgedeelte van het verzoek toelichten, omdat het een beetje verschilt van de vorige.
volgen
en controleert of de auteur wordt gevolgd door de gebruiker.inArray
functie wordt hiervoor gebruikt en het zal terugkeren -1
als de zoekreeks niet wordt gevonden in de array.Laten we eens kijken naar de functie voor het laden van de volgende auteurslijst vanaf de serverzijde:
get_results ($ wpdb-> prepare ("select * from $ wpdb-> prefix author_subscribe waar email =% s en status = 1"), $ subscriber_email); if (count ($ email_result) == '1') $ subscriberID = $ email_result [0] -> id; $ authorResult = $ wpdb-> get_results ($ wpdb-> prepare ("select * from $ wpdb-> prefix author_subscribe waar id =% d"), $ subscriberID); if (count ($ authorResult)! = '0') $ userFollowedAuthors = $ authorResult [0] -> gevolgd_authors; $ userFollowedAuthors = exploderen (",", $ userFollowedAuthors); echo json_encode (array ("authors" => $ userFollowedAuthors)); else echo json_encode (array ("error" => "Geef een geldig e-mailadres op")); dood gaan(); ?>
wp_author_subscribe
.Gebruikers zijn nu geabonneerd op de service en kunnen auteurs volgen en ontvolgen wanneer ze maar willen. Het laatste en belangrijkste deel van de zelfstudie is het verzenden van e-mails naar volgers wanneer een bericht door een auteur wordt gepubliceerd. Laten we beginnen.
We moeten een actie activeren als een gebruiker een nieuw bericht publiceert. WordPress biedt een reeks acties met de naam Poststatusovergangen om deze functionaliteit te bereiken. Ik heb vier overgangen ingesteld, die kunnen worden geactiveerd wanneer u een bericht publiceert.
De bovenstaande acties zullen de notify_author_followers
functie wanneer een bericht wordt geconverteerd naar een gepubliceerde staat van een van de nieuwe, concept, in behandeling of toekomstige staten. Dus laten we e-mails versturen met behulp van de notify_author_followers
functie.
post_author; $ authorDisplayName = get_the_author_meta ('display_name', $ publishedPostAuthor); $ authorsFollowers = $ wpdb-> get_results ($ wpdb-> prepare ("select * from $ wpdb-> prefix author_followers waarbij author_id =% d"), $ publishedPostAuthor); if (count ($ authorsFollowers) == '1') $ authorsFollowersList = $ authorsFollowers [0] -> followers_list; if ($ authorsFollowersList! = ") $ authorsFollowersEmails = $ wpdb-> get_results ($ wpdb-> prepare (" selecteer e-mail van $ wpdb-> prefix author_subscribe waar id in (% s) "), $ authorsFollowersList); $ bccList = "; foreach ($ authorsFollowersEmails als $ key => $ emailObject) $ bccList. = $ emailObject-> email. ""; $ bccList = substr ($ bccList, 0, -1); $ postMessage = "guid">$ Post-> POST_TITLE
"; $ emailHeaders. =" Van: WP Auteurs volgen"." \ r \ n "; $ emailHeaders. =" Bcc: $ bccList "." \ r \ n "; add_filter (" wp_mail_content_type ", create_function (" ", 'return' text / html"; ')); if (wp_mail ("[email protected]", "New Post From $ authorDisplayName", $ postMessage, $ emailHeaders)) ?>