Miniposts ó asides en WordPress

Escrito el 31 julio 2008, 09:42pm en Wordpress

Tagged with: , , , , ,

Esto era algo que quería hacer sin la necesidad de tener que agregar un plugin a WordPress y que funcionara correctamente (paginación y búsquedas), y una buena forma es editando el diseño (theme) que estemos utilizando.

Antes que nada, para aquellos que se pregunten ¿que son los miniposts o asides?, la respuesta es simple, muchas veces encontramos información interesante o no por la red y queremos compartirla con nuestros visitantes, o algún amigo escribe un artículo interesante y queremos enlazarlo pero sin la necesidad de escribir mucho, y una entrada normal para solo colocar un enlace no va muy bien.

Es por eso que los bloggers se la ingeniaron (no mucho, solo un poco :P) para inventar lo que algunos llaman miniblogging o microblogging, que es hacer saber algo muy pocos caracteres, por lo que el formato ideal no es el de un post común.

Para poder utilizar esta opción en nuestro blog (WordPress) necesitamos de un plugin que se encargue de filtrarlos del bucle que muestra nuestras entradas e imprimirlos donde más nos guste. O también uno puede hacer a mano y modificar el theme como es el caso de este articulo 🙂

  1. – Hacer una copia de seguridad del archivo index.php dentro de la carpeta de nuestro theme.
  2. – En serio, has backup!
  3. – No lo vuelvo a repetir, copiar archivo -> pegar archivo 🙂
  4. – Ahora si!, abrimos el index.php con cualquier editor de texto y buscamos la siguiente línea:
    <?php if (have_posts()) : ?>

    , luego de la mismo debería seguir algo como esto:

    <?php while (have_posts()) : the_post(); ?>
  5. – Entre las dos líneas mencionadas en el punto anterior colocaremos el siguiente código:
    <?php
    /* Inicio modificacion miniposts.
    Hacemos la consulta de los posts dentro de la categoria 181
    que en mi caso es la que se corresponder con los miniposts,
    y le indicamos que solo vamos a mostrar 5 por vez */
    $query_mposts = new WP_Query($query_string . "&cat=181&showposts=5");
    /* Iniciamos el ciclo para recorrer los resultados de la
    consulta realizada */
    while ($query_mposts->have_posts()) : $query_mposts->the_post();
    /* Mostramos solo el contenido del post, sin titulo */
    echo wptexturize($post->post_content);
    echo "&nbsp;";
    /* Mostramos la cuenta de comentarios y enlazamos
    a los mismos */
    comments_popup_link('(0)', '(1)', '(%)');
    /* Finalizamos el ciclo */
    endwhile;
    /* Ahora los filtramos del resto de los articulos */
    if (is_home())
    {
    /* Muy importante!, si no agregamos la variable $query_string
    la paginacion no va a funcionar */
    query_posts($query_string . "&cat=-181");
    }
    /* Fin modificacion miniposts, aqui sigue el bucle normal
    de WordPress */
    ?>
  6. – Guardamos los cambios y listo!, ya tenemos los miniposts funcionando en nuestro blog.

Debo aclarar que no todos los themes son iguales, esto lo hice en base al diseño por defecto que viene con WordPress (theme: default), pero no debería de cambiar demasiado. Lo importante es siempre colocar este código ANTES del comienzo del loop de WP (while (….)).

Mi diseño utiliza el index.php para todo, ¿qué hago?

Si tu theme utiliza el mismo archivo index.php para listar las entradas como para mostrarlos individualmente, es decir no existe un archivo llamado single.php, lo que se debe hacer para que los miniposts sean insertados en la página individual de cada entrada es agregar un IF al inicio del bloque de los miniposts:

<?php
/* Inicio modificacion miniposts.
Hacemos la consulta de los posts dentro de la categoria 181
que en mi caso es la que se corresponder con los miniposts,
y le indicamos que solo vamos a mostrar 5 por vez */
if(!is_single()){
$query_mposts = new WP_Query($query_string . "&cat=181&showposts=5");

Y después de donde dice endwhile; colocar una }. Si tu theme es muy limitado y no posee tampoco un archivo aparte para mostrar las páginas, archivos y demás, deberás filtrarlo de la misma forma.

Mostrar minipost en el sidebar

En el caso de que se quiera mostrar los últimos miniposts en nuestro sidebar u otra ubicación 😛 , los pasos a seguir son casi los mismos que los dicho más arriba solo que en el ítem número 5 se deberá insertar solamente:

<?php
/* Ahora los filtramos del resto de los articulos */
if (is_home())
{
/* Muy importante!, si no agregamos la variable $query_string
la paginacion no va a funcionar */
query_posts($query_string . "&cat=-181");
}
/* Fin modificacion miniposts, aqui sigue el bucle normal
de WordPress */
?>

Luego abrimos el archivo sidebar.php (previo realizar backup del mismo!), y se inserta el siguiente código donde uno quiera que aparezcan los miniposts:

<?php
/* Inicio modificacion miniposts.
Hacemos la consulta de los posts dentro de la categoria 181
que en mi caso es la que se corresponder con los miniposts,
y le indicamos que solo vamos a mostrar 5 por vez */
$query_mposts = new WP_Query($query_string . "&cat=181&showposts=5");
/* Iniciamos el ciclo para recorrer los resultados de la
consulta realizada */
while ($query_mposts->have_posts()) : $query_mposts->the_post();
/* Mostramos solo el contenido del post, sin titulo */
echo wptexturize($post->post_content);
echo "&nbsp;";
/* Mostramos la cuenta de comentarios y enlazamos
a los mismos */
comments_popup_link('(0)', '(1)', '(%)');
/* Finalizamos el ciclo */
endwhile;
?>

Espero que puedan entender este pequeño tutorial y le sea de utilidad 🙂 , el código esta comentado por lo que la personalización no creo que sea muy difícil, cabe destacar que no he utilizado ningún estilo visual en este ejemplo pero eso ya queda a gusto de cada uno. Este blog posee miniposts basados en lo que aquí he publicado.

Comentarios (7)

  1. Joseé — agosto 1, 2008 a las 3:28 am

    Hola, Martín. Vos sabés que vine a tu blog para ver si encontraba el nombre de la web que alguna vez me recomendaste, donde salen chistes gráficos y que se llama algo así como wwwuunjffaffaw no sé cuánto. Después me encontré con esto, que de haberlo visto antes, me habría ahorrado un fin de semana entero y media botella de fernet.

    Abrazo,

    josé.

  2. Rodrigo — agosto 3, 2008 a las 8:52 pm

    Me gustó el artículo, bien completito!

    Yo usé otro enfoque en mi blog. En mi caso, no me gusta tener los miniposts siempre arriba, me parece que rompen con el orden cronológico del blog. Lo que hice fue directamente meter un IF dentro del loop (“si el post es de la categoría minipost entonces mostrarlo de otra manera”). De esta manera tengo además de miniposts, reviews de discos, imágenes y citas.

  3. Martín Aberastegue — agosto 3, 2008 a las 9:37 pm

    Rodrigo: así lo hice al inicio pero no me convenció el hecho de que quedaran perdidos entre los demás artículos o que el WP me los contara como un post mas, lo que hacía variar mucho el alto del blog ya que en mis opciones tenia seteado mostrar 10 posts en el home, y si contábamos los miniposts como entradas normales el blog quedaba muy “desparejo” de pagina en página. Es por eso que me puse a renegar para poder ponerlos arriba, paginarlos y demás :).

    En rzw.com.ar lo tengo de la forma que vos decís.

  4. Jose Perez — septiembre 6, 2008 a las 9:33 pm

    Hola Martin

    Una pregunta y que es lo que lo hace diferente de un post normal? porque a mi me sigue apareciendo igual mostrando la fecha y todo como si fuera un post normal

    Saludos

  5. Martín Aberastegue — septiembre 6, 2008 a las 11:41 pm

    Jose Perez: en tu caso si estas viendo la fecha y todo lo demas quizas no lo estes aplicando muy bien. Al menos con el ejemplo de mi post no se muestra la misma. Y sobre la pregunta de que lo hace diferente del resto, en mi caso es para dividir o separar ciertos contenidos, si bien tengo los posts normales, tambien tengo la seccion de favoritos y los miniposts propiamente dicho. Los favoritos los utilizo para recomendar algo que me gusto o llamo la atencion, los minipost para enlazar articulos/sitios que muchas veces no se merecen una entrada normal en el blog, como por ejemplo un articulo interesante sobre algun tema en especial que seguramente sera republicado en cientos de blogs, en esos caso prefiero colocar solo un enlace a la fuente original.

  6. nicolas — diciembre 11, 2008 a las 11:10 am

    estoy con el problema del paginador, puse este codigo para mostrar titulos de una categoria

    <a href="" rel="bookmark">

    pero tengo problemas con el paginador, osea no sale, ahora vi tu post, pero veo que es con el contenido completo, trate de modificarlo para que solo salga el título pero me da un error nose que hago mal.

    me podés dar una mano y decirme que es lo que hay que cambiar para que solo aparezca el link del titulo de los ultimos 5 post de la cat especifica.

    gracias

  7. Martín Aberastegue — diciembre 11, 2008 a las 11:54 am

    Nicolas: lo que pedis esta en el articulo de mas arriba, solo que en lugar de llamar a la funcion $post->post_content colocar $post->post_title

Los comentarios están cerrados para este artículo.