Berriart Berriart

Desarrollo web con software libre

Usar funciones de WordPress externamente

Guardar este artículo en Delicious Compartir este artículo en Twitter Compartir este artículo en Facebook

En algún momento dado, tal vez hayáis querido crear una página para vuestro blog fuera de wordpress, pero pudiendo utilizar todas las funciones y funcionalidades del wordpress. Un ejemplo de ello podría ser crear un cron para que publique ciertos posts recogidos de un feed, o de una base de datos externa.

Hacerlo es bastante sencillo, solo tendréis que escribir las siguientes líneas al comienzo del script:

<?php
// A menos que vayas a usar el sistema de themes de wordpress
// debes definir WP_USE_THEMES antes de hacer el require
define('WP_USE_THEMES', false);	

// Al incluir este archivo, creamos la conexión a la BD
// y podremos hacer uso de las funciones
require('/ruta-al-directorio-del-wordpress/wp-blog-header.php');  

?>

Hay que tener en cuenta que si vas a utlizarlo por consola o utilizando un cron, Apache no mandará las variables de servidor, así que seguramente tengas que forzarlas tú mismo antes de hacer el ‘require’, si usas WordPress MU tendrás que hacerlo sí o sí. Ej:

$_SERVER['HTTP_HOST'] = 'www.berriart.com';
$_SERVER['REQUEST_URI'] = '/';

Puede que algunas funciones no estén disponibles porque necesiten de algún archivo que no se incluya de manera normal en el WordPress. Por ejemplo si se quiere usar ‘fetch_rss’ para parsear feeds, seguramente tengamos que incluir el archivo ‘rss.php’ de la carpeta ‘wp-includes’ porque éste solo se incluye por defecto en algunas páginas del administrador.

include_once(ABSPATH . WPINC . '/rss.php');

Actualización:

Después de un tiempo me he dado cuenta de que esto solo no es suficiente. Ya que wordpress al no reconocer que tipo de página es esa que has creado (si es un post, o una página, o una búsqueda,…) enviará un error 404. Es decir, visualmente la página funcionará correctamente, pero si compruebas las cabeceras de la web verás que devuelven un error 404. Además, como visualmente no notas nada, lo más probable es que si lo hicieras así ni siquiera te des cuenta de que está mal. Eso sí, te podrías volver loco intentando que Google rastreara tu página. Para solucionar ese problema solo tendrás que agregar además de lo indicado arriba las siguientes líneas que cambiarán las cabeceras (escribir esto antes de cualquier salida de texto al navegador):

header("HTTP/1.1 200 OK");
header("Status: 200 All rosy");

Si quieres ver como un virus me ayudó a encontrar este problema puedes ver este post.

5 Comentarios
  1. propiedades

    muiy buenas fonciones re importantes

  2. kcmr

    Tengo un archivo al nivel de wp-blog-header.php y estoy intentando mostrar los excerpt pero no hay manera. El resto de funciones, como por ejemplo get_footer() funcionan a la perfección. Si no es mucho preguntar, ¿hay que hacer algo en particular para este caso?

    Gracias.
    Un saludo.

  3. kcmr

    Bueno, ya está solucionado. Dejo aquí un enlace por si a alguien le viene bien:
    http://www.i-jeriko.de/2006/04/04/import-rss-feeds-into-your-wordpress-blog/

    Saludos.

  4. Candy Mujer

    Cambiemos de funciones a mi no me funcion el get_footer. Y de alli en adelante me funciona a la perfeccion.

  5. Persimón

    En realidad hay una forma mas sencilla y directa, simplemente hacer un require de wp-load y listo

Deja un comentario