data:newerPageTitle data:olderPageTitle data:homeMsg

lunes, 5 de abril de 2010
11:43:00

Por cada comentario que haces, Dios salva un gatito

Una simple rutina de paginación… para Wordpress


Ok, no es el lugar, lo admito, estoy hablando de “la competencia”. Pero que diablos, si no se puede tener libertad de comentar y compartir (que de hecho la hay por supuesto). Así que no hay sentimiento de culpa.

Hay muchos plugins en Internet para Wordpress, tal vez el mejor CMS en la categoría de blogs que hay en la actualidad, que realizan esta función de manera simple y eficiente. Además hay plugins que muestran un listado de los posts publicados. Ahora, lo que propongo es hacer lo mismo pero de manera artesanal. Vamos a crear un código que permita listar de manera paginada todos los títulos de los posts publicados. Veamos el paso a paso:

  1. Creamos una página (es mejor que una categoría) a la que llamaremos, por ejemplo, directorio y será la encargada de mostrar un índice de todos los posts publicados ordenados alfabéticamente.
  2. Al crear una página Wordpress le asigna un único identificador. Supongamos que este identificador es 48.
  3. Vamos a la sección de edición de archivos y buscamos editar el archivo page.php que es el que controla la publicación del contenido de todas las páginas de nuestro blog. No confundir páginas con “páginas” pues son dos conceptos distintos. Para mayor comprensión pueden visitar el web oficial de Wordpress e investigan las definiciones.
  4. Según sea la plantilla o tema que estemos usando, la ubicación de nuestro código puede variar. Aquí sólo les queda revisar el código del archivo mencionado y hacer pruebas con un simple “Hola Mundo” hasta que este se publique en el lugar que deseamos.
  5. Primero determinamos que nuestro código se muestre únicamente cuando se cargue la página llamada directorio y lo hacemos de esta forma:
  6. <?php if(is_page('178')) {?> 
    Aquí ponemos el grueso del código…

    <?php } ?>


  7. Ahora lo primero que haremos es crear el código para que nos muestre todos los posts. Wordpress utiliza el código query_posts así que para evitarnos problemas y cruces usaremos new WP_Query de la siguiente forma:





  8. <?php
    $c = single_cat_title("",false);
    $my_query = new
    WP_Query("category_name=$c&showposts=15&orderby=title&order=ASC&post_in=get_option('sticky_posts')&caller_get_posts=1&paged=$paged");

    while ($my_query->have_posts()) :
    $my_query->the_post();
    ?>
    Código para darle formato a la salida del
    listado
    <?php
    endwhile;
    the_post();
    ?>



  9. Veamos…. la primera línea, la variable $c nos permite capturar el nombre de la categoría en cuestión. Sin embargo para nuestro caso no queremos el título así que lo deshabilitamos pero no por eso deja de funcionar, sino que de esta forma podremos incluirlo en nuestro código. Para más información revisen la información de single_cat_title. Luego armamos nuestra consulta. Ahí indicamos que queremos obtener


    category_name=$c nombre de la categoría


    showposts=15 mostrar 15 resultados por vez (luego será útil para la paginación), orderby=title ordenarlos por el título


    order=ASC ordenamos alfabéticamente el resultado


    get_option('sticky_posts')&caller_get_posts=1 nos permite deshabilitar, para el listado, todos aquellos posts que hayamos marcado como fija en el wordpress


    paged=$paged nos permite indicarle que estamos paginando el resultado, como veremos más adelante


  10. Luego hacemos la consulta normal, no hay misterio, pero hay un detalle. Si omitimos el the_post(); final tendremos un problema. Por default las variables de la consulta quedan “llenas” y al terminar el listado el WP las va a volcar, entonces tendremos publicado el integro del texto del último post de la lista. Para evitar eso debemos agregar este comando para “descargar” este contenido y no mostrarlo.


  11. Ahora vamos a darle formato a nuestro listado de esta forma (por ejemplo)



  12. <li>
    <a href="<?php the_permalink() ?>" rel="bookmark"
    title="Enlace permanente hacia <?php the_title(); ?>"><?php
    the_title(); ?></a><br>
    <span
    class="post_author2">Publicado por <b><?php the_author()
    ?></b> el <?php the_time("l j \d\e F \d\e\l Y") ?> a las <?php
    the_time('g:i a'); ?> <br> Categoría : <?php the_category(',
    ');?></span>
    </li>


  13. Finalmente terminamos de redondear lo referente a la paginación con estos 2 segmentos de código. El primero lo ubicamos justo después de establecido el condicionante para mostrar el código en una página en particular



  14. <?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; ?>


  15. La segunda parte la ubicamos luego del bucle



  16. <table width="70%" border="0" cellspacing="0" cellpadding="0" 
    align="center">
    <tr>
    <td align="left"
    width="50%">
    <?php previous_posts_link('Anteriores', 15)
    ?>
    </td>
    <td align="right" width="50%">
    <?php
    next_posts_link('Siguientes', 15);
    ?>
    </td>
    </tr>
    </table>


  17. Este sería el código final




  18. <?php if(is_page('178')) {?>
    <?php $paged =
    (get_query_var('paged')) ? get_query_var('paged') : 1; ?>

    <div class="post">
    <ol>
    <?php
    $c =
    single_cat_title("",false);
    $my_query = new
    WP_Query("category_name=$c&showposts=15&orderby=title&order=ASC&post_in=get_option('sticky_posts')&caller_get_posts=1&paged=$paged");

    while ($my_query->have_posts()) :
    $my_query->the_post();
    ?>
    <li>
    <a href="<?php
    the_permalink() ?>" rel="bookmark" title="Enlace permanente hacia <?php
    the_title(); ?>"><?php the_title();
    ?></a><br>
    <span class="post_author2">Publicado por
    <b><?php the_author() ?></b> el <?php the_time("l j \d\e F
    \d\e\l Y") ?> a las <?php the_time('g:i a'); ?> <br> Categoría :
    <?php the_category(',
    ');?></span>
    </li>
    <?php
    endwhile;
    the_post();
    ?>
    </ol>

    <table width="70%" border="0" cellspacing="0" cellpadding="0"
    align="center">
    <tr>
    <td align="left"
    width="50%">
    <?php previous_posts_link('Anteriores', 15)
    ?>
    </td>
    <td align="right" width="50%">
    <?php
    next_posts_link('Siguientes', 15);
    ?>
    </td>
    </tr>
    </table>

    </div>
    <?php } ?>






El resultado lo pueden ver en el directorio de mi web. Espero que les haya sido de utilidad.


*****

0 comentarios:

Haznos saber tu opinión

Todo comentario es bien recibido. Pero debes de tener en consideración los siguientes puntos:
1. No se permitirán insultos.
2. No se permitirá comentarios únicamente con publicidad. En todo caso te sugiero enviar un mensaje privado para ver el tema.
3. No se permitirá ningún tipo de ataque, agresión ni apologías de ningún tipo que inciten a la violencia o reacciones violentas. Se puede criticar y entablar debate sin necesidad de agredir a nadie.
4. No se permitirá ningún tipo de discriminación, segregación ni racismo.

Todos los comentarios serán sujetos a moderación, así que por favor les pido un poco de paciencia. Muchas gracias por comentar en este blog.



Coméntalo en Facebook

data:newerPageTitle data:olderPageTitle data:homeMsg

Publicados en esta categoría...

Suscribete a De Copy and Paste