Einfaches WordPress-Plugin, um Ihren Lieblingsautoren zu folgen
German (Deutsch) translation by Katharina Grigorovich-Nevolina (you can also view the original English article)



Die unglaubliche Wachstumsrate von WordPress hat die Website-Entwicklung vereinfacht. Beliebte Tutorial-Sites wie das Tuts+ -Netzwerk verwenden WordPress, um ihre Websites mit Strom zu versorgen. Diese Websites bieten täglich Hunderte neuer Tutorials, Artikel und Updates. Daher ist es selbst mit Ihrem RSS-Feed-Reader nicht einfach, jeden Artikel im Auge zu behalten. Ihr Feed-Reader wird schnell mit neuen gefüllt und als Leser interessieren wir uns nur für bestimmte Themen. Idealerweise benötigen wir also eine Methode, die Artikel bereitstellt, an denen wir interessiert sind. Im Allgemeinen sind Autoren auf bestimmte Bereiche spezialisiert. Wenn Darren Rowse einen Artikel über das Bloggen schreibt, wird jeder ihn lesen wollen. Ebenso haben wir Lieblingsautoren, die wir jedes Mal gerne lesen würden.
In diesem Tutorial werde ich ein einfaches WordPress-Plugin erstellen, mit dem Sie Ihre Lieblingsautoren abonnieren können. Sie erhalten jedes Mal eine E-Mail, wenn Ihr Lieblingsautor einen Beitrag veröffentlicht. Daher werden Sie die wichtigen Artikel nie wieder verpassen.
Was entwickeln wir heute?
Unser Plugin ermöglicht es Benutzern grundsätzlich, Benachrichtigungen über neue Beiträge von abonnierten Autoren zu erhalten. Im Folgenden sind die Funktionen und Komponenten aufgeführt, die wir während des Tutorials entwickeln werden:
- Erstellen eines Shortcodes, um alle Autoren aufzulisten
- Ermöglichen, dass Benutzer Autoren folgen und nicht folgen
- Senden Sie E-Mails, wenn ein neuer Beitrag veröffentlicht wird
Schritt 1 Erstellen der Plugin-Datei
Ich werde diesen Schritt nicht im Detail erklären, da Sie möglicherweise bereits wissen, dass eine WordPress-Plugin-Datei oben einen Kommentarbereich benötigen muss, um die Plugin-Details zu identifizieren. Ich habe das Plugin WP Follow Authors genannt. Erstellen Sie also ein neues Verzeichnis im Verzeichnis /wp-content /plugins mit dem Namen wp-follow-authors und erstellen Sie die Datei index.php mit den folgenden Details:
1 |
<?php
|
2 |
/*
|
3 |
Plugin Name: WP Follow Authors
|
4 |
Version: 1.0
|
5 |
Plugin URI: https://wp.tutsplus.com/tutorials/simple-wordpress-plugin-to-follow-your-favorite-authors
|
6 |
Description: Get email notifications when your favorite author publishes a post.
|
7 |
Author URI: http://www.innovativephp.com
|
8 |
Author: Rakhitha Nimesh
|
9 |
License: GPL2
|
10 |
*/
|
11 |
?>
|
Schritt 2 Erstellen von Tabellen zur Plugin-Aktivierung
Wir benötigen zwei Datenbanktabellen für dieses Plugin. Ich nenne sie wp_author_subscribe und wp_author_followers (wobei wp_ tatsächlich das konfigurierte Datenbankpräfix ist). In der Tabelle wp_author_subscribe werden die E-Mail-Adresse des Abonnenten, der Aktivierungsstatus und die Liste der verfolgten Autoren gespeichert. Die Tabelle wp_author_followers enthält die Autoren-ID und die Liste der Follower. Wir müssen diese Tabellen bei der Plugin-Aktivierung erstellen. Betrachten wir also den folgenden Code.
1 |
<?php
|
2 |
|
3 |
function wp_authors_tbl_create() { |
4 |
global $wpdb; |
5 |
|
6 |
require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); |
7 |
|
8 |
$wpdb->query("DROP TABLE IF EXISTS {$wpdb->prefix}author_subscribe"); |
9 |
|
10 |
$sql1 = "CREATE TABLE {$wpdb->prefix}author_subscribe ( |
11 |
id int(11) NOT NULL AUTO_INCREMENT,
|
12 |
activation_code varchar(255) NOT NULL,
|
13 |
email varchar(75) NOT NULL,
|
14 |
status int(11) NOT NULL,
|
15 |
followed_authors text NOT NULL,
|
16 |
PRIMARY KEY (id)
|
17 |
) ENGINE=InnoDB AUTO_INCREMENT=1;"; |
18 |
|
19 |
dbDelta($sql1); |
20 |
|
21 |
$sql2 = ("CREATE TABLE {$wpdb->prefix}author_followers ( |
22 |
id int(11) NOT NULL AUTO_INCREMENT,
|
23 |
author_id int(11) NOT NULL,
|
24 |
followers_list text NOT NULL,
|
25 |
PRIMARY KEY (id)
|
26 |
) ENGINE=InnoDB AUTO_INCREMENT=1;"); |
27 |
|
28 |
dbDelta($sql2); |
29 |
}
|
30 |
|
31 |
register_activation_hook(__FILE__, 'wp_authors_tbl_create'); |
32 |
?>
|
- Mit
register_activation_hookkönnen wir eine Funktion erstellen, die bei der Plugin-Aktivierung aufgerufen werden soll. Hier sollten wir unsere Datenbanktabellen erstellen. - Datenbanktabellen können mit einer benutzerdefinierten WordPress-Abfrage erstellt werden. Die empfohlene Methode ist jedoch die Verwendung der Funktion
dbDelta, um die SQL-Abfrage wie im obigen Code gezeigt auszuführen.
Schritt 3 Shortcode zum Anzeigen der Autorenliste
Als nächstes müssen wir die Liste der verfügbaren Autoren anzeigen, damit Benutzer folgen können. Also werde ich einen Shortcode erstellen, mit dem Sie die Autorenliste auf einer bestimmten Seite anzeigen können. Beginnen wir mit der Erstellung des Shortocde.
1 |
<?php
|
2 |
|
3 |
add_shortcode("contributors", "contributors"); |
4 |
|
5 |
function contributors() { |
6 |
|
7 |
}
|
8 |
|
9 |
?>
|
Ich habe einen Shortcode namens contributors und eine Funktion namens contributors erstellt, um die Autorenliste anzuzeigen. Der gesamte Code zum Anzeigen von Autoren befindet sich in dieser Funktion. Sie müssen eine spezielle Seite erstellen, um Ihre Mitwirkenden anzuzeigen. Sie können es so benennen, wie Sie es möchten. Platzieren Sie dann den Shortcode [contributors] auf der Seite und klicken Sie auf die Schaltfläche Veröffentlichen. Wir haben noch keinen Code in der Shortcode-Funktion. Schauen wir uns das an.
Autorenliste anzeigen
In einigen Blogs können sich Benutzer registrieren. Sie werden im Allgemeinen als Abonnenten erstellt, und Abonnenten können keine Beiträge erstellen. Wenn wir also die Benutzerliste anzeigen, müssen wir sicherstellen, dass die Benutzer die Möglichkeit haben, Beiträge zu erstellen. Schauen wir uns den folgenden Code an.
1 |
<?php
|
2 |
|
3 |
$authors = get_users(); |
4 |
|
5 |
$authorsList = '<div id="wp_authors_list">'; |
6 |
foreach ($authors as $author) { |
7 |
if (user_can($author->ID, 'publish_posts')) { |
8 |
$authorsList .= '<div class="auth_row"> |
9 |
<div class="auth_image">' . get_avatar($author->ID) . '</div> |
10 |
<div class="auth_info">
|
11 |
<p class="title">' . get_the_author_meta('display_name', $author->ID) . '</p> |
12 |
<p class="desc">' . get_the_author_meta('description', $author->ID) . '</p> |
13 |
</div>
|
14 |
<div class="auth_follow"><input type="button" class="follow" value="Follow"
|
15 |
data-author="' . $author->ID . '" /></div> |
16 |
<div class="frm_cls"></div>
|
17 |
</div>'; |
18 |
}
|
19 |
}
|
20 |
|
21 |
$authorsList .= '</div>'; |
22 |
?>
|
- Wir erhalten alle Benutzer mit der Funktion
get_users. - Während wir die Benutzerliste durchlaufen, müssen wir überprüfen, ob der Benutzer Beiträge mit der Funktion
user_canveröffentlichen darf. - Wir erstellen HTML-Code für Details der Autoren, die Beiträge veröffentlichen können. Ich habe das Autorenbild mit Gravatar, Autorennamen und Beschreibung angezeigt.
- Als nächstes erstellen wir eine Schaltfläche, um Autoren zu folgen. Wichtig hierbei ist, dass ich ein
data-author-Attribut angegeben und die ID des Autors festgelegt habe.
Jetzt haben wir den HTML-Code zum Anzeigen von Autoren. Schauen wir uns also den Code für die Anzeige des Abonnementformulars an.
1 |
<?php
|
2 |
$output = '<div id="wp_authors_panel"> |
3 |
<div id="wp_authors_head">Follow WP Authors</div>
|
4 |
<div id="wp_authors_form">
|
5 |
<div class="frm_row">
|
6 |
<div id="frm_msg" class="' . $actClass . '">' . $actStatus . '</div> |
7 |
<div class="frm_label">Enter Your Email</div>
|
8 |
<div class="frm_field"><input type="text" name="user_email" id="user_email"
|
9 |
value="' . $confirmedEmail . '" /></div> |
10 |
<div class="frm_cls"></div>
|
11 |
</div>
|
12 |
<div class="frm_row">
|
13 |
<div class="frm_label"> </div>
|
14 |
<div class="frm_control"><input type="button" value="Subscribe" id="subscribeAuthors" /></div>
|
15 |
<div class="frm_control"><input type="button" value="Load" id="loadFollowers" /></div>
|
16 |
<div class="frm_cls"></div>
|
17 |
</div>
|
18 |
</div>
|
19 |
' . $authorsList . ' |
20 |
</div>'; |
21 |
|
22 |
echo $output; |
23 |
?>
|
In diesem einfachen HTML-Formular haben wir ein Textfeld, in das ein Benutzer seine E-Mail-Adresse eingeben kann. Dann haben wir 2 Schaltflächen zum Abonnieren und Laden der folgenden Autorenliste. Ich werde AJAX in diesem Plugin verwenden. Daher spielen die ID und Klassen von HTML-Elementen eine wichtige Rolle. Wenn Sie die eigentliche Plugin-Datei überprüfen, werden Sie feststellen, dass ich den Code oben in der contributors-Funktion nicht erklärt habe. Es wird verwendet, um die Aktivierung zu überprüfen und wird später erklärt. Jetzt haben wir das vollständige Formular mit der Liste der Autoren und es sieht aus wie das oben gezeigte Tutorial-Bild.
Schritt 4 Konfigurieren von JavaScript und CSS
Jetzt beginnt der eigentliche Funktionsteil und wir benötigen einige CSS-Stile und Javascript-Dateien, um unsere Funktionalität zu unterstützen. Der folgende Code zeigt Ihnen also, wie Sie die erforderlichen Skripte und Stile auf die empfohlene Weise einfügen.
1 |
<?php
|
2 |
function apply_wp_author_scripts() { |
3 |
|
4 |
wp_enqueue_script('jquery'); |
5 |
|
6 |
wp_register_script('followjs', plugins_url('follow.js', __FILE__)); |
7 |
wp_enqueue_script('followjs'); |
8 |
|
9 |
wp_register_style('followCSS', plugins_url('follow.css', __FILE__)); |
10 |
wp_enqueue_style('followCSS'); |
11 |
|
12 |
$config_array = array( |
13 |
'ajaxUrl' => admin_url('admin-ajax.php'), |
14 |
'ajaxNonce' => wp_create_nonce('follow-nonce'), |
15 |
'currentURL' => $_SERVER['REQUEST_URI'] |
16 |
);
|
17 |
wp_localize_script('followjs', 'ajaxData', $config_array); |
18 |
}
|
19 |
|
20 |
add_action('wp_enqueue_scripts', 'apply_wp_author_scripts'); |
21 |
?>
|
- jQuery ist derzeit die beliebteste JavaScript-Bibliothek. Also werde ich jQuery in diesem Plugin verwenden. Wir können die in WordPress enthaltene Version von jQuery mithilfe von
wp_enqueue_script('jquery')aktivieren. - Dann benötigen wir eine CSS-Datei und eine JS-Datei für unsere benutzerdefinierten Funktionen. Die nächsten 2 Codezeilen registrieren sich und enthalten eine benutzerdefinierte JS-Datei namens
followjs, die sich im Plugin-Ordner befindet. - Als nächstes registrieren wir die CSS-Datei und fügen sie mit den Funktionen
wp_register_styleundwp_enqueue_stylehinzu. Es befindet sich auch im Plugin-Ordner. - Es ist wichtig zu beachten, dass die Funktion
plugins_urlIhnen den Pfad zum aktuellen Plugin-Ordner gibt. Dies ist der beste Weg, um Skripte einzuschließen. Einige Leute erhalten die URL des Plugin-Verzeichnisses und hängen den Namen des Plugin-Ordners an, um den Pfad abzurufen. Dies wird nicht empfohlen und führt zu Fehlern, wenn der Name des Plugin-Ordners geändert wird. - Schließlich fügen wir unserem benutzerdefinierten JS-Skript mithilfe der Funktion
wp_localize_scripteinige erforderliche Daten hinzu.-
ajaxUrl- Ruft den Pfad zur Ajax-Datei in WordPress ab. -
ajaxNonce- Gibt jeder Ajax-Anforderung zu Validierungszwecken einen eindeutigen Schlüssel. -
currentURL- Ruft den Pfad zur aktuellen URL ab, um die Seite der Mitwirkenden zu identifizieren.
-
Schritt 5 Abonnieren Sie das Plugin
Um Autoren folgen zu können, muss sich ein Benutzer mit seiner E-Mail-Adresse anmelden. Sobald ein Benutzer seine E-Mail-Adresse eingibt und auf die Schaltfläche Abonnieren klickt, wird er den Dienst abonniert und eine E-Mail zur Aktivierung des Dienstes gesendet. Mal sehen, was passiert, wenn auf die Schaltfläche "Abonnieren" geklickt wird.
AJAX-Abonnementanforderung erstellen
1 |
<script> |
2 |
|
3 |
$jq =jQuery.noConflict(); |
4 |
|
5 |
var emailValidation = function(email) {
|
6 |
|
7 |
$jq("#frm_msg").html("");
|
8 |
$jq("#frm_msg").removeAttr("class");
|
9 |
|
10 |
var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
|
11 |
|
12 |
if (email == '' || (!emailReg.test(email))) {
|
13 |
$jq("#frm_msg").html("Please enter valid email");
|
14 |
$jq("#frm_msg").addClass("error");
|
15 |
return false; |
16 |
} |
17 |
else {
|
18 |
return true; |
19 |
} |
20 |
|
21 |
}; |
22 |
|
23 |
$jq(document).ready(function() {
|
24 |
|
25 |
/* |
26 |
* Make initial subscription to service |
27 |
*/ |
28 |
$jq("#subscribeAuthors").live("click",function() {
|
29 |
|
30 |
var email = $jq("#user_email").val();
|
31 |
if (emailValidation(email)) {
|
32 |
|
33 |
jQuery.ajax({
|
34 |
type: "post", |
35 |
url: ajaxData.ajaxUrl, |
36 |
data: "action=subscribe_to_wp_authors&nonce="+ajaxData.ajaxNonce+"&url="+ajaxData.currentURL+"&email="+email, |
37 |
success: function(message) {
|
38 |
var result = eval('(' + message + ')');
|
39 |
if (result.error) {
|
40 |
$jq("#frm_msg").html(result.error);
|
41 |
$jq("#frm_msg").addClass("error");
|
42 |
} |
43 |
if (result.success) {
|
44 |
$jq("#frm_msg").html(result.success);
|
45 |
$jq("#frm_msg").addClass("success");
|
46 |
} |
47 |
} |
48 |
}); |
49 |
} |
50 |
|
51 |
}); |
52 |
|
53 |
} |
54 |
|
55 |
</script> |
Ich habe eine jQuery-Funktion angehängt, die das Live-Ereignis verwendet, das aufgerufen werden soll, wenn auf die Schaltfläche Abonnieren (#subscribeAuthors) geklickt wird. Mit einem regulären Ausdruck wird überprüft, ob die E-Mail gültig ist. Anschließend erstellen wir die AJAX-Anforderung zum Aufrufen der Abonnementfunktion. Ich werde die AJAX-Anfrage hier erklären.
- URL ist die Standard-Ajax-Seiten-URL, die wir beim Lokalisieren des Skripts im vorherigen Abschnitt festgelegt haben.
- Dann müssen wir eine Aktion festlegen, um die AJAX-Anfrage anhand von WordPress zu identifizieren. Ich habe
subscribe_to_wp_authorsverwendet. - Als Nächstes weisen wir den Nonce-Wert zu, der beim Lokalisieren des Skripts und der aktuellen Seiten-URL erstellt wurde.
- Schließlich weisen wir die angegebene E-Mail-Adresse zu und stellen die AJAX-Anfrage. Wir geben das Ergebnis vom Server im JSON-Format zurück. Also bereiten wir das JSON-Ergebnis mit der eval-Funktion vor.
- Basierend auf dem Erfolg oder Misserfolg der Anforderung weisen wir unserem Nachrichtenanzeigediv eine Nachricht und eine CSS-Klasse zu.
Bearbeitung von AJAX-Anfragen in WordPress
Um AJAX-Anfragen vom Plugin zu bearbeiten, können wir den folgenden Code verwenden:
1 |
<?php
|
2 |
add_action('wp_ajax_nopriv_subscribe_to_wp_authors', 'subscribe_to_wp_authors'); |
3 |
add_action('wp_ajax_subscribe_to_wp_authors', 'subscribe_to_wp_authors'); |
4 |
?>
|
Es gibt Aktionen mit den Namen wp_ajax_nopriv und wp_ajax, um AJAX-Anforderungen für Benutzer zu verarbeiten, die abgemeldet bzw. angemeldet sind. Auf diese Aktionen folgt ein Unterstrich und die Aktion, die wir in der AJAX-Anforderung aus der JS-Datei definiert haben. In diesem Fall ruft die Aktion subscribe_to_wp_authors die Funktion subscribe_to_wp_authors auf.
"Stellen Sie sicher, dass Sie am Ende jeder AJAX-Funktion in Ihrem PHP-Code
die()verwenden, da WordPress je nach Ergebnis der AJAX-Anforderung0oder-1zurückgibt, was zu Fehlern in JSON-Zeichenfolgen führen kann."
Schauen wir uns an, was innerhalb der Funktion passiert:
1 |
<?php
|
2 |
function subscribe_to_wp_authors() { |
3 |
global $wpdb; |
4 |
|
5 |
$ajaxNonce = $_POST['nonce']; |
6 |
|
7 |
if (wp_verify_nonce($ajaxNonce, 'follow-nonce')) { |
8 |
|
9 |
$subscriber_email = isset($_POST['email']) ? $_POST['email'] : ''; |
10 |
if (is_email($subscriber_email)) { |
11 |
|
12 |
$email_result = $wpdb->get_results($wpdb->prepare("select * from {$wpdb->prefix}author_subscribe where email=%s", $subscriber_email)); |
13 |
|
14 |
if (count($email_result) == '0') { |
15 |
$activation_code = generate_random_act_code(); |
16 |
|
17 |
$result = $wpdb->query($wpdb->prepare("INSERT INTO {$wpdb->prefix}author_subscribe (email,activation_code,status) VALUES ( %s, %s, %s )", $subscriber_email, $activation_code, "unsubscribed")); |
18 |
|
19 |
$activation_link = add_query_arg('confirm-follow', $activation_code, get_site_url() . $_POST['url']); |
20 |
|
21 |
if ($result) { |
22 |
|
23 |
if (wp_mail($subscriber_email, "WP Author Subscription", "Click $activation_link to activate.")) { |
24 |
echo json_encode(array("success" => "Please check email for activation link.")); |
25 |
}
|
26 |
else { |
27 |
echo json_encode(array("error" => "Email Error.")); |
28 |
}
|
29 |
}
|
30 |
}
|
31 |
else { |
32 |
echo json_encode(array("error" => "Email already exists.")); |
33 |
}
|
34 |
}
|
35 |
else { |
36 |
echo json_encode(array("error" => "Please enter valid Email")); |
37 |
}
|
38 |
}
|
39 |
die(); |
40 |
}
|
41 |
?>
|
- Zunächst erhalten wir den von AJAX-Anforderungen gesendeten Nonce-Wert mit der Funktion
wp_verify_noncegegen den Wert, den wir auf dem Server haben. Unterschiedliche Nonce-Werte bedeuten, dass die AJAX-Anforderung ungültig und verworfen werden sollte. - Dann erhalten wir die E-Mail von den AJAX-Anfragen und validieren mit
is_email. - Als nächstes stellen wir sicher, dass der Benutzer noch nicht abonniert ist, indem wir die Datenbanktabelle überprüfen.
- Dann generieren wir eine zufällige Aktivierungszeichenfolge und speichern die Abonnentendetails in der Datenbank. Die Funktion zur Erzeugung zufälliger Zeichenfolgen finden Sie in der Plugin-Datei.
- Schließlich bereiten wir den Aktivierungslink vor, indem wir den Aktivierungscode zur aktuellen Seiten-URL hinzufügen und die E-Mail an den Benutzer senden.
- Wenn alles richtig gemacht ist, sollte der Benutzer einen Bildschirm wie den folgenden erhalten:


Sobald der Benutzer auf den Aktivierungslink in der E-Mail klickt, wird er mit einer Aktivierungserfolgsnachricht zur Website zurückgeleitet und seine E-Mail-Adresse wird in das Textfeld geladen. Die Aktivierungsprüfung erfolgt oben in der Shortcode-Funktion. Ich habe die Erklärung früher weggelassen, jetzt ist es Zeit, sich diesen Code in der contributors-Funktion anzusehen.
1 |
<?php
|
2 |
$confirmedEmail = ''; |
3 |
|
4 |
if (isset($_GET['confirm-follow'])) { |
5 |
|
6 |
$activationCode = $_GET['confirm-follow']; |
7 |
|
8 |
$activationCheck = $wpdb->get_results($wpdb->prepare("select * from {$wpdb->prefix}author_subscribe where activation_code=%s and status=0 "), $activationCode); |
9 |
|
10 |
if (count($activationCheck) != 0) { |
11 |
$activationResult = $wpdb->query($wpdb->prepare("update {$wpdb->prefix}author_subscribe set status=1 where activation_code=%s"), $activationCode); |
12 |
if ($activationResult) { |
13 |
|
14 |
$confirmedEmail = $activationCheck[0]->email; |
15 |
|
16 |
$actStatus = "Activation Successfull"; |
17 |
$actClass = "success"; |
18 |
}
|
19 |
else { |
20 |
$actStatus = "Activation Failed"; |
21 |
$actClass = "error"; |
22 |
}
|
23 |
}
|
24 |
}
|
25 |
?>
|
Ein Benutzer kann die Autorenseite direkt oder über den Bestätigungslink besuchen. Zuerst überprüfen wir, ob der confirm-follow-Parameter in der URL verfügbar ist, um herauszufinden, ob dies eine Aktivierungsanforderung ist oder nicht. Anschließend suchen wir in der Datenbanktabelle nach einer Aktivierung für den in der URL angegebenen Aktivierungscode. Anschließend aktualisieren wir den Aktivierungsstatus des Benutzers und zeigen die Ergebnismeldung mit der relativen CSS-Klasse an. Jetzt ist der gesamte Abonnementprozess abgeschlossen. Jetzt kann der Benutzer folgenden Autoren folgen.
Schritt 6 Autoren folgen
Jetzt ist die Aktivierung erfolgreich und Ihre E-Mail wird im E-Mail-Feld angezeigt. Dies ist die Zeit, in der Sie Autoren aus der Liste auswählen und auf die Schaltfläche "Follow" klicken können. Mal sehen, wie man einen Benutzer dazu bringt, einem Autor zu folgen. Eine AJAX-Anfrage wird gestellt, sobald Sie auf die Schaltfläche "Folgen" eines bestimmten Autors klicken.
1 |
<script> |
2 |
$jq(".follow").live("click",function() {
|
3 |
|
4 |
var activeObject = $jq(this); |
5 |
|
6 |
var email = $jq("#user_email").val();
|
7 |
if (emailValidation(email)) {
|
8 |
|
9 |
jQuery.ajax({
|
10 |
type: "post", |
11 |
url: ajaxData.ajaxUrl, |
12 |
data: "action=follow_wp_authors&author_id="+$jq(this).attr("data-author")+"&nonce="+ajaxData.ajaxNonce+"&url="+ajaxData.currentURL+"&email="+email,
|
13 |
success: function(message) {
|
14 |
var result = eval('(' + message + ')');
|
15 |
if (result.status == 'success' ) {
|
16 |
activeObject.val("Following");
|
17 |
activeObject.removeClass("follow").addClass("following");
|
18 |
} |
19 |
} |
20 |
}); |
21 |
} |
22 |
|
23 |
}); |
24 |
</script> |
Jeder Autor hat vor seinem Namen eine Schaltfläche zum Folgen, die eine CSS-Klasse namens "follow" enthält. Jedes Mal, wenn auf eine Schaltfläche zum Folgen geklickt wird, wird die Funktion $jq(".follow").live("click") ausgelöst, und wir können nur die angeklickte Schaltfläche mit $jq(this) abrufen. Dann stellen wir wie zuvor eine neue AJAX-Anfrage mit der Aktion follow_wp_authors.
Der einzige Unterschied besteht darin, dass wir der Anforderung einen zusätzlichen Parameter namens author_id hinzufügen. Wir können die ID des Autors mithilfe des data-author-Attributs abrufen, das wir im Anzeigebereich definiert haben. Schauen wir uns nun den PHP-Code für die Bearbeitung dieser AJAX-Anfrage an.
1 |
<?php
|
2 |
add_action('wp_ajax_nopriv_follow_wp_authors', 'follow_wp_authors'); |
3 |
add_action('wp_ajax_follow_wp_authors', 'follow_wp_authors'); |
4 |
|
5 |
function follow_wp_authors() { |
6 |
|
7 |
}
|
8 |
?>
|
Wir müssen wie zuvor zwei neue Aktionen für diese AJAX-Anfrage hinzufügen. Die Funktion follow_up_authors enthält den Code, der zum Verfolgen eines Autors verwendet wird. Da es keinen Sinn macht, sich wiederholenden Code immer wieder zu erklären, werde ich die Abschnitte erklären, die notwendig sind. Ich empfehle Ihnen daher, sich die Funktion in der Plugin-Datei anzusehen, während Sie das Tutorial durchlesen. Der erste Teil der Funktion überprüft die Nonce, validiert die E-Mail und prüft, ob die Datenbank aktiviert ist. Also lasst uns vorwärts gehen.
Hinzufügen von Benutzern zum Folgen
Da wir in unserem Plugin benutzerdefinierte Tabellen verwenden, ist unsere Autorentabelle zunächst leer, auch wenn auf der Site viele Autoren verfügbar sind. Wenn ein Benutzer auf die Schaltfläche "Folgen" für einen Autor klickt, können wir überprüfen, ob der Autor in unserer Tabelle verfügbar ist. Wenn nicht, machen wir den ersten Eintrag, indem wir den Autor in die Tabelle einfügen. Betrachten Sie den folgenden Code:
1 |
<?php
|
2 |
|
3 |
$subscriberID = $emailResult[0]->id; |
4 |
$authorId = isset($_POST['author_id']) ? $_POST['author_id'] : ''; |
5 |
|
6 |
/*
|
7 |
* Check if author exists and insert if not already available to follow
|
8 |
*/
|
9 |
$authorResult = $wpdb->get_results($wpdb->prepare("select * from {$wpdb->prefix}author_followers where author_id=%d"), $authorId); |
10 |
|
11 |
if (count($authorResult) == '0') { |
12 |
$result = $wpdb->query($wpdb->prepare("INSERT INTO {$wpdb->prefix}author_followers (author_id) VALUES (%d)", $authorId)); |
13 |
}
|
14 |
|
15 |
?>
|
Empfangene Benutzer Befolgen Sie die Autorenliste
1 |
<?php
|
2 |
|
3 |
/*
|
4 |
* Get Author List of the Current User
|
5 |
*/
|
6 |
$subscribedAuthorList = $emailResult[0]->followed_authors; |
7 |
if ($subscribedAuthorList != '') { |
8 |
$subscribedAuthorList = explode(",", $subscribedAuthorList); |
9 |
}
|
10 |
else { |
11 |
$subscribedAuthorList = array(); |
12 |
}
|
13 |
|
14 |
if (!(in_array($authorId, $subscribedAuthorList))) { |
15 |
array_push($subscribedAuthorList, $authorId); |
16 |
}
|
17 |
|
18 |
?>
|
- Wir haben zwei Tabellen und führen eine Liste der Autoren, gefolgt von einem Benutzer, sowie eine Liste der Benutzer, die einem Autor folgen.
- Daher erhalten wir die Autorenliste der aktuellen Benutzer mithilfe des Spaltenwerts
follow_authorsin der Tabellewp_author_subscribe. - Wenn noch keine Autoren verfolgt werden, erstellen wir ein leeres Array. Andernfalls konvertieren wir die Autorenliste mithilfe von
explodein ein Array und prüfen dann mithilfe der Funktionin_array, ob der Benutzer den Autor bereits abonniert hat. Dann fügen wir die Autoren-ID in die Liste der verfolgten Autoren des Benutzers ein.
Empfang der Autoren-Follower-Liste und Abschluss der Follow-Liste
1 |
<?php
|
2 |
/*
|
3 |
* Get current author info with authers subscribers
|
4 |
*/
|
5 |
$authorResult = $wpdb->get_results($wpdb->prepare("select * from {$wpdb->prefix}author_followers where author_id=%d"), $authorId); |
6 |
|
7 |
if (count($authorResult) == '1') { |
8 |
|
9 |
if ($authorResult[0]->followers_list != '') { |
10 |
$authorSubscribersArray = explode(",", $authorResult[0]->followers_list); |
11 |
}
|
12 |
else { |
13 |
$authorSubscribersArray = array(); |
14 |
}
|
15 |
|
16 |
if (!(in_array($subscriberID, $authorSubscribersArray))) { |
17 |
array_push($authorSubscribersArray, $subscriberID); |
18 |
}
|
19 |
|
20 |
// User list who follows specific author
|
21 |
$followersList = implode(",", $authorSubscribersArray); |
22 |
|
23 |
// Author list followed by specific user
|
24 |
$subscribedAuthorList = implode(",", $subscribedAuthorList); |
25 |
|
26 |
$result = $wpdb->query($wpdb->prepare("update {$wpdb->prefix}author_followers set followers_list=%s where author_id=%d"), $followersList, $authorId); |
27 |
|
28 |
$result = $wpdb->query($wpdb->prepare("update {$wpdb->prefix}author_subscribe set followed_authors=%s where email=%s"), $subscribedAuthorList, $subscriberEmail); |
29 |
|
30 |
echo json_encode(array("status" => "success")); |
31 |
}
|
32 |
?>
|
- Wir haben die folgende Autorenliste des angegebenen Benutzers im vorherigen Abschnitt erhalten. Jetzt erhalten wir die Follower-Liste des aktuellen Autors
- Anschließend fügen wir den Benutzer mit demselben Verfahren und denselben Überprüfungen wie zuvor zur Follower-Liste hinzu
- Anschließend erstellen wir die Follower-Liste des Autors als Zeichenfolge, indem wir
$authorSubscribersArrayimplodieren und einer Variablen namens$follersListzuweisen - Das gleiche Verfahren wird verwendet, um eine Autorenliste der aktuellen Benutzer zu erstellen, die der
$subscribedAuthorListzugewiesen ist - Schließlich aktualisieren wir die folgenden neuen Details für beide Tabellen und geben die Erfolgsmeldung mit JSON zurück
- Sobald Sie einem Autor erfolgreich gefolgt sind, sehen Sie, dass sich die Schaltfläche "Folgen" in "Gefolge" ändert
Schritt 7 Nicht folgende Autoren
Wenn dieses Plugin effektiv sein soll, müssen Benutzer möglicherweise über die Funktion verfügen, Autoren zu entfolgen und Autoren zu einem bestimmten Zeitpunkt zu folgen. Ich werde den Prozess des Nichtbefolgens eines Autors erklären. Da es dem folgenden Prozess sehr ähnlich ist, werde ich in der Erklärung sich wiederholende Codes weglassen.
Die Schaltfläche inline mit allen folgenden Autoren wird wie Gefolge angezeigt. Wenn Sie mit der Maus über die Schaltfläche fahren, ändert sich der Text in eine andere Farbe als "Nicht folgen". Wenn Sie auf die Schaltfläche klicken, wird eine weitere AJAX-Anfrage an den Autor gesendet. Da sich nur der Aktionsname vom obigen Code unterscheidet, werde ich ihn hier nicht einfügen. Sie können sich $jq(".following").live("click",function(){} in der followjs-Datei ansehen.
Die Funktion zum Entfolgen des Benutzers lautet unfollow_wp_authors. Dieser Code ähnelt der Funktion zum Folgen des Autors. Wir können den gemeinsamen Code in Zukunft in eine einzige Funktion integrieren, wenn Sie bereit sind, das Plugin zu erweitern. Im Abschnitt "Folgende Autoren" haben wir den Autor zur Liste hinzugefügt, falls er noch nicht verfügbar ist. In diesem Fall entfernen wir einfach den Autor aus der Liste, falls bereits vorhanden. Der folgende Code zeigt Ihnen die Änderungen im Vergleich zur Funktion zum Verfolgen des Autors.
1 |
<?php
|
2 |
foreach ($subscribedAuthorList as $key => $value) { |
3 |
if ($authorId == $value) { |
4 |
unset($subscribedAuthorList[$key]); |
5 |
}
|
6 |
}
|
7 |
|
8 |
foreach ($authorSubscribersArray as $key => $value) { |
9 |
if ($subscriberID == $value) { |
10 |
unset($authorSubscribersArray[$key]); |
11 |
}
|
12 |
}
|
13 |
?>
|
Sie können sehen, dass wir Autoren nicht in das Array verschieben, sondern mithilfe der Funktion "Nicht gesetzt" entfernen.
Schritt 8 Laden des Autors Folgende Informationen
Anfangs ist die E-Mail-Adresse leer, wenn Sie die Seite mit der Autorenliste laden, da wir kein Verfahren zur Identifizierung des aktuellen Benutzers haben. Anschließend muss der Benutzer die E-Mail-Adresse eingeben und auf die Schaltfläche zum Laden klicken, um die Liste mit den folgenden Details zu jedem Benutzer abzurufen. Dies wird eine weitere AJAX-Anfrage sein, die den vorherigen ähnlich ist, und Sie können sich den Code mit $jq ("#loadFollowers").live("click",function(){} ansehen. Ich werde den Ergebnisabschnitt erläutern der Anfrage, da es ein bisschen anders ist als die vorherigen.
1 |
<script> |
2 |
$jq("#loadFollowers").live("click",function() {
|
3 |
var email = $jq("#user_email").val();
|
4 |
if (emailValidation(email)) {
|
5 |
|
6 |
jQuery.ajax({
|
7 |
type: "post", |
8 |
url: ajaxData.ajaxUrl, |
9 |
data: "action=load_subscribed_authors&nonce="+ajaxData.ajaxNonce+"&email="+email, |
10 |
success: function(message) {
|
11 |
var result = eval('(' + message + ')');
|
12 |
$jq(".follow").each(function() {
|
13 |
var actObj = $jq(this); |
14 |
|
15 |
var searchedIndex = ($jq.inArray($jq(this).attr("data-author"), result.authors));
|
16 |
if (searchedIndex != -1) {
|
17 |
actObj.val("Following");
|
18 |
actObj.removeClass("follow").addClass("following");
|
19 |
} |
20 |
}); |
21 |
} |
22 |
}); |
23 |
} |
24 |
}); |
25 |
</script> |
- In der Nachrichtenvariablen wird nur die Liste der folgenden Autoren der angegebenen E-Mail-Adresse zurückgegeben.
- Sobald das Ergebnis empfangen wurde, durchläuft der Code mithilfe der CSS-Klasse
followjedes Autorenfeld und prüft, ob der Autor vom Benutzer verfolgt wird. - Hierfür wird die Funktion jQuery
inArrayverwendet, die-1zurückgibt, wenn die Suchzeichenfolge nicht im Array gefunden wird. - Daher zeigen wir den Text "Gefolge" für die folgende Klasse an und fügen die folgende CSS-Klasse hinzu, um die folgenden Autoren zu identifizieren.
Werfen wir einen Blick auf die Funktion zum Laden der folgenden Autorenliste von der Serverseite:
1 |
<?php
|
2 |
add_action('wp_ajax_nopriv_load_subscribed_authors', 'load_subscribed_authors'); |
3 |
add_action('wp_ajax_load_subscribed_authors', 'load_subscribed_authors'); |
4 |
|
5 |
function load_subscribed_authors() { |
6 |
global $wpdb; |
7 |
|
8 |
$ajaxNonce = $_POST['nonce']; |
9 |
|
10 |
if (wp_verify_nonce($ajaxNonce, 'follow-nonce')) { |
11 |
|
12 |
$subscriber_email = isset($_POST['email']) ? $_POST['email'] : ''; |
13 |
if (is_email($subscriber_email)) { |
14 |
|
15 |
$email_result = $wpdb->get_results($wpdb->prepare("select * from {$wpdb->prefix}author_subscribe where email=%s and status=1 "), $subscriber_email); |
16 |
|
17 |
if (count($email_result) == '1') { |
18 |
|
19 |
$subscriberID = $email_result[0]->id; |
20 |
|
21 |
$authorResult = $wpdb->get_results($wpdb->prepare("select * from {$wpdb->prefix}author_subscribe where id=%d"), $subscriberID); |
22 |
|
23 |
if (count($authorResult) != '0') { |
24 |
$userFollowedAuthors = $authorResult[0]->followed_authors; |
25 |
$userFollowedAuthors = explode(",", $userFollowedAuthors); |
26 |
echo json_encode(array("authors" => $userFollowedAuthors)); |
27 |
}
|
28 |
}
|
29 |
}
|
30 |
else { |
31 |
echo json_encode(array("error" => "Please enter valid Email")); |
32 |
}
|
33 |
}
|
34 |
|
35 |
die(); |
36 |
}
|
37 |
?>
|
- Wir haben zwei Aktionen. Nonce- und E-Mail-Validierung und Überprüfung der Aktivierung wie gewohnt zu Beginn der Funktion.
- Dann erhalten wir die folgende Autorenliste für die aktuelle E-Mail-Adresse im Textfeld mit
wp_author_subscribe. - Schließlich erstellen wir mit der Zeichenfolge ein Array mit verfolgten Autoren und übergeben es mit JSON an den clientseitigen JS-Code.
Jetzt haben Benutzer den Dienst abonniert und können Autoren folgen und entfolgen, wann immer sie möchten. Der letzte und wichtigste Teil des Tutorials ist das Senden von E-Mails an Follower, wenn ein Beitrag von einem Autor veröffentlicht wird. Lassen Sie uns anfangen.
Schritt 9 Senden von E-Mails, wenn Beiträge veröffentlicht werden
Wir müssen eine Aktion auslösen, wenn ein Benutzer einen neuen Beitrag veröffentlicht. WordPress bietet eine Reihe von Aktionen, die als Post Status Transitions bezeichnet werden, um diese Funktionalität zu erreichen. Ich habe vier Übergänge eingerichtet, die ausgelöst werden können, wenn Sie einen Beitrag veröffentlichen.
1 |
<?php
|
2 |
add_action('new_to_publish', 'notify_author_followers'); |
3 |
add_action('draft_to_publish', 'notify_author_followers'); |
4 |
add_action('pending_to_publish', 'notify_author_followers'); |
5 |
add_action('future_to_publish', 'notify_author_followers'); |
6 |
?>
|
Die oben genannten Aktionen rufen die Funktion notify_author_followers auf, wenn ein Beitrag aus einem neuen, Entwurfs-, ausstehenden oder zukünftigen Status in einen veröffentlichten Status konvertiert wird. Senden wir also E-Mails mit der Funktion notify_author_followers.
1 |
<?php
|
2 |
function notify_author_followers($post) { |
3 |
global $wpdb; |
4 |
|
5 |
$publishedPostAuthor = $post->post_author; |
6 |
|
7 |
$authorDisplayName = get_the_author_meta('display_name', $publishedPostAuthor); |
8 |
|
9 |
$authorsFollowers = $wpdb->get_results($wpdb->prepare("select * from {$wpdb->prefix}author_followers where author_id=%d"), $publishedPostAuthor); |
10 |
|
11 |
if (count($authorsFollowers) == '1') { |
12 |
$authorsFollowersList = $authorsFollowers[0]->followers_list; |
13 |
|
14 |
if ($authorsFollowersList != '') { |
15 |
$authorsFollowersEmails = $wpdb->get_results($wpdb->prepare("select email from {$wpdb->prefix}author_subscribe where id in(%s)"), $authorsFollowersList); |
16 |
|
17 |
$bccList = ''; |
18 |
|
19 |
foreach ($authorsFollowersEmails as $key => $emailObject) { |
20 |
$bccList .= $emailObject->email . ","; |
21 |
}
|
22 |
|
23 |
$bccList = substr($bccList, 0, -1); |
24 |
|
25 |
$postMessage = "<a href='$post->guid'><h2>$post->post_title</h2>"; |
26 |
|
27 |
$emailHeaders .= "From: WP Follow Authors <example@wpauthorplugins.com>" . "\r\n"; |
28 |
$emailHeaders .= "Bcc: $bccList" . "\r\n"; |
29 |
|
30 |
add_filter("wp_mail_content_type", create_function("", 'return "text/html";')); |
31 |
if (wp_mail("admin@example.com", "New Post From $authorDisplayName", $postMessage, $emailHeaders)) { |
32 |
|
33 |
}
|
34 |
}
|
35 |
}
|
36 |
}
|
37 |
?>
|
- Ein Objekt, das Informationen zu veröffentlichten Posts enthält, wird standardmäßig an unsere Funktion
notify_author_followersübergeben. - Zuerst erhalten wir die Details des Autors über das
$post-Objekt. Dann erhalten wir die Liste der Follower für den aktuellen Autor aus der Tabelle{$wpdb->prefix} author_followers. - Dann erhalten wir die E-Mails von Benutzern, die dem aktuellen Autor folgen, mithilfe der Tabelle
{$wpdb->prefix}author_subscribe. - Wir erstellen den E-Mail-Inhalt unter Verwendung des Post-Titels und des Autors. Sie können dies ändern, um alle gewünschten Informationen zu enthalten. Stellen Sie außerdem sicher, dass Sie den Inhaltstyp mithilfe der Funktion
wp_mail_content_typein HTML ändern. - Fügen Sie der Variablen
$emailHeaderseinen from-Namen und eine Adresse hinzu. Außerdem möchten wir nicht, dass Benutzer die E-Mail-Adressen anderer Benutzer sehen. Fügen Sie also die E-Mail-Liste der Follower zum Bcc-Header hinzu. - Senden Sie abschließend die E-Mail mit der oben gezeigten Funktion
wp_mail.
Wir haben den Prozess der Erstellung eines grundlegenden WordPress-Plugins abgeschlossen, um Autoren zu folgen. Wann immer ein Beitrag veröffentlicht wird, werden Follower benachrichtigt. So einfach ist das.
Schlussfolgerung
Ich musste ein langes Tutorial erstellen, um alles beim Erstellen dieser Art von Plugin mit AJAX zu erklären. Dies ist immer noch auf dem grundlegendsten Niveau. Als Benutzer möchte ich die Funktionalität haben, Autoren in jedem Blog zu folgen, den ich lese. Als Webmaster sollten Sie daher in Betracht ziehen, die Plugin-Funktionen zu verbessern, damit Benutzer ihren Lieblingsautoren folgen können. Als Bonus erhalten Sie auch eine kostenlose E-Mail-Abonnentenliste. Ich hoffe, Ihnen hat das Tutorial gefallen und ich freue mich auf Kommentare und Vorschläge in den Kommentaren unten.
Update: Dieser Artikel wurde aktualisiert, um die in den Kommentaren unten von Leonel und Julio erwähnten Korrekturen zu berücksichtigen.



