SEO para Google

Truco para ejecutar funciones WordPress mediante un cronjob

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?

Trucos WordPress¿Por qué alguien querría ejecutar funciones de WordPress con un Cronjob? Respuestas hay miles, pero vamos a un ejemplo sencillo, publicar contenido automático periódicamente sin depender del falso cron de WordPress que para determinadas labores -como crear contenido- no es adecuado pues es inexacto.

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!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *