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 …
Índice de contenidos
«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!.
¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!
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
GRACIAS por la recopilacion de codigo que nos has regalado. Esto supone ahorrar horas de busquedas y pruebas.
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.
Бесплатный просмотр видео онлайн, с возможностью загрузки.
di que siiiiiiii
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.
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
hola que tal podrían hacer un tuto mas explicativo sobre
“Quiero que mi primer post se vea diferente”
no entiendo bien
Primero que todo gracias por los consejos, bueno mi consulta como hacer para que cuando ingresen a una categoria en el sidebar se muestren los titulos de articulos de dicha categoria….
necesito ayuda para mostrar contenido y subir imagen para una pagina
Muy bueno el post!
tengo una duda, para cambiar los header, donde debo inscrustar el codigo que presentan en el post?
<?php
if (is_page('?page_id=2') {
}
elseif (is_page('foro') {
}
else {
}
?>
Saludos!!!
se te agradece, muy buena informacion!!!!
Gracias. justo tenia serias dudas con el tema de categorías y esto fue gran utilidad
excelente tio. tenia tiempo buscando sobre como publicar artículos de un autor en particular.
Saludos, si quiero hacer una consulta a una base de datos, para cargar un campo de una tabla a un SELECT. esa parte la hago sin problema. AHORA quiero que se realice la consulta para cargar el SELECT dependiendo el ID del POST en cual esta.