Hace ya unos días, Mn4K, que ayuda a moderar el foro y siempre tiene alguna respuesta de calidad para los usuarios que lo pidan, elaboró una maravilla de hilo en el que aglutinaba una serie de queries, variables y códigos útiles para WordPress, muy interesantes en multitud de ocasiones.
Ciertamente la recopilación que hizo merecería estar en la Biblia de WordPress, pero entretanto merece un puesto de honor en Ayuda WordPress, y aquí lo tenemos para disfrutarlo, para que lo agreguéis a vuestros favoritos y lo uséis para mejorar vuestro blog.
Aquí tienes esta maravilla de recopilación …
“Quiero mostrar sólo los post de la tal o cuál categoría”
Para eso, tenés que hacer una custom query justo antes del Loop, así:
<?php query_posts("cat=1"); ?> <?php if (have_posts()) : ?> //acá empieza el Loop <?php while (have_posts()) : the_post(); ?>
Agregando: <?php query_posts(“cat=1″); ?>, sobre el infame loop.
“Pero, ¿qué es el numerito ese?, yo a mís categorías les pongo nombre.”
Bien, también se puede hacer una query por nombre de categoría, sino te copa la onda ID.
<?php query_posts('category_name=nombredelacat') ?>
“Aha, que lindo. Pero en realidad, lo que yo quiero es mostrar todos los posts en la página principal, pero sólo los posts de la categoría A en la página A.”
Bueno, eso lo hacés con plantillas de página.
“¿Y, eso?”
Bueno, como ya saben, WordPress trabaja con páginas.Lo que puedes hacer para que se muestren sólo los posts de la categoría “A” en la página “Categoría A”, es asignar a esta página un plantilla que tenga el código del index.php, con la llamada a los posts, pero con una query como las de arriba para que sólo se vea tal o cual categoría.
Para crear una plantilla de página tienes que crear un archivo.php, con un comentario arriba del todo. Supongamos que queremos crear la pagina “Categoría A”, abrimos nuestro editor de texto/código de confianza, y escribimos:
<?php /* Template Name: Categoría A */ ?>
Luego, debajo, pegamos el código de index.php, igual, o con alguna modificación a gusto. Luego, le agregamos arriba del loop, la query a la categoría:
<?php query_posts('category_name=nombredelacat') ?>
y lo guardamos, como, por ejemplo, categoria-a.php. Después, lo subimos a la carpeta de nuestro theme “public_html/wp-content/themes/tu-theme/“
Una vez hecho esto, nos metemos en la administración, y le damos a “Agregar Página/Add page“. Agregamos nuestra Página “Categoría A”, y en la sección “atributos” que en WP 2.7 esta a la izquierda, debajo de “Publicar“, selecionamos nuestra plantilla de página del menu desplegable.
Y listo, tenemos una página especial que publica sólo los posts de una categoría.
Como se imaginarán, este método se puede usar para cualquier código especial que queramos en una página, sólo los post de tal categoría, tal autor, sólo los posts de una edad determinada, una página sin sidebar, una página con header o footer especial, lo que sea.
“Quiero sólo los posts de tal o cual author”
<?php query_posts("author=1"); ?>
o, por el nombre:
<?php query_posts("author_name=Nombre"); ?>
“Quiero un header diferente para páginas diferentes.”
Eso lo podés hacer con algunos bellos, bellos condicionales:
<?php if (is_page('contacto') { <?php include (TEMPLATEPATH . '/headercontacto.php'); ?> } elseif (is_page('foro') { <?php include (TEMPLATEPATH . '/headerforo.php'); ?> } else { <?php get_header(); ?> } ?>
Así, si es la página llamada “contacto” se va a cargar el header especial para contacto, que puede tener una diferente imagen, un diferente código, etc, etc.
También, otra opción es crear, como arriba, un template especial para cada página. Además, este método también es bueno para utilizar en lugar de la plantilla de página para ver posts en cierta categoría.
Además, este mismo código se puede usar para categorías usando is_category en lugar de is_page.
“Quiero mostrar sólo los posts de hoy”
<?php
$latest = $wpdb->get_var(“SELECT post_date FROM $wpdb->posts WHERE post_status = ‘publish’ ORDER BY post_date DESC LIMIT 1″);
$latest = str_replace(‘-’, ”, substr($latest, 0, 10));
// echo $latest;
query_posts(‘m=’ . $latest . ‘&showposts=-1′);
$wp_query->is_archive = false; $wp_query->is_home = true;
?>
Esto debería traer los posts del ultimo día donde hubo uno o más posts. Así no te quedas con un blog en blanco si a las 12:00 no posteas nada.
O, también, si, por ejemplo, tenés un blog de fiestas y queres una sección: “Fiestas Hoy”, podés usar algo así:
<?php $dia = date(‘d’); ?>
<?php query_posts(“cat=1&day=$hoy&order=ASC”); ?>
Este código te traerá sólo los posts de hoy, y le podemos agregar un código si no hay nada:
<?php endwhile; else: ?> <?php _e('No hay fiestas hoy, mirá una película y deja de enfiestarte.'); ?> <?php endif; ?>
“Quiero que mi primer post se vea diferente”
Esto es poco php, y más magia de estilos.
En general, y esto depende de tu theme, seguramente tenés un <div> para los posts, algo como:
<div class=”post”>…</div> o <div class=”content”>…</div>, etc.
Lo que hay que hacer es que al primer post se le aplique un estilo diferente, como:
<div class=”post primero”>…</div>
.firstpost{
laspropiedadesquemástegusten;
}
Recordamos el Loop, ¿no?:
<?php if ( have_posts() ) : ?> <?php while( have_posts() ): the_post(); ?>
Arriba, le ponemos algo así:
<?php $claseprimero = 'primero'; ?>
o sea, definimos la var $claseprimero como ‘primero’. Despues, buscamos el <div> que se aplica a nuestros posts, supongamos:
<div class=”post”>
y lo cambiamos a <div class="post <?php echo $claseprimero; ?>">
y luego, justo debajo, agregamos
<?php $claseprimero = ""; ?>
Entonces, para el primer post, $claseprimero devuelve ‘primero’, pero para los demas, está vació, entonces quedan con el div cómun, sin ningún agregado.
Otra opcción será implementar un doble loop, con un loop especial para el primer post, pero esta opción es menos texto.
“Quiero colores alternados en mis posts, comentarios, etc.”
Bien. De nuevo, arriba de nuestro amigo el Loop, vamos a definir una variablecita:
<?php $par_o_impar = ‘impar’; ?>
Luego, buscamos el div aplicado a nuestros posts (o comentarios), y lo cambiamos por:
<div class="post <?php echo $par_o_impar; ?>">
y una vez convertido a html por tu servidor, queda como:
<div class=”post impar”>
Justo debajo, le agregamos:
<?php $par_o_impar = ('impar'==$par_o_impart) ? 'par' : 'impar'; ?>
Así, para el primer post o comentario la clase es ‘post impar’, y para los demás, va cambiando. Después, lo único que hay que haces es definir las clases .par e .impar para que sean diferentes.
por ejemplo:
.par {
background: #fff;.impar {
background: #000;
}
“Quiero mostrar el contenido/autor/fecha/hora/comentarios de mis posts”, o, alternativamente “No quiero mostrar el contenido/autor/fecha/hora/comentarios de mis posts”
Estas no son queries, sino funciones de WordPress, pero a veces pasa que queremos agregar un dato a nuestro “Archivo”, o sacarlo de nuestro index, así que paso las funciones para llamar a:
el contenido:
<?php the_content(); ?>
el título:
<?php the_title(); ?>
el author:
<?php the_author; ?>
la fecha:
<?php the_time('F jS, Y'); ?>
los comentarios:
<?php comments_popup_link('Sin comentarios »', '1 Comentario »', '% Comentarios »'); ?>
las categorías (dividas con cóma):
<?php the_category(', '); ?>
las tags (divididas con coma):
<?php the_tags(’Tags: ‘, ‘, ‘, ‘<br />’); ?>
el extracto:
<?php the_excerpt(); ?>
el header:
<?php get_header(); ?>
el sidebar:
<?php get_sidebar(); ?>
el footer:
<?php get_footer(); ?>
La navegación:
<?php posts_nav_link('','','� Anteriores') ?> <?php posts_nav_link('','Posteriores �','') ?>
Seguro me olvido de unos cuantos, pero la idea está, en general, son muy claros los muchachos de WP.
“Quiero mostrar en mis archivos el extracto si hay muchos posts, o el post completo si hay pocos.”
Hay que decirle a wordpress que cuente. En este ejemplo, se ve el extracto si hay más de dos posts, pero eso lo podes cambiar a tu gusto.
<?php if (have_posts()) : ?> <?php if ( ($wp_query->post_count) > 2) : ?> //aca modificas el numero de posts máximo para mostrar completo <?php while (have_posts()) : the_post(); ?> <!-- Aca va el codigo para titulo, author, lo que tenga tu theme--> <?php the_excerpt() ?> <!-- Meta, comentarios, etc--> <?php endwhile; ?> <?php else : ?> <?php while (have_posts()) : the_post(); ?> <!-- blahblahblah--> <?php the_content() ?> <!--blahblahblah--> <?php endwhile; ?> <?php endif; ?> <?php else : ?> <!-- Aqui tu mensaje de "no hay posts", etc.--> <?php endif; ?>
“Quiero posts aleatorios”
Las queries de wp son lo mejor que hay, no? De nuevo, arriba del sufrido loop:
<?php query_posts('orderby=rand') ?>
“Quiero agregar un custom field “A” a mis posts, y que se muestre o se use como vinculo del título o baile tap, etc.”
Bueno, lo de bailar tap te lo debo, a menos que tu custom field sea para un .gif bailador de tap.
Primero, lo que tenemos que hacer es asignar una key y un valor a nuestro custom field. Supongamos, por ejemplo, que tenemos un blog sobre arquitectura.
Queremos que todos nuestros posts incluyan la informacion:
Arquitecto: Nombre del Arquitecto.
Y claro, esto lo podemos escribir. Pero tambien queremos que esto sea un Heading 3, que este justo debajo del título, y que sea un vínculo a nuestra página “Arquitectos”, donde detallamos los sitios personales de los arquitectos tratados.
Bueno, esto (o alguna variación a este ejemplo, como el uso que hacen muchas plantillas de los campos personalizados para thumbnails) es mucho menos tedioso con los amables Custom Fields
Lo primero que hacemos, es ir a Escribir Post y buscamos, debajo del todo, la casilla de “Agregar Campo Personalizado“.
Ahí, agregamos un campo de nombre “Arquitecto” y de valor “Nombre del Arquitecto.” Le damos a “Agregar campo Personalizado” y listo, el campo ya anda por ahí, en la base de datos.
Ahora, lo que necesitamos hacer es que nuestra plantilla use ese campo personalizado. En el ejemplo, asumo que lo queremos mostrar en la página principal, pero lo mismo vale para los archivos, para el post sólo, etc.
Abrimos nuestro archivo index.php. Como queremos mostrar el nombre del Arquitecto debajo del título, entonces buscamos la etiqueta
<?php the_title(); ?>
Justo debajo, agregamos:
<?php $key="Arquitecto"; echo get_post_meta($post->ID, $key, true); ?>
Pero también, queriamos que el nombre del arquitecto fuera un Heading 3. Entonces, cambiamos por:
<h3><?php $key="thumbnail"; echo get_post_meta($post->ID, $key, true); ?></h3>
Y, también queríamos que el nombre del arquitecto fuera un link a nuestra página “Arquitectos”, entonces, lo cambiamos por:
<h3><a href="http://arquitectura-blog.com/arquitectos/" title="Arquitectos" rel="nofollow"><?php $key="Arquitecto"; echo get_post_meta($post->ID, $key, true); ?></a></h3>
Y presto, custom field en nuestra página de inicio.
En fin, eso es todo lo que se me ocurre ahora, espero contribuciones y correcciones. Saludos, y Happy Blogging!.















29 comentarios en “Queries, variables y códigos útiles para WordPress”
Información Bitacoras.com…
Si lo deseas, puedes hacer click para valorar este post en Bitacoras.com. Gracias….
Muy útil, te puedes pasar horas buscando este tipo de cosas. Gracias!
Son muy buenos códigos, tods útiles. De verdad que le agradezco mucho a Mno4K, ya que gracias a el post que publicó en el foro, aprendí como hacer algunas cosas que necesitaba, más encima es una maravilla.
Saludos!
Fantástico post, gracias!
Eh, gracias por el puesto de honor! Saludos desde el terrible aburrimiento del bus buenos aires-salta ( gracias a dios por el iphone, xD)
Muy bueno este post, me va a servir para retomar un tema que tenia un pelín atascado. Muchas gracias
[...] Variables y codigos utiles para Wordpressayudawordpress.com/queries-variables-y-codigos-utiles-para-w… por Manuls hace pocos segundos [...]
GRACIAS por la recopilacion de codigo que nos has regalado. Esto supone ahorrar horas de busquedas y pruebas.
[...] http://ayudawordpress.com/queries-varia … wordpress/ – Queries, variables y códigos útiles para WordPress – Recopilación de códigos imprescindibles para personalizar WordPress [...]
Ciao grazie per la guida funziona tutto solo che io dovrei fare una cosa del genere:
In un articolo devono uscire gia scritti PREZZO MOTORE ANNO con i campi personalizzati si puo fare solo se modifico l’articolo ovviamente non posso modificare questi valori perche non vengono visualizzati nell’editor per caso sapresti darmi una dritta?
Fernando
Una pregunta, en mi blog hdehombre.com tengo en la columna derecha un area donde quiero poner videos, mi idea es crear una categoria llamada videos y que en esa seccion me muestre solo el video mas reciente de dicha categoria, tendras algo aqui en AW para leerlo, saludos
Muchas Gracias por estos codigos! son muy utiles de verdad.
Una pregunta, estoy comenzando a crear un blog, y me gustaria q en el indice de este se muestren rectangulos de cada categoria, y q en cada uno de esos rectangulos aparezca una foto miniatura y un pequeño extracto de los dos ultimos post publicados de esa categoria, es posible hacerlo?
Gracias de nuevo!
Si se puede, tienes que modificar la plantilla de tu blog y saber algo (bastante) de CSS. O eso o busca una plantilla que ya tenga esa estructura y la personalizas a tu gusto. Lo de posts por categoría ya lo hemos comentado alguna vez en el blog y el foro, tira del buscador
Hola, gracisa por los codigos, queria saber qeu archivo debo modificar para que solo aparezcan los post de un autor en la portada, osea donde iria el codigo? porque busque y no encontre nada
Hola, en primer lugar felicidades por el blog, te leo a menudo y aprendo mucho.
Tengo un pequeño problemilla con un código y no se muy bien como resolverlo.
Yo de codigo se poquillo.
El caso es que queria ocultar el sidebar en una página, vamos que en esa página el sidebar no se cargase y probe introduciendo el codigo:
en el archivo index.php
y quite la instrucción get_sidebar(); que habia el caso es que no funciona.
la pagina que quiero ocultar se llama foro.
Un saludo, y gracias ya de antemano.
error
uyss no ha salido el codigo
a ver si ahora sale
?php if (!is_page(‘FORO’)) {
get_sidebar();
} ?
le he quitado los signos del principio y del final
Hola…
Probe todos los codes para tenerlos en mi libreria, funcionaron todos excepto el de los post diarios, no se si era problema mio, alguna coma o signo o simplemente que no funciona. Alguien ha visto esta misma funcionalidad en otro codigo?
Saludos.
Бесплатный просмотр видео онлайн, с возможностью загрузки.
Yo solo quiero sacar el nombre de la pagina inicio por el que se me antoja, pero no encuentro como, me puedes ayudar por favor, llevo 23 horas leyendo tu blog y no encontré la solucion.
este tuto rulea aprendi hacer cosas chidas jeje que estoy integrando a mis blogs
una duda acabo de instalar el codigo “Aha, que lindo. Pero en realidad, lo que yo quiero es mostrar todos los posts en la página principal, pero sólo los posts de la categoría A en la página A.” pero me muestra solo 6 post (el maximo que se puede ver en mi web) pero al darle ver entradas previas de nuevo solo me muestra los ultimos 6 por que sera esto
Sólo quería dar las gracias por tus posts sobre Wordpress. La verdad es que este en concreto me ha sido muy útil para implementar ciertas utilidades en mis blogs. Muchas gracias.
[...] bloggers que desean ampliar las posibilidades de su blog. Recientemente me pasé por el blog de Ayuda Wordpress y con todo lo que aprendí pude poner en marcha varios proyectos que tenía parados. Uno de ellos [...]
Muchas gracias por la recopilación, se agradecen estas iniciativas de compartir conocimiento.
saludos desde Viña del Mar, Chile
Y como se puede hacer para mostrar la cantidad de posts de un autor,
Por Ejemplo: Maria tiene (45) posteos , Juan tiene (12) posteos.?
No encuentro la manera, la busque por todos lados, solo uno que otro plugin lo hace , pero no quiero hacerlo con un plugin, quiero mostrarlo en una parte de mi tema.
Acabo de contestarte en el foro
Excelente artículo, pero me queda una pregunta:
¿Es lo mismo esto?
$key=”Arquitecto”; echo get_post_meta($post->ID, $key, true)
¿Que esto?
echo get_post_meta($post->ID, “Arquitecto”, true)
Porque yo lo hice de la segunda manera funcionó, pero ahora estoy en duda.
Muchas Gracias
Escribe un Comentario
Comentarios adicionales gracias BackType
BuddyPress 1.2 está prácticamente lista para lanzarse salvo que las pruebas de los usuarios digan lo contrario. Ya puedes descargarla y empezar a comprobarla (enlace al svn). En esta nueva versión se han cerrado más de 125 tickets desde la última beta.
[#3]
Ya está disponible WordPress MU 2.9.1 y José Conti me avisa que en unas horas tendrá lista la traducción para poder tener actualizado y listo tu sitio multiusuario.
[#6]
¿Sabías que Kubrick, el tema que va a ser sustituido en 2010 lo creó un desarrollador danés?. Toda la historia de este tema, ya mítico, la tienes en este artículo (traducido con Google).
[#26]
Último mensaje de: Pedro Raul
En el foro: General WordPress.org
Último mensaje de: alpikat
En el foro: General WordPress.org
Último mensaje de: Javier
En el foro: Plugins
Último mensaje de: francescorusso
En el foro: SEO - SEM
Último mensaje de: Em4-R
En el foro: Themes y Diseño
Acceder