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!