Contenido

Programar tareas en WordPress 2.1 o superiores

16 May

+ 10

Esta noche al llegar a casa Eduo, me comentaba algo de hacer un sistema que publicara una vez por semana, cada semana, una recopilación de artículos, por ejemplo podrían ser titulares de los artículos de la semana, etc…

Una buena solución para esto es el uso de una de las funciones que Wordress 2.1 ofrece y que ha dado mucho de que hablar, se trata de  wp_schedule_event  y wp_schedule_single_event dos funciones que nos permiten programar eventos en nuestro wordpress, recurrentes y una sola vez, respectivamente.

wp_schedule_single_event

Esta función nos permite programar un evento en un momento concreto, por ejemplo día de tu cumpleaños, un «Hoy es mi cumple!!!».

wp_schedule_single_event( $timestamp, $hook, $args );
//$timestamp -> El tiempo indicado en timestamp cuando ha de ocurrir el evento; 
//$hook --> Nombre de la función que ha de ejecutar cuando se cumpla el timestamp; 
//$args -> Argumentos que podemos pasarle a la función

wp_schedule_event

En cambio con esta podemos definir un evento que se ejecutará cada X tiempo, muy util para caso de Eduo. Imaginemos que queremos escribir un post diario con el contenido …. 489.854 RSS de diferentes blogs, pues solo tendríamos que indicar que función hace eso y cada X (tiempo que indiquemos) se ejecutará, cargandosé el servidor y los de los vecinos leyendo tal cantidad de feeds.

wp_schedule_event( $timestamp, $recurrence, $hook, $args )
//$timestamp -> El tiempo indicado en timestamp cuando ha de ocurrir el evento;
//$recurrence -> Cada cuando se ha ejecutar (leer más abajo);
//$hook --> Nombre de la función que ha de ejecutar cuando se cumpla el timestamp; 
//$args -> Argumentos que podemos pasarle a la función 

$recurrence

Por defecto la función wp_get_schedules(), que es la que se encarga de recoger las posibles fracciones temporales está forma da de un array con dos posibles fracciones de tiempo, hourly y diarly (cada hora y cada día).

Pero wordpress permite añadir más mediante el archicono add_filter, es que WordPress es una maravilla.

function more_reccurences() {
    return array(
        'weekly' => array('interval' => 604800, 'display' => 'Once Weekly'),
        'fortnightly' => array('interval' => 1209600, 'display' => 'Once Fortnightly'),
    );
}

add_filter('cron_schedules', 'more_reccurences');

Ahora ya disponemos de weekly (semanalmente) y fortnightly (quincena) (que creo que es cada dos semanas o una vez al mes, o algo asi). Para ello hemos definido un array que integrará las dos opciones indicando en cada una de ellas el interval (intervalo de tiempo entre ejecuciones) y display (El nombre de la fracción de se tiempo).

  • en lugar de criticando fallos en wp, o resolver problemas, por que mejor no se ponen a programar sus blogs?, seria mas productivo no?

    entiendo que es muy util y posee muchas herramientas y todo eso.

    😀

  • Nocrox: No se te entiende bien. Cuáles fallos? El artículo habla de como sacarle más jugo a WordPress y ese es un tema común en este blog.

    Quejarse de este artículo en este blog es como quejarse de que los de Jara y Sedal se pasan demasiado tiempo hablando de técnicas de pesca.

  • Anieto2k: Buen resumen. Me parece que no se está aprovechando lo suficiente la infraestructura de scheduling. Según estuvimos leyendo ayer salió precisamente por el uso que se le daba a wp-cron (al cual reemplaza) pero su potencial aún no ha sido explotado.

    Si al final hago lo que pensaba hacer probablemente termine expandiendo mi actual plugin modificado basado en wp-recent-links (olvidado en la fuente hace tiempo). Si funciona lo sacaré por ahí, que hay muchos deshauciados que lo siguen usando cruzando los dedos en cada actualización para que no se rompa. La idea es modificar el bookmarklet para que acepte «vias» utilizando el referrer y que periódicamente cree posts reales juntando todos los recent-links del último período (por lo que si alguna vez de desactiva el plug-in o si un tema no lo soporta aún así aparezcan, en la página principal y en el RSS).

    La actualización de WP al 2.2 facilita el manejo de blogs «espejo» para pruebas, controlando los wp_home y wp_siteurl en el fichero de configuración (algo que ya has comentado por aquí).

  • #3 Tienes mucha razón en que no se aprovecha y tiene muchas salidas.

    Para escribir el post estuve mirando el código de la 2.2 y vi que lo usaban en un par sitios, sobretodo para controlar posts y comentarios.

    Realmente interesante 😉

  • Por cierto, que se me pasó comentarlo. «Fortnight» es «quincena». «Fortnightly» es «quincenalmente» (extrañamente, nuestra «quincena» consta de catorce días, aunque no es menos lógico que el que entendamos que 7 días y 8 días, a veces, son el mismo número de días 🙂

    Se usa más en Inglaterra que en EE.UU. (donde se suele decir «bi-weekly», aunque ambos son reconocidos). Es una palabra antigua (y bonita, opino yo) que en inglés antiguo significa «catorce noches», o medio ciclo lunar.

    Y lo mejor es que lo se porque originalmente en VMS existían el micro-fortnight, (un millónesima de quincena, o 1.2 segundos, aprox.), el mili-fortnight y el nano-fortnight.

    Cuando Google estrenó su conversión de medidas se veía la «fortnight» en varias de ellas, sólo para ver que tan obscuras referencias tenía (attoparsecs por quincena a kilometros por hora, por ejemplo).

    En francés la unidad de medida es similar («quinze jours» – «Quince noches»).

    Esto, que no tiene nada que ver con nada más, tal vez inadvertidamente indica el nivel de frikismo al que puedo llegar si no me controlan 😀

  • Soy bastante nuevo en el tema de WordPress, y actualmente tengo WordPress 2.1.3 (inglés).

    Me gustaría saber cómo configurarlo para que cada domingo se publicase automáticamente una entrada con los títulos (y su correspondiente enlace) de las entradas publicadas durante la semana.

    Gracias, y un saludo.

Comentar

#

Me reservo el derecho de eliminar y/o modificar los comentarios que contengan lenguaje inapropiado, spam u otras conductas no apropiadas en una comunidad civilizada. Si tu comentario no aparece, puede ser que akismet lo haya capturado, cada día lo reviso y lo coloco en su lugar. Siento las molestias.