Como una de las características de WordPress menos utilizadas, WP-Cron a menudo se pasa por alto por los desarrolladores. Sus aplicaciones, sin embargo, no son motivo de risa. Desde el almacenamiento en caché hasta las notificaciones para la limpieza, la programación de trabajos cron puede funcionar para crear una ventaja distintiva incluso en el blog de WordPress más simple. Únase a nosotros mientras exploramos importantes aplicaciones de este mismo sistema..
WP-Cron no es lo mismo que el programador cron de Unix?
Inmediatamente después de ver la palabra cron, Estoy seguro de que has intentado adónde nos dirigimos: programar eventos perfectamente programados para que se ejecuten a intervalos específicos. Por el contrario, WP-Cron no es lo mismo que el programador cron de Unix. La distinción clave radica en cómo se ejecuta; a diferencia de un proceso en segundo plano, WP-Cron se activa cada vez que un visitante abre su sitio con WordPress. Como tal, conserva la característica vital de la sincronización imprecisa..
Sí, has leído bien: tiempo impreciso. Aunque las palabras cron y precisión son como dos guisantes en un pod, no armonizan en el sistema de WordPress. Pero, ¿es esto realmente un problema? Si se considera en el contexto del usuario, esto realmente se convierte en un activo.
Tomemos el ejemplo de un trabajo cron normal que se ejecuta cada cinco minutos para actualizar cierta información de la base de datos utilizada en un sitio web. Si ningún visitante visita el sitio durante 40 minutos, ¿cuál es el sentido de ejecutar este trabajo ocho veces? Todos los valores intermedios serían obsoletos y no utilizados. Si, por el contrario, se iniciara la primera visita de un usuario después de un mínimo de cinco minutos, no solo lograría el mismo trabajo, sino que también evitaría actualizaciones innecesarias. En otras palabras, dado que WP-Cron se basa en el usuario, tiene la ventaja de que solo se ejecuta cuando hay visitantes presentes.
Para aplicar WP-Cron, consideremos la aplicación de gestión de RSS que se utiliza con frecuencia, FeedBurner. De lejos, una de las características más populares de esta aplicación es su capacidad para contar los suscriptores de RSS. Una vez indexado, se puede acceder al número de suscriptores de un sitio mediante una simple llamada a la API. De ello se deduce, entonces, que esta llamada a la API puede realizarse una vez por vista de página para entregar el número de suscriptores a los espectadores. Esto, sin embargo, lleva a un problema..
Si se accede a la API de FeedBurner una vez por vista de página, inevitablemente conduce a una solicitud HTTP adicional, por no mencionar una de otro dominio, para cada visitante. Esto aumenta el tiempo de carga de la página para los usuarios..
Para contrarrestar este problema, es importante realizar una realización clave acerca de este método de entrega: es poco probable que se actualice el número de suscriptores RSS en cada vista de la página. De hecho, FeedBurner solo actualiza su cuenta una vez al día. Incluso si fuera a cambiar rápidamente, ¿es realmente necesario mostrar el último recuento para cada visitante? ¿Importa que el recuento esté un poco desactualizado, pero posteriormente se actualice en un día??
Para nuestros propósitos, es completamente inútil obtener el número de suscriptores RSS para cada vista de página. En cambio, si se recupera para un visitante, simplemente se puede reutilizar para futuros. Luego, después de un día, se puede hacer una actualización de este conteo. Tal proceso se conoce como almacenamiento en caché. Después de la actualización, el número de suscriptores de RSS se almacena en caché para su uso futuro en lugar de volver a calcularse hasta que haya pasado un día. Y, con eso, entramos en el mundo de WP-Cron..
Para comprender WP-Cron, es importante saber dónde está disponible la documentación. WordPress.org proporciona resúmenes de cada función cron en su Códice. Para completar nuestra tarea previamente definida, tendremos que ver el wp_schedule_event
Función, que requiere cuatro parámetros:
Nuestro evento se activará cuando la hora actual cumpla o exceda la hora pasada a esta función, según lo prescriba un futuro visitante del sitio web. A continuación, se volverá a activar basándose en el parámetro de recurrencia, que puede configurarse a cada hora, dos veces al día, todos los días o ninguno. También se pueden definir horarios personalizados de recurrencia..
Para lidiar con el evento, se utiliza un gancho. En resumen, un gancho de WordPress puede considerarse un marcador de posición para una acción. Las acciones pueden ser asignadas a ganchos a través de WordPress ' add_action
función. Más específicamente, para agregar un controlador de función al gancho dado, se puede llamar:
add_action ('hook_name', 'function_name');
donde hook_name y function_name son el nombre del gancho y la función de manejo, respectivamente.
Debido a que FeedBurner se actualiza una vez al día, especificaremos un horario diario, según el código a continuación:
wp_schedule_event (time (), 'daily', 'feedburner_refresh');
Tenga en cuenta que hora()
es la marca de tiempo actual de UNIX en segundos. Si se ejecuta, el enlace 'FeedBurner Update' se activará inmediatamente y luego una vez al día después. Tenga en cuenta que si solo pusiéramos esto en nuestro archivo WordPress functions.php, programaría un nuevo evento en cada carga de una sola página. Esta no es nuestra funcionalidad deseada; más bien, solo queremos programar este evento una vez. La forma más fácil de hacerlo es simplemente verificando si el evento ya está programado. Esto se puede hacer a través de la wp_next_scheduled
función, que devolverá false si el evento no está configurado para activarse en el futuro o la hora de su próximo activador, de lo contrario:
if (! wp_next_scheduled ('feedburner_refresh')) wp_schedule_event (time (), 'daily', 'feedburner_refresh');
Si alguna vez necesitamos cancelar este evento, es tan simple como llamar al wp_unschedule_event
función, que toma los mismos parámetros-guardar para la repetición-como wp_schedule_event
. Tenga en cuenta que el tiempo transcurrido debe ser el momento del siguiente activador, que se puede recuperar a través de wp_next_scheduled
:
if (false! == ($ time = wp_next_scheduled ('feedburner_refresh'))) wp_unschedule_event ($ time, 'feedburner_refresh');
También podemos cancelar la programación de este evento a través de su nombre de enlace usando el wp_clear_scheduled_hook
función. Tenga en cuenta que esta alternativa también eliminará todos los demás eventos que usen el mismo enlace..
wp_clear_scheduled_hook ('feedburner_refresh');
Ahora que nuestro evento está programado, debemos agregarle un controlador:
add_action ('feedburner_refresh', 'update_rss_subscriber_count');
Esto establece la función llamada update_rss_subscriber_count
ser llamado una vez que el feedburner_refresh
se dispara el gancho. Ahora es el momento de escribir esta función.
Para recuperar el número de suscriptores en el update_rss_subscriber_count
función, podemos hacer una llamada a la API de FeedBurner a través de la URL
Esto devolverá datos XML en la siguiente forma:
La información que buscamos está en el atributo de circulación. La siguiente expresión regular puede analizar fácilmente los datos para este valor: circulación = "(. *?)"
.
Puesto en inglés, nuestra expresión regular coincide con lo siguiente:
circulación =
- La palabra circulación seguida por un signo igual."(. *?)"
- Citas y todo dentro. Ejecutando esto usando el preg_match
La función recuperará una serie de coincidencias que contendrán el número de suscriptores en la primera posición del índice. Al juntar esta información se obtiene el siguiente código:
// encuentre la URL de FeedBurner y obtenga los datos // cambie [NOMBRE] al nombre de su feed de FeedBurner $ url = 'https://feedburner.google.com/api/awareness/1.0/GetFeedData?uri= [ NOMBRE]'; $ data = @file_get_contents ($ url); // @ eliminará los errores // usará una expresión regular para analizar los datos $ regex = '% current = "(. *?)"%'; preg_match ($ regex, $ data, $ coincidencias); // obtener el recuento resultante si está disponible $ count = falso; si ($ coincide con && $ coincide [1]) $ cuenta = (int) $ coincide [1];
Ahora que hemos recuperado el recuento de suscriptores, tendremos que almacenarlo para accesibilidad; En lugar de volver a visitar los datos XML de la API, los visitantes simplemente accederán a este valor almacenado.
En lugar de crear una base de datos o un archivo para fines de almacenamiento, podemos emplear otra característica de WordPress: opciones. Las opciones de WordPress son formas simples de almacenar bits de datos junto con nombres de identificación. Agregar, eliminar y acceder a las opciones es tan simple como las siguientes funciones:
update_option ($ nombre, $ valor)
- Agrega o actualiza una opción con nombre $ nombre
y valor $ valor
.delete_option ($ nombre)
- Eliminar una opción con nombre $ nombre
.get_option ($ nombre)
- Obtener el valor de opción asociado con el nombre $ nombre
. Aunque nuestro número de suscriptores no es técnicamente un valor de configuración, usar las opciones de WordPress es una de las formas más convenientes, si no la más conveniente, para almacenar datos tan simples. En consecuencia, para almacenar nuestro número de suscriptores, utilizaremos el update_option
Método, que no solo anulará los valores anteriores, sino que también creará la opción en primer lugar:
// si no se pudo encontrar un conteo, no actualice // en su lugar, quédese con el conteo anterior si ($ count! == false) update_option ('subscriber_count', $ count);
¡Nuestra función está completa! Después de configurar el evento, recuperar los datos a través de la API de FeedBurner y almacenar el valor deseado, ¡todo lo que queda por hacer es salir! El código completo para la función de programación y recuperación, que puede colocar en functions.php, se puede encontrar a continuación:
// programar el evento feedburner_refresh solo una vez si (! wp_next_scheduled ('feedburner_refresh')) wp_schedule_event (time (), 'daily', 'feedburner_refresh'); add_action ('feedburner_refresh', 'update_rss_subscriber_count'); function update_rss_subscriber_count () // encuentre la url de FeedBurner y obtenga los datos // cambie [NOMBRE] al nombre de su feed de FeedBurner $ url = 'https://feedburner.google.com/api/awareness/1.0/ GetFeedData? Uri = [NAME] '; $ data = @file_get_contents ($ url); // @ eliminará los errores // usará una expresión regular para analizar los datos $ regex = '% current = "(. *?)"%'; preg_match ($ regex, $ data, $ coincidencias); // obtener el recuento resultante si está disponible $ count = falso; si ($ coincide con && $ coincide [1]) $ cuenta = (int) $ coincide [1]; // si no se pudo encontrar un conteo, no actualice // en su lugar, quédese con el conteo anterior si ($ count! == false) update_option ('subscriber_count', $ count);
El número de suscriptores está ahora a solo una simple función de llamada en cualquier archivo de plantilla:
echo get_option ('subscriber_count');
Nuestro número de suscriptores RSS ahora está optimizado; En lugar de ser recuperado para cada solicitud, se almacena en caché con la ayuda de WP-Cron, ahorrando tiempo a nuestros usuarios y reduciendo el uso de ancho de banda. Debido a que solo se activa cuando nuestro sitio recibe un visitante, nuestra función es perezosa, un término que ciertamente puede considerarse bueno en este contexto. Pero, por desgracia, solo hemos descubierto una aplicación de WP-Cron aquí; el resto depende de usted.
¿Tienes tu propia aplicación innovadora de WP-Cron? Compártelo con nosotros en los comentarios.!