Queries, variables y códigos útiles para WordPress
“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 númerito 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 imágen, un diferente código, etc, etc.
También, otra opcción es crear, como arriba, un template especial para cada página. Además, este metodo también es bueno para utilizar en lugar de la plantilla de página para ver posts en cierta catergorí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 post 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 traera 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>…</div> o <div>…</div>, etc.
Lo que hay que hacer es que al primer post se le aplique un estilo diferente, como:
<div>…</div>
que definirás en tu .css escribiendole un hermoso estilo:
.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>
y lo cambiamos a <div>
entonces, quedará como <div>
y luego, justo debajo, agregamos
<?php $claseprimero = ""; ?>
Entonces, para el primer post, $claseprimero devuelve ‘primero’, pero para los demas, está vació, estonces 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 opcció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>
y una vez convertido a html por tu servidor, queda como:
<div>
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!.
Aclaración: Uso WordPress en inglés, por lo que algunas traducciones pueden no ser exactas a las que tengas en tu WordPress.
Crear firma con imágenes en correos Google Apps Como quitar rel=”nofollow” en los comentarios de WordPress
Super bueno el post muy completo gracias
Gracias siguán publicando felicitaciones buena publicación