Mostrar artículos (posts) de WordPress en tu página web externa en PHP.

El artículo en inglés está aquí http://www.jamischarles.com/blog/get-wp-posts-without-hacking/

Este método no necesita acceder directamente la base de datos de WordPress. Esta manera es mejor porque si por alguna razón la estructura de la base de datos cambia, este código no se vería afectado. Por eso es bueno usar APIs aprobadas, es una alternativa más segura.

Funciona en sitios web con ASP.NET mientras tenga habilitada la opción de correr PHP.

Para hacer que las funciones internas de WordPress estén disponibles en la página web externa se tiene que agregar lo siguiente en la parte superior de tu página web (para este ejemplo le he llamado prueba.php)

<?php
   require('www.tublog.com/wp-blog-header.php');
?>

Donde “www.tublog.com” es el nombre de dominio de tu WordPress.
Si tu blog está en un directorio llamado “blog” entonces la línea sería
require('blog/wp-blog-header.php');

Luego tienes que definir la función que utilizará comandos de WordPress para obtener los artículos (post) que quieras mostrar. Tienes que agregar lo siguiente a tu archivo functions.php de tu tema

  • En inglés: en WordPress anda a WP Admin Dashboard -> Appearance, Editor -> Theme Functions.
  • En español: en el Escritorio de WP -> Apariencia -> Editar temas -> busca el archivo functions.php y escribe lo siguiente al final del archivo.
function displayHomePosts(){
	//default values obj from post.php.
	//pass these in as args that you really want
	$defaults = array(
    		'numberposts' => 5, 'offset' => 0,
    		'category' => 0, 'orderby' => 'post_date',
    		'order' => 'DESC', 'include' => '',
    		'exclude' => '', 'meta_key' => '',
    		'meta_value' =>'', 'post_type' => 'post',
    		'suppress_filters' => true
	);

	$args = array(
    		'numberposts' => 4
	);

	//explore why the redirect error occurs?
	//$num = 5;
	$post_array = get_posts($args  ); //as found in wp-includes/post.php
	//var_dump($post_array); 

	//add the last className for the bottom border?

	for($i=0; $i<count($post_array); $i++){
		$post_title = $post_array[$i]->post_title;
		$post_name = $post_array[$i]->post_name;

		$post_permalink = "http://www.tublog.com/" . $post_name;

                //actually output the html with the php variables included
		echo "<li><a href=\"$post_permalink\" rel=\"bookmark\" title=\"Permanent Link to $post_title\">$post_title</a></li>";
	}
}

Otra vez “www.tublog.com” es el nombre de dominio de tu blog en WordPress.
Si tu blog está en un directorio blog entonces sería “www.tublog.com/blog/”

Finalmente en el mismo archivo que creaste al inicio (en mi caso prueba.php) tienes que llamar a la función que hemos creado “displayHomePosts()”.

<h2>Prueba</h2>
<ul>
    <?php displayHomePosts(); ?>
</ul>

El código completo de “prueba.php” es así:

<?php
    require('www.tublog.com/wp-blog-header.php');
?>

<!DOCTYPE html>
<html>
<body>
<h2>Prueba</h2>
<ul>
    <?php displayHomePosts(); ?>
</ul>
</body>
</html>

Espero que les sirva y lo disfruten.

Actualización: Agregar la “featured image” o “imagen destacada”

Esta solución muestra sólo los títulos y enlaces de los “posts” pero no muestra la imagen destacada.

Para mostrar las imágenes (tienes que usar la característica de WordPress llamada “Featured Image” o “Imagen Destacada” en cada “post” o “entrada”) tienes que agregar el siguiente código a “functions.php” de tu tema, como está explicado líneas arriba. Lo puedes editar desde la consola de WordPress o editar el archivo directamente.

if(has_post_thumbnail($post_array[$i]->ID)):
   $thumbnail = wp_get_attachment_image_src(get_post_thumbnail_id($post_array[$i]->ID), 'medium');
   $url = $thumbnail[0];
endif;

El código completo es el siguiente:

function displayHomePosts(){
	//default values obj from post.php.
	//pass these in as args that you really want
	$defaults = array(
    		'numberposts' => 5, 'offset' => 0,
    		'category' => 0, 'orderby' => 'post_date',
    		'order' => 'DESC', 'include' => '',
    		'exclude' => '', 'meta_key' => '',
    		'meta_value' =>'', 'post_type' => 'post',
    		'suppress_filters' => true
	);

	$args = array(
    		'numberposts' => 10
	);

	//explore why the redirect error occurs?
	//$num = 5;
	$post_array = get_posts($args  ); //as found in wp-includes/post.php
	//var_dump($post_array); 

	//add the last className for the bottom border?

	for($i=0; $i<count($post_array); $i++){
		$post_title = $post_array[$i]->post_title;
		$post_name = $post_array[$i]->post_name;

		$post_permalink = "http://www.tublog.com/" . $post_name;

                if(has_post_thumbnail($post_array[$i]->ID)):
                   $thumbnail = wp_get_attachment_image_src(get_post_thumbnail_id($post_array[$i]->ID), 'medium');
                   $url = $thumbnail[0];
                endif;

                //actually output the html with the php variables included
		echo "<li><a href=\"$post_permalink\" rel=\"bookmark\" title=\"Permanent Link to $post_title\">$post_title</a> <img src=\"$url\"> </li>";
	}
}

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s