Antes de leer esta entrada si quereis una introducción básica a cómo crear un shortcode en WordPress os recomiendo leer este articulo que publique hace unos meses:

Cómo crear nuestro primer shortcode en WordPress

Hoy vamos a ver cómo crear un shortcode que muestre las últimas entradas de nuestra página.

Empezemos por lo básico

function last_posts_func($atts){
	extract(shortcode_atts(array(
		'number' => 3,
	), $atts));
	$posts = '';

        $my_query = new WP_Query('post_type=post&posts_per_page='.$number);

	while ($my_query->have_posts()) : $my_query->the_post();
	$posts .= '<div class="post">';
	$posts .= '<a title="'.get_the_title().'" href="'.get_permalink().'">'.get_the_title().'</a>';
        $posts .= get_the_content(__('Leer más'));
	$posts .= '</div>';
	endwhile;
	wp_reset_query();

        return '<div class="last_posts">'.$posts.'</div>';
}

add_shortcode('last_posts','last_posts_func');

Con este código en el functions.php de nuestra theme, lo que estamos haciendo es declarar un shortcode con nombre “last_posts” con un solo parámetro “number” (con valor por defecto de 3) que lo que hace es definir el número de entradas que queremos mostrar. Por lo tanto si ahora en cualquier página / entrada de nuestra pàgina ponemos:

[last_posts]

Veremos las tres últimas entradas de nuestra página con su descripción, si queremos un número diferente de entradas, podemos poner:

[last_posts number="5"]

Mostraremos cinco entradas en lugar de dos

Añadiendo algunas opciones más

Para darle más funcionalidad a este shortcode podemos añadir más parámetros que lo adapten mejor a nuestras necesidades.

Vamos a añadir un parámetro que nos permita filtrar las entradas por una categoría en concreto y que nos permita cambiar el texto de “Leer más” al final de cada entrada, vamos a ello:

El primer paso es declarar estos nuevos atributos y darles un valor por defecto:

extract(shortcode_atts(array(
		'number' => 3,
                'category' => '',
                'more_link' => 'Leer más'
	), $atts));

Hemos puesto que categoría por defecto este vacía y el texto del enlace sea “Leer más”, vamos a ver cómo aplicarlo:

Vamos a hacer un condicional para comprobar si categoría existe, si existe haremos una petición o otra

Para que funcione correctamente, category tiene que ser una ID de categoría válida dentro de nuestra página.




if(isset($category)) {
 $my_query = new WP_Query('post_type=post&posts_per_page='.$number);
 }
 else {
 $my_query = new WP_Query('post_type=post&cat='.$category.'posts_per_page='.$number);
 }

Para cambiar el texto de “Leer más” es tan sencillo cómo cambiar el texto por defecto por la variable que hemos declarado anteriormente:

$posts .= get_the_content($more_link);

Vamos a verlo todo junto

function last_posts_func($atts){
	extract(shortcode_atts(array(
                'number' => 3,
                'category' => '',
                'more_link' => 'Leer más'
 ), $atts));
 $posts = '';

 $my_query = new WP_Query('post_type=post&posts_per_page='.$number);

 while ($my_query->have_posts()) : $my_query->the_post();
 $posts .= '<div>';
 $posts .= '<a title="'.get_the_title().'" href="'.get_permalink().'">'.get_the_title().'</a>';
 $posts .= get_the_content($more_link);
 $posts .= '</div>';
 endwhile;
 wp_reset_query();

 return '<div>'.$posts.'</div>';
}

add_shortcode('last_posts','last_posts_func');

Con todo esto ahora nuestro shortcode tiene más opciones:

[last_posts number="5" category="13" read_more="Ver entrada" ]

Y eso es todo por hoy espero que os sirva!

Deja un comentario