Las etiquetas condicionales de wordpress

Introducción

Las etiquetas condicionales se utilizan en los archivos de plantilla para cambiar qué contenido se muestra y cómo dependiendo de las condiciones que tenga la página. Por ejemplo, es posible que queramos mostrar un pequeño texto encima de los posts, pero sólol en la página principal del blog. Con la etiqueta condicional is_home() es fácil conseguirlo.

Nota: este tema está muy relacionado con la  jerarquía de plantillas.

Las condiciones para…

Todas las etiquetas condicionales comprueban que se dan ciertas condiciones, y devuelven TRUE o FALSE. Ahora veremos en qué condiciones es posible que varias etiquetas devuelvan TRUE is listed below. También explicamos qué etiquetas pueden aceptar parámetros.

La página principal

is_home()

Cuando se está mostrando la página principal del blog. (WordPress 2.1 maneja esta función de forma distinta que versiones anteriores de wp . ver static Front Page.) <

Nota: Si seleccionas una página estática como tu página de inicio (ver el punto siguiente), esta etiqueta se aplicará a tu página de posts.

La página de inicio

is_front_page()

Cuando se muestra la página principal, ya sea los posts o una página (Page). Devuelve TRUE cuando se muestra la página principal del blog y

  1. ‘Opciones->Lectura->Página inicial’ está configurado pra “Tus últimas entradas”,
  2. o cuando when ‘Opciones->Lectura->Página inicial’ está como  ” página estática ” y el valor de la  “página de inicio” es la que se está mostrando en ese momento  Nota: esta etiqueta se añadió en la Versión 2.5.

Los paneles de administración

is_admin()
Cuando se muestra el tablero o los paneles de administración.

Una página de post individual

is_single()
Cuando se muestra una página con un post individual.
is_single(’17’)
Cuando se muestra el post 17  de forma individual.
is_single(‘Irish Stew’)
Cuando se está mostrando el post con el título “Irish Stew” en un post individual.
is_single(‘beef-stew’)
Cuando un post con la etiqueta (Post Slug) “beef-stew” se muestra como un post individual.
is_single(array(17,’beef-stew’,’Irish Stew’))
Devuelve true cuando el post individual que se muestra tiene el id 17 o el post_name is “beef-stew”, o  post_title es “Irish Stew”. Nota: la posibilidad del array se añadió en la versión Version 2.5.

Comrpbando sub-Páginas

Todavía no hay ninguna función  is_subpage() pero podemos comprobarlo con una poco de código

<?php
// Get $post if you're inside a function
global $post;

if (is_page() && $post->post_parent ) {
	// This is a subpage
} else {
	// This is not a subpage
}
?>

Si necesitas comprobar si estás en una página concreta o en una subpágina de esta (por ejemplo para mostrar una banner distinto dependiendo de en qué página esté el usuario, averigua el ID de la página-madre y luego utiliza un código cómo este:

<?php

if 	(is_page(about) || $post->post_parent=="2") {
	$bannerimg="home.jpg";
} elseif (is_page(learning) || $post->post_parent=="56") {
	$bannerimg="teaching.jpg";
} elseif (is_page(admissions) || $post->post_parent=="15") {
	$bannerimg="admissions.jpg";
} else {
	$bannerimg="home.jpg" ; // Fall-through
}	

?>

Es una plantilla de página (page)

Desde la  Versión 2.5 esta función te permite averiguar si estás o no en una plantilla de página o si estás usando una plantilla de página específica.

is_page_template()
¿ Se está utilizando una plantilla de página ?
is_page_template(‘about.php’)
¿Se está usando la plantilla de página (Page Template)  ‘about’? Ten en cuenta, que al contrario que en otras etiquetas condicionales, si quieres especificar una plantilla de página específica, tienes que usar el nombre del archivo como about.php o mi_plantilla_de_pagina.php.

Una página de categoría

is_category()
Cuando se está mostrando una página de categoría.
is_category(‘9’)
Cuando se esté mostrando una página con los posts de la categoría  9.
is_category(‘Stinky Cheeses’)
Cuando se esté mostrando una página con los posts de la categoría  “Stinky Cheeses”
is_category(‘blue-cheese’)
Cuando se esté mostrando una página con los posts de la categoría  (Category Slug) “blue-cheese”
is_category(array(9,’blue-cheese’,’Stinky Cheeses’))
Devuelve true cuando se esté mostrando una página con los posts de la categoría  con _ID 9, o slug “blue-cheese”, o name “Stinky Cheeses”. Nota: El array es posible desde la Versión 2.5.
in_category(‘5’)
Devuelve true si el post en cuestión pertenece a la categoría 5. Más información

Nota: Atención a la ortografía, entre “is” y “in” hay una gran diferencia.

ver también is_archive() y Category Templates.

Una página de etiquetas

is_tag()
Cuando se muestra el archivo de los posts con una determinada etiqueta.
is_tag(‘mild’)
Cuando se muestra el archivo de los posts con la etiqueta ‘mild’.
is_tag(array(‘sharp’,’mild’,’extreme’))
Devuelve true cuando se muestra el archivo de las etiquetas  “sharp”, “mild”, o “extreme”. Nota: los arrays se añadieron en la  Versión 2.5.
has_tag()
Si el post que se está mostrando tiene una etiqueta. Tiene que usarse dentro del bucle. Nota: has_tag se añadió en la versión Version 2.6.
has_tag(‘mild’)
Si el post que se está mostrando tiene la etiqueta ‘mild’.
has_tag(array(‘sharp’,’mild’,’extreme’))
Si el post que se está mostrando tiene cualquiera de las etiquetas del array.

Ver también is_archive() y Tag Templates.

Una página de autor

is_author()
Cuando se muestra cualquier página de un autor.
is_author(‘4’)
Cuando se muestra un archivo de las páginas del autor con el ID 4.
is_author(‘Vivian’)
Cuando se muestra un archivo de las páginas del autor con el alias “Vivian” .
is_author(‘john-jones’)
Cuando se muestra un archivo de las páginas del autor con el nombre “john-jones” .
is_author(array(4,’john-jones’,’Vivian’))
Cuando se muestra un archivo de las páginas bien con el id de usuario ID 4, ocon  user_nicename “john-jones”, o alias“Vivian”. Nota: desde la  Versión 2.5.

Ver también is_archive() y Author Templates.

Páginas de archivo cronológico

is_date()
Al mostrar un archivo cronológico basado en cualquier tipo de fecha (mensual, anual, diario o por hora)
is_year()
Al mostrar un archivo cronológico anual.
is_month()
Al mostrar un archivo cronológico mensual.
is_day()
Al mostrar un archivo cronológico diario.
is_time()
Al mostrar un archivo cronológico horario.

ver también  is_archive().

Una página de archivo

is_archive()
Cuando se muestra cualquier tipo de archivo: Categoría, etiqueta, autor o fecha son tipos de páginas de archivo.

Una página de búsqueda

is_search()
Cuando se muestra una página con resultados de búsqueda.

Página no encontrada 404

is_404()
Cuando se muestra una página tras un error  “HTTP 404: Not Found”.

Una página “paginada”

is_paged()
Cuando se trata de una página que está ‘paginada’, se refiere a vistas de archivo o a la página principal que se ve en varias no se refiere a una entrada o a una página (Page)  cuyo contenido se haya dividido en varias páginas utilizando QuickTag <!--nextpage--> .

Un archivo adjunto

is_attachment()
Cuando se muestra un documento adjunto a una entrada o página Page . Un archivo adjunto es una imagen u otro archivo que se ha subido con la utilidad para subir archivos del editor de wordpress. Los archivos adjuntos pueden mostrarse en su propia ‘página’ plantilla. Para más información, consultar Using Image and File Attachments.

Sindicación

is_feed()
Cuando el sitio solicitado es una the  Syndication. Esta etiqueta no suelen utilizarla los usuarios, la utiliza internamente wordpress y los desarrolladores de plugins.

Trackbacks

is_trackback()
Cuando el sitio solicitado el el gancho de WordPress a su trackback.  Esta etiqueta la utilizan wordpress internamente así como los desarrolladores de plugins.

Ejemplos que funcionan

Aquí hay algunos ejemplos que funcionan para demostrar el funcionamiento de estas etiquetas condicionales.

En un post individual

Este ejemplo muestra cómo utilizar la función is_single() para mostrar algo concreto sólo cuando se trata de una página de post individualdisplay

if (is_single())
{
     echo 'This is just one of many fabulous entries in the ' . single_cat_title() . ' category!';
}

Diferencias basadas en la fecha

Vamos a distinguir por colores los posts de años distintos en el caso de que alguien navegue por fechas:

<?php
// this starts The Loop
if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<h2 id="post-<?php the_ID(); ?>">
<a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title(); ?>">
<?php the_title(); ?></a></h2>
<small><?php the_time('F jS, Y') ?> <!-- by <?php the_author() ?> --></small>

<?php
// are we showing a date-based archive?
if (is_date())
{
     if (date('Y') != get_the_date('Y'))
     {
          // this post was written in a previous year
          // so let's style the content using the "oldentry" class
          echo '<div class="oldentry">';
     } else {
          echo '<div class="entry">';
     }
} else {
     echo '<div class="entry">';
}
the_content('Read the rest of this entry »');
?>
</div>

Contenido variable del menú lateral

Este ejemplo mostrará contenido diferente en el menú lateral dependiendo de qué página esté viendo el usuario.

<!-- begin sidebar -->
<div id="sidebar">
<?php
// let's generate info appropriate to the page being displayed
if (is_home()) {
        // we're on the home page, so let's show a list of all top-level categories
        echo "<ul>";
        wp_list_cats('optionall=0&sort_column=name&list=1&children=0');
        echo "</ul>";
} elseif (is_category()) {
        // we're looking at a single category view, so let's show _all_ the categories
         echo "<ul>";
        wp_list_cats('optionall=1&sort_column=name&list=1&children=1&hierarchical=1');
        echo "</ul>";
} elseif (is_single()) {
        // we're looking at a single page, so let's not show anything in the sidebar
} elseif (is_page()) {
        // we're looking at a static page.  Which one?
        if (is_page('About')) {
             // our about page.
             echo "<p>This is my about page!</p>";
        } elseif (is_page('Colophon')) {
             echo "<p>This is my colophon page, running on WordPress " . bloginfo('version') . "</p>";
        } else {
              // catch-all for other pages
              echo "<p>Vote for Pedro!</p>";
        }
} else {
        // catch-all for everything else (archives, searches, 404s, etc)
        echo "<p>Pedro offers you his protection.</p>";
} // That's all, folks!
?>
<form id="searchform" method="get" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<div>
<input type="text" name="s" id="s" size="15" />
<input type="submit" value="<?php _e('Search'); ?>" />
</div>
</form>

</div>
<!-- end sidebar -->

Una página 404 útil

Una página de Error: página no encontrada (404) puede resultar intimidatoria y poco útil. Utilizando wordpress podemos construir una página 404 que resulte útil a los usuarios y a también a uno mismo, si hacemos que nos mande un email cada vez que un usuario pulse en un enlace que nos lleve a una página no existente.

<p>You
<?php
#some variables for the script to use
#if you have some reason to change these, do.  but wordpress can handle it
$adminemail = get_bloginfo('admin_email'); #the administrator email address, according to wordpress
$website = get_bloginfo('url'); #gets your blog's url from wordpress
$websitename = get_bloginfo('name'); #sets the blog's name, according to wordpress

  if (!isset($_SERVER['HTTP_REFERER'])) {
    #politely blames the user for all the problems they caused
        echo "tried going to "; #starts assembling an output paragraph
	$casemessage = "All is not lost!";
  } elseif (isset($_SERVER['HTTP_REFERER'])) {
    #this will help the user find what they want, and email me of a bad link
	echo "clicked a link to"; #now the message says You clicked a link to...
        #setup a message to be sent to me
	$failuremess = "A user tried to go to $website"
        .$_SERVER['REQUEST_URI']." and received a 404 (page not found) error. ";
	$failuremess .= "It wasn't their fault, so try fixing it.
        They came from ".$_SERVER['HTTP_REFERER'];
	mail($adminemail, "Bad Link To ".$_SERVER['REQUEST_URI'],
        $failuremess, "From: $websitename <noreply@$website>"); #email you about problem
	$casemessage = "An administrator has been emailed
        about this problem, too.";#set a friendly message
  }
  echo " ".$website.$_SERVER['REQUEST_URI']; ?>
and it doesn't exist. <?php echo $casemessage; ?>  You can click back
and try again or search for what you're looking for:
  <?php include(TEMPLATEPATH . "/searchform.php"); ?>
</p>

Nota: Esto es una traducción del artículo conditional Tags en el codex de WordPress que he hecho para ver si consigo enterarme de algo.

1 Comment

Filed under Cómo funciona wordpress

One response to “Las etiquetas condicionales de wordpress

  1. Pingback: Actividades para después de la segunda sesión | Curso de WordPress 2012

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s