Queries, variables y códigos útiles para WordPress

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.

biblia-wordpress-neon

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>
que definirás en tu .css escribiéndole 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 class=»post»>

y lo cambiamos a <div class="post <?php echo $claseprimero; ?>">

entonces, quedará como <div class=»post primero»>

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!.

VALORA Y COMPARTE ESTE ARTÍCULO PARA MEJORAR LA CALIDAD DEL BLOG…
(6 votos, promedio: 4.7)

¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!

AVISO: Esta publicación es de hace 3 años o más. Si es un código o un plugin podría no funcionar en las últimas versiones de WordPress, y si es una noticia podría estar ya obsoleta. Luego no digas que no te hemos avisado.

38 comentarios en “Queries, variables y códigos útiles para WordPress”

  1. Pingback: Bitacoras.com

  2. 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!

  3. Eh, gracias por el puesto de honor! Saludos desde el terrible aburrimiento del bus buenos aires-salta ( gracias a dios por el iphone, xD)

  4. Pingback: Variables y codigos utiles para Wordpress

  5. Fonte (21 comentario

    GRACIAS por la recopilacion de codigo que nos has regalado. Esto supone ahorrar horas de busquedas y pruebas.

  6. Pingback: Los mejores posts de la semana IV | Verdadera Seduccion

  7. 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?

  8. 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

  9. 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!

    1. 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 😉

  10. 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

  11. 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.

  12. 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

  13. 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.

  14. 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.

  15. 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

  16. Pingback: Campos Personalizados. | Wordpress

  17. 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.

  18. Muchas gracias por la recopilación, se agradecen estas iniciativas de compartir conocimiento.

    saludos desde Viña del Mar, Chile

  19. 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.

  20. 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

  21. 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….

  22. 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!!!

  23. 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.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

 

Ir arriba Ir al contenido