Te pongo un pseudocódigo para el siguiente formato:
Primera ... 3
4 5 ... Última
Código PHP:
Ver originalSi $total_paginas == 1:
// Ni si quiera pongas paginación (queda mejor si con una sola página ni te sale)
Si no si $total_paginas > 1:
// Primera: <a ?pagina=1>Primera</a>
...
Si $pagina != 1:
// Anterior: <a ?pagina=$pagina - 1>$pagina - 1</a>
<strong>$pagina</strong>
Si $pagina != $total_paginas
// Siguiente: <a ?pagina=$pagina + 1>$pagina + 1</a>
...
// Última: ?pagina=$total_paginas
Si no:
// Error, no puede ser 0 (significaría que la consulta no ha devuelto nada).
Con este pseudocódigo, además, si la página es la primera no te aparece la anterior y, si es la última, tampoco te aparece la siguiente. Si te das cuenta, he eliminado el bucle, no te hace falta si sólo vas a poner anterior y siguiente, si quieres poner más de anterior y siguiente, por ejemplo, las 6 más cercanas (3 hacia atrás, 3 hacia adelante) entonces sí lo necesitarás.
Hay muchas formas de hacerlo según quieras dejar el final, puedes aumentarlo, quitar cosas, poner otras, lo único que tienes que tener claro dónde tienes cada valor y qué significa.
Un saludo, espero que te sirva.