() translation by (you can also view the original English article)



La increíble tasa de crecimiento de WordPress ha simplificado el desarrollo de los sitios web. Sitios de tutoriales populares como la red Tuts+ usan WordPress para potenciar sus sitios web. Estos sitios web ofrecen cientos de nuevos tutoriales, artículos y actualizaciones diariamente. Por lo tanto, no es fácil hacer un seguimiento de cada artículo, ni siquiera con tu lector de feeds RSS. Tu lector de feeds se llenará de nuevos rápidamente y como lectores solo nos interesan ciertos temas. Así que idealmente necesitaríamos un método que proporcione artículos que nos interesen. Generalmente los autores se especializan en áreas específicas. Si Darren Rowse escribe un artículo sobre el blogueo, todos querrán leerlo. De la misma manera tenemos autores favoritos que nos gustaría leer siempre.
Así que en este tutorial voy a crear un sencillo plugin de WordPress que te permite suscribirte a tus autores favoritos. Recibirás un correo electrónico cada vez que tu autor favorito publique un post. Por lo tanto, no te perderás los artículos importantes nunca más.
Qué estamos desarrollando hoy
Nuestro plugin básicamente permitirá a los usuarios recibir notificaciones sobre nuevos artículos de los autores a los que nos hayamos suscrito. A continuación, las características y componentes que desarrollaremos durante el tutorial:
- Creación de un Shortcode para listar todos los autores
- Permitir a los usuarios seguir y dejar de seguir a los autores
- Enviar correos electrónicos cuando se publique un nuevo post
Paso 1Crear el archivo del plugin
No voy a explicar este paso en detalle ya que puede que ya sepas que un archivo de plugin de WordPress necesita tener una sección de comentarios en la parte superior para identificar los detalles del plugin. He nombrado al plugin WP Follow Authors. Así que crea un nuevo directorio en el directorio /wp-content/plugins llamado wp-follow-authors y crea el archivo index.php con los siguientes detalles:
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 |
?>
|
Paso 2Creación de tablas cuando se active el plugin
Necesitamos dos tablas de base de datos para este plugin. Las estoy nombrando wp_author_subscribe
y wp_author_followers
(donde wp_
será en realidad el prefijo db configurado). La tabla wp_author_subscribe
mantendrá el correo electrónico de los suscriptores, el estado de activación y la lista de autores seguidos. La tabla wp_author_followers
contendrá el id de autor y la lista de seguidores. Necesitamos crear estas tablas durante la activación del plugin. Así que consideremos el siguiente código.
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 |
?>
|
- Podemos crear una función que sea invocada durante la activación del plugin usando
register_activation_hook
. Aquí es donde debemos crear nuestras tablas de base de datos. - Las tablas de la base de datos pueden ser creadas usando una consulta personalizada de WordPress. Pero la forma recomendada es usar la función
dbDelta
para ejecutar la consulta SQL como se muestra en el código anterior.
Paso3 Shortcode para mostrar la lista de autores
Después necesitamos mostrar la lista de autores disponibles para que los usuarios los sigan. Así que crearé un shortcode que te permitirá mostrar la lista de autores en cualquier página. Empecemos a crear el shortcode.
1 |
<?php
|
2 |
|
3 |
add_shortcode("contributors", "contributors"); |
4 |
|
5 |
function contributors() { |
6 |
|
7 |
}
|
8 |
|
9 |
?>
|
He creado un shortcode llamado contributors
y una función llamada contributors
para mostrar la lista de autores. Todo el código relacionado con la visualización de los autores se encuentra dentro de esta función. Tienes que crear una página especial para mostrar tus colaboradores. Puedes llamarla como quieras. Luego coloca el shortcode [contributors]
dentro de la página y haz clic en el botón publicar. Todavía no tenemos ningún código dentro de la función del shortcode. Así que vamos a ver eso.
Mostrar la lista de autores
Algunos blogs permiten a los usuarios registrarse. Se crearán como suscriptores en general y los suscriptores no pueden crear publicaciones. Así que cuando mostramos la lista de usuarios, tenemos que asegurarnos de conseguir los usuarios que tienen la capacidad de crear posts. Veamos el código de abajo.
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 |
?>
|
- Conseguimos todos los usuarios usando la función
get_users
. - Luego, al hacer un bucle en la lista de usuarios, tenemos que comprobar si el usuario está autorizado a publicar posts mediante la función
user_can
. - Creamos código HTML para los detalles de los autores que pueden publicar posts. He mostrado la imagen del autor usando gravatar, el nombre de visualización del autor y la descripción.
- A continuación creamos un botón para seguir a los autores. Lo importante aquí es que he especificado un atributo
data-author
y establecido el ID del autor.
Ahora tenemos el código HTML para mostrar los autores. Así que veamos el código para mostrar el formulario de suscripción.
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 |
?>
|
En este sencillo formulario HTML tenemos un campo de texto para que el usuario introduzca su dirección de correo electrónico. Luego tenemos 2 botones para suscribirse y cargar la siguiente lista de autores. Usaré AJAX a lo largo de este plugin. Así que el ID y las clases de elementos HTML juegan un papel vital. Si revisas el archivo actual del plugin, notarás que no he explicado el código en la parte superior de la función contributors
. Se utiliza para verificar la activación y se explicará más adelante. Ahora tenemos el formulario completo con la lista de autores y se verá como la imagen del tutorial que se muestra en la parte superior.
Paso4 Configurar JavaScript y CSS
Ahora comienza la parte de la funcionalidad real y necesitamos algunos estilos CSS y archivos Javascript para apoyar nuestra funcionalidad. Así que el siguiente código te mostrará cómo incluir los scripts y estilos necesarios de la manera recomendada.
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 es la biblioteca de JavaScript más popular en este momento. Así que usaré jQuery en este plugin. Podemos habilitar la versión de jQuery incluida en WordPress usando
wp_enqueue_script('jquery')
- Entonces necesitamos un archivo CSS y un archivo JS para nuestras funciones personalizadas. Así que las siguientes 2 líneas de código registran e incluyen un archivo JS personalizado llamado
followjs
que está en la carpeta de plugins. - A continuación registramos e incluimos el archivo CSS usando las funciones
wp_register_style
ywp_enqueue_style
. También se encuentra en la carpeta de plugins. - Una cosa importante a notar es que la función
plugins_url
te dará la ruta a la carpeta del actual plugin. Esta es la mejor manera de incluir los scripts. Algunas personas obtienen la URL del directorio de plugins y añaden el nombre de la carpeta del plugin para obtener la ruta. Esto no es recomendable y causará errores cuando se cambie el nombre de la carpeta del plugin. - Finalmente añadimos algunos datos necesarios a nuestro script JS personalizado usando la función wp_localize_script.
-
ajaxUrl
- Obtiene la ruta del archivo ajax en WordPress. -
ajaxNonce
- Da una clave única a cada petición de ajax para propósitos de validación. -
currentURL
- Obtiene la ruta de la URL actual para identificar la página de colaboradores.
-
Paso5 Suscribirse al plugin
Para poder seguir a los autores, un usuario tiene que suscribirse usando su correo electrónico. Una vez que el usuario introduce su correo electrónico y hace clic en el botón Suscribir, se suscribirá al servicio y se le enviará un correo electrónico para activarlo. Veamos qué sucede cuando se hace clic en el botón subscribir.
Creación de la solicitud de suscripción a AJAX
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> |
He adjuntado una función de jQuery usando el evento en vivo que se llamará cuando se haga clic en el botón Subscribe (#subscribeAuthors
). Comprueba si el correo electrónico es válido usando una expresión regular. Luego creamos la solicitud AJAX para llamar a la función subscribirse. Explicaré la petición AJAX aquí.
- La URL es la URL ajax de la página por defecto que establecimos al localizar el script en la sección anterior.
- Entonces necesitamos establecer una acción para identificar la solicitud AJAX que usa WordPress. He usado
subscribe_to_wp_authors
. - A continuación asignamos el valor nonce creado cuando localizamos el script y la URL de la página actual.
- Finalmente asignamos la dirección de correo electrónico proporcionada y hacemos la solicitud AJAX. Devolvemos el resultado del servidor en formato JSON. Así que preparamos el resultado JSON usando la función eval.
- Basándonos en el éxito o el fracaso de la solicitud, asignamos un mensaje y una clase de CSS a nuestro div. de visualización de mensajes.
Manejo de la solicitud de AJAX en WordPress
Para manejar las solicitudes de AJAX desde el plugin, podemos usar el siguiente código:
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 |
?>
|
Hay acciones llamadas wp_ajax_nopriv
y wp_ajax
para manejar las solicitudes AJAX de los usuarios que hayan iniciado sesión y para los que la hayan cerrado. Estas acciones son seguidas por un script bajo y la acción que definimos en la solicitud AJAX del archivo JS. Así que en este caso la acción subscribe_to_wp_authors
llamará a la función subscribe_to_wp_authors
.
"Asegúrate de usar
die()
al final de cada función AJAX en tu código PHP ya que WordPress devuelve0
o-1
dependiendo del resultado de la petición AJAX lo que podría causar errores en las cadenas JSON".
Veamos qué sucede dentro de la función:
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 |
?>
|
- Inicialmente obtenemos el valor nonce enviado desde las peticiones AJAX contra el valor que tenemos en el servidor usando la función
wp_verify_nonce
. Diferentes valores de nonce significan que la petición AJAX debe ser inválida y descartada. - Luego recibimos el correo electrónico enviado por las solicitudes AJAX y lo validamos usando
is_email
. - A continuación nos aseguramos de que el usuario no esté ya suscrito comprobando con la tabla de la base de datos.
- Luego generamos una cadena de activación aleatoria y guardamos los detalles del suscriptor en la base de datos. La función de generación de cadenas aleatorias se encuentra en el archivo del plugin.
- Finalmente preparamos el enlace de activación añadiendo el código de activación a la URL de la página actual y enviamos el correo electrónico al usuario.
- Si todo se hace correctamente, el usuario debería obtener una pantalla como la siguiente:



Luego, una vez que el usuario hace clic en el enlace de activación del correo electrónico, será dirigido de nuevo al sitio web con un mensaje de éxito de activación y su dirección de correo electrónico se cargará en el buzón de texto. La comprobación de la activación se hace en la parte superior de la función del shortcode. Omití la explicación anteriormente, ahora es el momento de echar un vistazo a ese código en la función de contributors
.
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 |
?>
|
El usuario puede visitar la página de los autores directamente o mediante el enlace de confirmación. Así que primero comprobamos si el parámetro de confirm-follow
está disponible en la URL para averiguar si se trata de una solicitud de activación o no. Luego buscamos una activación en la tabla de la base de datos para el código de activación proporcionado en la URL. Luego actualizamos el estado de activación del usuario y mostramos el mensaje de resultado con la clase CSS relativa. Ahora todo el proceso de suscripción se ha completado. Ahora el usuario puede empezar a seguir a los autores.
Paso 6 Siguiendoa los autores
Ahora la activación se ha realizado con éxito y tu correo electrónico aparece en la casilla de correo. Este es el momento en el que puedes elegir los autores de la lista y hacer clic en el botón "Seguir"
. Veamos cómo hacer que un usuario siga a un autor. Se hará una solicitud AJAX tan pronto como se haga clic en el botón de seguimiento de un autor específico.
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> |
Cada autor tiene un botón de seguimiento delante de su nombre que contiene una clase CSS llamada follow
. Así que cada vez que se hace clic en un botón de seguimiento, la función $jq(".follow").live("click")
se activará y podremos obtener solo el botón de seguimiento usando $jq(this)
. Entonces hacemos una nueva petición AJAX como antes con la acción follow_wp_authors
.
La única diferencia aquí es que añadimos un parámetro adicional llamado author_id
a la solicitud. Podemos obtener la identificación del autor usando el atributo data-author
que definimos en la sección de visualización. Ahora echemos un vistazo al código PHP para manejar esta petición AJAX.
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 |
?>
|
Tenemos que añadir dos nuevas acciones para esta petición AJAX como hicimos antes. La función follow_up_authors
contendrá el código usado para seguir a un autor. Ya que no tiene sentido explicar el código repetitivo una y otra vez, voy a explicar las secciones que son necesarias. Así que te sugiero que mires la función en el archivo del plugin mientras lees el tutorial. La parte inicial de la función verificará el nonce, validará el correo electrónico y comprobará la activación en la base de datos. Así que sigamos adelante.
Añadir usuarios para seguir
Ya que estamos usando tablas personalizadas en nuestro plugin, incluso si hay muchos autores disponibles en el sitio, nuestra tabla de autores estará inicialmente vacía. Así que cuando un usuario hace clic en el botón de seguimiento de un autor, podemos comprobar si el autor está disponible en nuestra tabla. Si no, hacemos la entrada inicial insertando el autor en la tabla. Considera el siguiente código:
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 |
?>
|
Recibir la lista de autores seguidos por los usuarios
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 |
?>
|
- Tenemos dos tablas y recibimos la siguiente lista de autores seguidos por un usuario dado, así como una lista de usuarios que siguen a un autor
- Así que obtenemos la lista de autores de los usuarios actuales usando el valor de la columna "
followed_authors
" en la tablawp_author_subscribe
. - Si aún no se sigue a los autores, hacemos una matriz vacía. En caso contrario, convertimos la lista de autores en una matriz mediante la función "
explode
" y luego comprobamos si el usuario ya está suscrito al autor mediante la función "in_array
". Luego agregamos la identificación del autor en la lista de autores seguidos del usuario.
Recibir la lista de seguidores de los autores y finalizar el seguimiento
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 |
?>
|
- Recibimos la siguiente lista de autores del usuario dado en la sección anterior. Ahora recibimos la lista de seguidores del autor actual
- Luego añadimos el usuario a la lista de seguidores usando el mismo procedimiento y validaciones que hicimos antes
- Luego creamos la lista de seguidores del autor como una cadena implosionanda
$authorSubscribersArray
y asignando a una variable llamada$followersList
- El mismo procedimiento se utiliza para crear la lista de autores de los usuarios actuales y se asigna a la
$subscribedAuthorList
- Finalmente actualizamos los siguientes detalles en ambas tablas y devolvemos el mensaje de éxito usando JSON
- Una vez que hayas seguido a un autor con éxito, verás que el botón de Seguir cambiará a Siguiendo
Paso 7: Desafiando a los autores
Para que este plugin sea efectivo, los usuarios podrían necesitar tener la función para dejar de seguir a los autores, así como seguir a los autores en cualquier momento. Explicaré el proceso de seguimiento de un autor. Como es muy similar al proceso siguiente, voy a omitir los códigos repetitivos en la explicación.
El botón en línea con todos los autores seguidos se mostrará como Siguiendo pase el cursor sobre el botón, el texto cambiará a un color diferente como "Dejar de seguir". Al hacer clic en el botón se hará otra petición AJAX a 'Unfollow' el autor. Como solo el nombre de la acción es diferente del código anterior, no voy a incluirlo aquí. Puedes mirar $jq(".following").live("click",function(){}
en el archivo followjs
.
La función utilizada para dejar de seguir al usuario es unfollow_wp_authors
. Este código es similar a la función follow author. Podemos poner el código común en una sola función en el futuro si estás dispuesto a extender el plugin. En la sección de seguimiento de autores añadimos el autor a la lista si no está ya disponible. En este caso solo quitamos el autor de la lista si ya existe. El código de abajo muestra los cambios comparados con la función de seguir al autor.
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 |
?>
|
Puedes ver que en lugar de empujar a los autores al array, los eliminamos usando la función unset.
Paso 8 Cargar la información del autor seguido
Inicialmente la dirección de correo electrónico estará vacía cuando se cargue la página con la lista de autores, ya que no tenemos un procedimiento para identificar al usuario actual. Entonces el usuario tiene que introducir el correo electrónico y pulsar el botón de carga para obtener la lista con los siguientes detalles de cada usuario. Esta va a ser otra petición AJAX similar a las anteriores y puedes echar un vistazo al código usando $jq("#loadFollowers").live("click",function(){}
. Explicaré la sección de resultados de la petición ya que es un poco diferente a las anteriores.
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> |
- Solo la lista de autores seguida de un correo electrónico dado será devuelta en la variable de mensaje.
- Una vez que se recibe el resultado, el código pasa a través de cada casilla de autor usando la clase CSS
follow
y comprueba si el autor es seguido por el usuario. - Para ello se utiliza la función jQuery
inArray
, que devolverá-1
si la cadena de búsqueda no se encuentra en el array. - Así que mostramos el texto "Siguiendo" para la clase followed y añadimos la clase CSS following para identificar a los autores seguidos.
Echemos un vistazo a la función para cargar la lista de autores seguidos desde el lado del servidor:
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 |
?>
|
- Tenemos dos acciones. Validación de nonce y del correo electrónico y comprobación de la activación como de costumbre al principio de la función.
- Luego obtenemos la lista de autores seguidos para actualizar la dirección de correo electrónico en el cuadro de texto usando
wp_author_subscribe
. - Finalmente creamos un array de autores seguidos usando la cadena y la pasamos usando JSON al código JS del lado del cliente.
Ahora los usuarios están suscritos al servicio y pueden seguir y dejar de seguir a los autores cuando quieran. La última y más importante parte del tutorial es el envío de correos electrónicos a los seguidores cuando un artículo es publicado por un autor. Comencemos.
Paso 9 Envío de correos electrónicos cuando se publican los posts
Tenemos que desencadenar una acción cuando cualquier usuario publica un nuevo post. WordPress proporciona un conjunto de acciones llamadas "Post Status Transitions" para lograr esta funcionalidad. He configurado cuatro transiciones, que pueden ser activadas cuando se publica un post.
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 |
?>
|
Las acciones anteriores llamarán a la función notify_author_followers
siempre que un mensaje se convierta en un estado publicado desde uno de los estados nuevos, borrador, pendientes o futuros. Así que enviemos correos electrónicos usando la función 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 |
?>
|
- Un objeto que contenga la información sobre los posts publicados se pasará por defecto a nuestra función
notify_author_followers
. - Primero obtenemos los detalles del autor usando el objeto
$post
. Luego obtenemos la lista de seguidores del autor actual de la tabla{$wpdb->prefix}author_followers
. - Luego obtenemos los correos electrónicos de los usuarios que siguen al autor actual usando la tabla
{$wpdb->prefix}author_subscribe
. - Creamos el contenido del correo electrónico usando el título y el autor del mensaje. Puedes cambiar esto para que contenga la información que quieras. También asegúrate de cambiar el tipo de contenido a HTML utilizando la función
wp_mail_content_type
. - Añade un nombre y una dirección de origen a la variable
$emailHeaders
. Además, no queremos que los usuarios vean las direcciones de correo electrónico de otros usuarios. Así que añade la lista de seguidores del correo electrónico a la cabecera Bcc. - Finalmente envía el correo electrónico usando la función
wp_mail
como se muestra arriba.
Hemos completado el proceso de creación de un plugin básico de WordPress para seguir a los autores. Cada vez que se publique un nuevo post se notificará a los seguidores. Es tan simple como eso.
Conclusión
Tuve que crear un largo tutorial para explicarlo todo en la creación de este tipo de plugin usando AJAX. Esto está todavía en su nivel más básico. Como usuario me gustaría tener la funcionalidad de seguir a los autores en cada blog que lea. Así que como webmasters debes considerar mejorar las funcionalidades del plugin para que los usuarios puedan seguir a sus autores favoritos. También recibirás una lista de suscriptores de correo electrónico gratis como un bono. Espero que hayas disfrutado del tutorial y espero que te guste el comentario y las sugerencias en los comentarios que aparecen a continuación.
Actualización: Este artículo ha sido actualizado para incluir las correcciones mencionadas en los comentarios de Leonel y Julio.