Contenido

query_posts(), personalizando nuestros blogs

13 Ene

+ 37

query_posts() es una de las funciones estrella de Wordpress. Con ella podemos modificar la salida por pantalla haciendo que :

  • Solo aparezca un post o una página
  • Mostrar todos los posts en un tiempo determinado
  • Mostrar solo los últimos posts en la principal
  • Cambiar el orden de los posts
  • Mostrar los posts de una sola categoría.
  • Y muchas cosas más…

query_posts(), es un interfaz para modificar las consultas a base de datos facilitandonos la tarea reduciendo nuestra labor a introducir una serie de modificadores que serán pasados como parámetro a la función y que nos modificará la salida de posts.

Esta función está pensada para ser usada junto al famoso Loop de Wordpress que se encargará de mostrar el resultado de query_posts() con los modificadores que nosotros les hayamos pasado.

Ejemplo de uso

<?php
query_posts('....');
while (have_posts()) : the_post();
...
endwhile;
?>

Parámetros

query_posts() nos permite enviar una serie de parámetros que podemos separar en varios tipos:

Parámetros de categorías

  • cat
  • category_name

Ejemplos

query_posts('cat=4'); //Únicamente los posts de la categoría con ID (4)
query_posts('cat=-4'); //Todos excepto los de la categoría con ID (4)
query_posts('category_name=Categoria'); //Solo los de las categoria (Categoria)
query_posts('cat=1,2,4,5,7'); //Únicamente los posts de las categorías indicadas.

Parámetros de Tags

  • tag

Ejemplo

query_posts('tag=cooking'); // Todos los posts con el tag (cooking)
query_posts('tag=bread,baking'); //Todos los posts que contengan (bread) o (baking)
query_posts('tag=bread+baking+recipe'); //Todos los posts que contentan las 3 tags

Parámetros de Autor

  • author_name
  • author

Ejemplo

query_posts('author_name=aNieto2k'); //Todos los posts en los que el autor sea (aNieto2k)
query_posts('author=2'); //Todos los posts del autor (2)
query_posts('author=-4'); //Todos los posts menos los del autor (4)

Parámetros de posts y páginas

  • p
  • name
  • page_id
  • pagename
  • showposts

Ejemplo

query_posts('p=1'); //Únicamente el post (1)
query_posts('name=first-post'); //Únicamente el post con nombre (first-post)
query_posts('page_id=7'); //La página con ID (7)
query_posts('pagename=about'); //La página con nombre (about)
query_posts('showposts=1'); //Modifica el LIMIT del SQL para indicar el número de posts a mostrar.

Parámetros de tiempo

  • hour
  • minute
  • second
  • day
  • monthnum
  • year

Ejemplo

query_posts('hour=01'); //Todos los post de las (1:00)
query_posts('minute=30'); //Todos los posts del minuto 30(*:30)
query_posts('second=07'); //Posts del segundo 7 (*:*07)
query_posts('day=1'); //Los posts de los días (1)
query_posts('monthnum=2'); //Los posts del mes (2)
query_posts('year=2005'); //Los posts del año (2005)

Parámetros de paginación

  • paged
  • posts_per_page
  • order

Ejemplo

query_posts('paged=2'); //Todos los posts que se encuentren en la página (2) de la paginación
query_posts('posts_per_page=10'); //Número de posts por página (10)
query_posts('order=ASC'); //Orden de la paginación (ASC)

Combinar parámetros

No tendría mucha gracia que únicamente pudieramos usar un solo parámetro ya que esto limitaría considerablemente el potencial de la función, para ello podemos hacer uso de (&) con el que podremos unir varios parámetros para pulir nuestra condición.

query_posts("cat=-1,-2,-3&page_id=7&tag=bread,baking");

La imaginación es la única limitación.

Wow, ¡sensacional post! Ojalá lo hubieras escrito hace unas semanas, que tuve que pelearme con este tema sin tener mucha idea de los entresijos de Wordpress. Me has dejado alucinado con lo del tiempo, no sabía que se podía filtrar con tanta precisión.

Es una documentación fantastica! me sirve mucho.. también hace más de una semana estaba buscando personalizar las llamadas pero esto ya es más completo.

Como siempre has hecho un aporte grande!

Gracias

Un saludo

Gran post, me lo guardo, me vendrá bien si algún día necesito modificar un thema para hacerlo tipo magazine o algo.

Hola, tengo una pregunta.

En un blog vi que en el index tenian el ultimo post de cada categoria.

Quisiera hacer lo mismo…

Me pueden tirar una pista acerca de como seria?

Gracias!

Ninio Romantico es facil solo es cuestion de hacer un query por cada categoria con esta condicion.

query_posts(’category_name=Categoria&showposts=1&order_by=date&order=DESC’);

creo que podrias hacelo mas facil metiendolo a un ciclo cambias category_name por cat e imprimes una variable que incremente

cat=1
cat=2
cat=3, etc etc

juanjosezq, esto ultimo que mencionas si que es interesante alguna vez lo pensé, pero como de programación no se mas que pegar y copiar algunos archivos jamas lo implemente.

Muy buen post y muy buenos comentarios por cierto.

saludos

A ver.. esa idea la tengo, lo que me falta es como ponerlo.

El query_posts() no lo tengo en mi theme.

Tengo el clasico loop

Necesito saber a donde ponerlo.
Tengo que repetir el loop?
Como indico que sea solo el ultimo post de cada categoria?
Que parte del codigo repito para cada categoria?

No hace falta que sea auto incremental pq solo pienso poner las categorias principales.

Gracias juanjosezg por tu respuesta… pero me falta un poco más d info :P
Entiendo los codigos, pero no se programar xD

PD: Ya se donde ponerlo XD

Ahora me falta todo lo demas acerca d las categorias.

GRacias!

Y es posible hacer este tipo de queries via URI?

Vi que para tags funciona bien, incluso tiene varios operadores (, +)…. pero en WP 2.3.1 no me funciona para multiples categorias:

?cat=3,4 retorna solo los resultados para la categoria 3, pasando a ser /category/nombre-categoria-3/

Como hago para mostrar sólo 5 de mis 21 categorias, las de id 1, 3, 5 y 9 ?

Gracias

@Sabogal: Pues exactamente como los has puesto, separandolas por (,) comas.

Andres que tal?

Veo en los parametros de tiempo que no esta week, he pensado que quiza no aparece porque se puede usar day, pero eso solo se podria hacer si el mes y la semana parte el Lunes 1, o domingo 1 depende de los paises el inicio de semana, por cierto. Hay alguna forma de mostrar los post por semanas pasadas y no tan solo meses?.

Saludos.

PD: soy + copypaster…

@angel: Aunque no esté en la especificación, puedes hacer busquedas usando el parámetro (w), usando el número de semana del año ;)

Saludos

Gracias aNieto2k, yo también necesitaba algo así, pues prefiero una línea de código a un nuevo plugin. Lo acabo de probar en WP 2.2.3 y funciona perfectamente.

Buenísimo. Es una forma bastante rápida de lograr grandes resultados.

Saludos!

Cuantos query_post puedo poner???
mi idea es aparecer los post ordenados por dia, ej: si tengo 4 post en un dia, quiero que estos aparescan ordenados.
Gracias

Ya me respondi la pregunta.
Ahora tengo la sgte duda, como puedo hacer que en vez de que me muestre los post del dia 1, lo haga con cada dia??

Muy bueno el post, muchas gracias.
¿Sabes como hacer para que en el loop principal se ignoren determinados post y solo se vean cuando tenemos una categoria seleccionada?

Tengo una consulta::: espero puedan ayudarme!!
lo que quiero es que busque los posts de una determinada categoria, pero no cat=1 o 2 o 3..etc.. (o sea.. no se sabe previamente cuales se deben mostrar) sino que de un enlace anterior proviene. sera mas especifico::
aqui obtengo el id de la categoria deseada::::
$categoria = $_REQUEST['id'];
ahora como meto esa informacion al query_posts(’cat=!!!!AQUI!!!!’); dado q no funciona llamar a la varible.
Espero q puedan ayudarme. Gracias de manera anticipada!

HOla.. en lo personal lo solucione asi

Pero me parece poco profesional, ya que no siempre conocere q categorias se usara..!!. Estare pendiente de sus sugerencias!! Gracias

@EDERZM: Podrías usar algo así


query_posts('cat='.$_REQUEST['id']);

Y luego desde donde llames añade al enlace el ID de la categoría.

Debería funcionar a la primera :D

Tengo una consulta, nose porque mi template no me muestra dentro de la categoria el numero de posts que tiene al lado de la misma por ej… Categoria (4)… seguramente hay que hacer un count por categoria.. me dan una mano?

he probado el query para una categoria determinada en mi sitio, pero al hacerlo no me funciona la paginación del blog, alguna ayuda?!?!?!?!

no me ha funcionado el cat=-numero, tampoco usando category_name=-nombre… solo he podido lograr lo que necesito, usando un query post solicitando distinto contenido, pero no negandolo. no se a que se deba.

Hola Andres.

Estuve traatndo de entender lo que nos explicas. Y creo qeu es posible de implementar en un theme que estoy diseñando.( mas bien estoy aprendiendo a diseñar)
mi gran pregunta es ¿como hago para mostrar en el index, tan solo el ultimo post?

he insertado el codigo pero al parecer hay algo que no cuadra por que me sale error.
Agradeceria un poco de ayuda.

gracias

@Mr.Yin: pues debería ser tan fácil de meter

query_posts(’showposts=1′);
if(have_posts()):

Con esa línea ( la negrita) debería solo devolverte 1 post.

Buenos dias, ante todo agradecer este interesante hilo.
He estado probando en WP 2.6 y todo fantástico. Tan sólo una pega, tengo instalado el WP-PageNavi y cuando hago el “query” a una determinada categoria no me la pagina.
Accediendo a dicha categoria mediante uri la pagina sin problemas, pero no mediante el “query”.
Alguien sabe la solucion? (en el query he puesto como parametros “nombre de la categoria” y he probado a mostrar por orden y numero determinado de posts..y nada).
Gracias de antemano

Tengo una duda, cómo podría excluir del loop el último post de una categoría?, pero sólo ese

query_posts('cat=-7');

Si pongo esto me excluye todos los post de esa categoría, cómo podría excluir sólo el último y mostrar el resto?

@minimal: Se me ocurre que podrías obtener primero el ID del último post de la categoría 7 y despues excluir ese post.

@minimal
@minimal: aver prueba

query_posts(’cat=7&offset=1′);

te extraera todo las noticias de la categoria 7 menos el primero.

Al final viendo lo complicado que era cambié de parecer y lo he solucionado de otra manera.

Mi intención era crear arriba en la portada del blog un post destacado y después evitar que apareciera debajo excluyendo el último post de la categoría “destacados”.

Probando y viendo que no daba con la solución opté por en vez de poner un post especial en el apartado de destacados, usar ese apartado para darle un formato especial al último post publicado en el blog, por lo que resulta más sencillo añadiendo el offset=1 debajo.

No sé si me he explicado jajaja, creo que sí más o menos.

Comentar

#

Me reservo el derecho de eliminar y/o modificar los comentarios que contengan lenguaje inapropiado, spam u otras conductas no apropiadas en una comunidad civilizada. Si tu comentario no aparece, puede ser que akismet lo haya capturado, cada día lo reviso y lo coloco en su lugar. Siento las molestias.


Cerrar
Enviar por Correo