Te traemos este burdo truco para ejecutar funciones Worpress mediante un cronjob sin complicarte mucho la vida. Esto es una solución rápida y muy poco recomendable, pero está bien para ir aprendiendo o solucionar un marrón rápido sin necesidad de desarrollar un Plugin para WordPress completo.
¿Para qué ejecutar funciones WordPress con un Cronjob?

Pongamos un ejemplo, queremos conectarnos a la API de Twitter y descargar los últimos tweets de un usuario para publicarlos en un post, queremos hacer esto una vez al día a las 11:45 am (por ejemplo). Vamos a hacerlo.
Qué necesitamos
Para llevar acabo este burdo truco -que va en contra de cualquier manual de buenas prácticas- necesitamos:
- Un WordPress funcionando. Obviamente.
- Algún plugin para insertar código php en entradas y páginas. Por ejemplo este: Allow PHP in Posts and Pages
¡El truco! Hacemos el ejemplo
Es el momento, vamos al lío, creamos una página nueva, en la que incluiremos el siguiente código:
require_once "wp-admin/includes/taxonomy.php"; tu_funcion();
Las etiquetas
son las que indican a nuestro plugin Allow PHP in Posts and Pages, dentro de ellas podemos escribir php sin problemas.
Lo primero, como vamos a crear posts, cargamos las funciones del archivo “taxonomy.php” ya que si no obtendríamos errores en algunas funciones que necesitamos.
La línea tu_funcion() ejecuta la función en la que tendremos lo que hemos decidido para el ejemplo, tomar una serie de Tweets y publicarlos en un post..
Una vez lo tengamos, guardamos la página como “http://midominio.com/mi-pagina” y ya estamos listos para seguir.
Error con wp_create_category()
Si no cargásemos el archivo “wp-admin/includes/taxonomy.php” nos encontraríamos con un error de la función wp_create_category() como éste:
Fatal error: Call to undefined function wp_create_category() in /Users/noname/Sites/wp-content/plugins/my_plugin/my_plugin.php on line 95
Esto ocurre porque las funciones de este tipo sólo se cargan en el entorno del admin, salvo que lo forcemos haciendo el require a “wp-admin/includes/taxonomy.php“.
Creamos nuestra función
Ahora es el momento de definir lo que ocurre dentro de tu_funcion(), aquí ejecutaremos la llamada a la API de Twitter (en la que no vamos a ahondar de momento):
/*
* Librería para interactuar con la API de Twitter by Abraham
* https://github.com/abraham/twitteroauth
*/
require_once 'lib/OAuth.php';
require_once 'lib/twitteroauth.php';
/*
* Datos de nuestra APP de Twitter
*/
$consumerKey = 'xxxxxxxxxxxxx';
$consumerSecret = 'xxxxxxxxxxxxxxxxxxxxxxxxxx';
$accessToken = 'xxxxxxxxxxxxxxxxxxxxxxxx';
$tokenSecret = 'xxxxxxxxxxxxxxxxxxxxxxxx';
/*
* Iniciamos el objeto para interactuar con la API de Twitter
*/
$toa = new TwitterOAuth($consumerKey, $consumerSecret, $accessToken, $tokenSecret);
/*
* Obtenemos los últimos tuits de un usuario
*/
$tuits = $toa->post('statuses/user_timeline',array('screen_name'=>'FaustoRM'));
//Iniciamos la variable cuerpo con algo de texto, esto será el cuerpo del post
$cuerpo = 'Los últimos tuits de @FaustoRM';
foreach($tuits as $tuit) {
$cuerpo .= '' . $tuit->text . '
;';
}
/*
* Nos inventamos un título para el post usando la fecha de hoy
*/
$titulo = 'Lo que dice FaustoRM hoy ' . date('d-m-Y') ;
/*
* Creamos una categoría o recogemos su id si ya está creada.
*/
$category_name = 'Tuits de FaustoRM';
$id_category = wp_create_category($category_name);
/*
* Generamos el Post y lo publicamos
*/
$post = array(
'post_content' => $cuerpo, //El cuerpo
'post_title' => $titulo, //El título
'post_status' =>'publish', //Define el estado del post
'post_category' => array(0,$id_category),
);
$id = wp_insert_post($post); //Crea el post y recoge la ID
/*
* Ya que estamos tuiteamos lo que acabamos de publicar
*/
$tweet = $titulo . ' http://tudominio.com/?p='.$id; //Generamos contenido para el tweet
$toa->post('statuses/update',array('status'=>$tweet)); //Esto envía a twitter el tweet
No vamos a entrar a explicar el código, sólo decir que se generará un post con los útimos tuits del autor de esta entrada @FaustoRM.
Configuramos el cronjob
Nos conectamos al cronjob -no vamos a entrar en este tema en este post- y hacemos la llamada a la siguiente url “http://midominio.com/mi-pagina”, por ejemplo:
30 11 * * * curl http://midominio.com/mi-pagina
Este cronjob ejecutaría nuestro script todos los días a las 11:30 am.
Si lo hemos hecho bien, ahora tendremos esto ejecutándose en el periodo marcado en el cronjob, un WordPress generando contenido sin intervención humana… ¡Maravilloso!
