Categorías: Programación Web

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?

¿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!

fruiz

Share
Publicado por
fruiz

Recent Posts

¿Sabías que tu web de WordPress carga 2 MB de CSS que no usa? Bienvenido a los page builders

Abre Chrome DevTools en cualquier web hecha con Elementor y mira la pestaña Coverage. Entre…

56 años atrás

Elementor en 2026: ¿page builder imprescindible o lastre de rendimiento?

Análisis equilibrado de Elementor en 2026: ecosistema masivo contra problemas de rendimiento, CSS inflado y…

56 años atrás

Build vs Buy: el informe de Retool 2026 explicado para no-techies

Retool ha publicado su informe Build vs Buy 2026 y los datos son reveladores: el…

56 años atrás

Microsoft dice que los business agents matarán al SaaS en 2030: ¿tiene razón?

Microsoft predice que los agentes de IA empresariales acabarán con el modelo SaaS tradicional antes…

56 años atrás

Por qué el shadow IT con IA es la mejor noticia para las pymes

El 60% de las empresas ya construyen software fuera del control de IT. Con la…

56 años atrás

El SaaSpocalypse de 2026: 285 mil millones borrados y lo que viene después

285.000 millones de dólares en valoración SaaS evaporados. Klarna abandona Salesforce. Microsoft predice que los…

56 años atrás