Cualquier widget o menú creado en WordPress se muestra, por defecto, en todas las páginas del sitio web. Es decir, no existe ningún medio propio de la aplicación que permita seleccionar en qué circunstancias y condiciones se ha de mostrar un widget, un área de widgets, un menú o un elemento de menú. Si en un momento dado surge la necesidad de contar con una funcionalidad semejante, no queda otro remedio que utilizar plugins. En el presente artículo analizaremos los que se utilizan en los sitios web del PNTE para añadir funciones condicionales. Sin embargo, antes de hacerlo es necesario explicar los recursos de los que dispone WordPress a la hora de establecer condiciones.
2. Las etiquetas condicionales de WordPress
WordPress posee un auténtico arsenal de «etiquetas condicionales» o conditional tags, mediante las cuales es posible determinar en qué circunstancias debe producirse un determinado comportamiento de la aplicación. No hace falta conocerse al dedillo ese enorme listado de condiciones, pero sí saber que existen y que pueden resultar muy útiles en muchas situaciones y para muchos propósitos diferentes. Ejemplos de este tipo de condiciones, algunos de ellos tomados de este mismo sitio web, pueden ser los siguientes:
1. Que algo ocurra solo si el visitante del sitio está situado en la página principal del sitio web. Para esta circunstancia, y dependiendo de los casos, se puede utilizar una de estas dos etiquetas condicionales:
is_home()
is_front_page()
2. Que algo ocurra solo si el visitante está viendo la entrada denominada «Excursión a Piedramillera»; la etiqueta que permite conseguir este comportamiento es
is_single('excursion-a-piedramillera')
En este sitio web se utiliza este tipo de etiquetas en seis widgets, todos ellos visibles solo en la entrada titulada «Los nuevos widgets de WordPress». Para conseguir tal efecto, se ha añadido a los widgets la siguiente etiqueta condicional:
is_single('212')
El número 212 es el identificador numérico de esa entrada; también se hubiera podido conseguir el mismo efecto con otra etiqueta que utilice el slug de la entrada, en lugar del ID:
is_single('los-nuevos-widgets-de-wordpress')
3. Que algo ocurra si el visitante está leyendo una entrada de la categoría «Sesión 1». Para tal fin, hay que utilizar la siguiente etiqueta:
in_category('sesion-1')
Mediante esta etiqueta se consigue que el widget con el listado de entradas correspondientes a la categoría «Sesión 1» solo se vea cuando el visitante se encuentra en una entrada perteneciente a dicha categoría. Etiquetas condicionales parecidas se utilizan para el mismo propósito con los widgets de listados de entradas de las demás sesiones.
4. Que algo ocurra solo si el visitante se encuentra en la página titulada «Contacto»; en tal caso, la etiqueta condicional es:
is_page('contacto')
5. Que algo ocurra solo si la entrada que se está leyendo contiene la etiqueta «widgets»; la etiqueta que se debe utilizar para tal caso es:
has_tag('widgets')
6. Que algo ocurra solo si el autor del artículo ha sido el usuario con el nombre de usuario «pepeluis»; la etiqueta correspondiente es:
is_author('pepeluis')
7. Que algo ocurra solo cuando el visitante se encuentra en una página de archivo por años, es decir, en cualquier listado de entradas correspondiente a un año de publicación; en este caso, la etiqueta es:
is_year()
8. Que algo ocurra solo si el visitante de la página corresponde a un usuario que ha iniciado sesión (puede ser cualquie usuario, con cualquier rol); en tal caso, la etiqueta condicional es:
is_user_logged_in()
9. Que algo ocurra solo si el usuario que ha iniciado sesión es un usuario con el rol de editor; la etiqueta correspondiente es:
current_user_can('editor')
10. Que algo ocurra solo si el idioma del sitio es el español (en instalaciones multilingües creadas con el plugin WPML); la etiqueta condicional que se debe utilizar en esta situación es:
ICL_LANGUAGE_CODE == 'es'
Las etiquetas condicionales de WordPress se pueden combinar entre sí, a fin de construir condiciones complejas, mediante el uso de los operadores lógicos de PHP. Véanse tres ejemplos:
is_single() || is_page()
Esta condición se cumple cuando el visitante accede a una entrada individual o bien a una página estática.
is_archive() && ! is_category('sesion-2')
Esta condición se cumple cuando el visitante accede a una página de archivo (es decir, un listado de entradas), siempre que NO corresponda a la categoría «Sesión 2».
is_post_type_archive('centro-con-wifi') || is_singular('centro-con-wifi') || is_tax('tipo-de-wifi') || is_tax('servicio')
Esta es una condición particularmente compleja, que se ha definido en el sitio web hipotético WiFi de Centros Educativos, donde se utilizan taxonomías y tipos de contenido personalizados para proporcionar información sobre las nuevas instalaciones WiFi del Departamento de Educación del Gobierno de Navarra. En la cuarta sesión del presente curso trataremos sobre estos conceptos y su aplicación práctica.
3. Widgets y áreas de widgets condicionales
Hay unos cuantos plugins fiables para establecer condiciones aplicables a los widgets de WordPress. De entre todos ellos, el PNTE ha optado por instalar en todos los sitios web el plugin Widget Logic, ya que es el que más flexibilidad y potencia proporciona, a costa, eso sí, de utilizar la sintaxis propia de las etiquetas condicionales de WordPress. El uso del plugin es sencillo: una vez instalado, añade un cuadro a cada uno de los widgets de WordPress, que se puede identificar con la leyenda «Condiciones del widget». Para activarlas, basta con añadir la etiqueta o etiquetas condicionales necesarias, cuyos ejemplos pueden verse en el epígrafe 2.
Durante la segunda sesión del curso, y también tras finalizar esta, como parte de las actividades previstas, los asistentes realizarán un ejercicio de uso del plugin Widget Logic (que ya está instalado en los sitios web de prácticas). Para ello, pueden guiarse por las instrucciones de los dos videotutoriales que mostramos a continuación:
En WordPress no solo es posible utilizar widgets individuales condicionales, sino que se también se pueden definir áreas de widgets completas en función de determinadas condiciones o circunstancias. Esta segunda funcionalidad se puede lograr con otro plugin: el Custom Sidebars. No obstante, en este curso no lo vamos a considerar, ya que el trabajo con áreas de widgets condicionales requiere unas circunstancias excepcionales que normalmente no se dan en los sitios web de los centros.
Como ocurre con los widgets, una instalación estándar de WordPress no permite crear menús o elementos de menú que se muestren en el sitio web en función de circunstancias y condiciones determinadas por los usuarios. Esta funcionalidad solo se puede conseguir si se utilizan los plugins adecuados. En este curso no vamos a profundizar en la materia, pero conviene saber cuáles son los plugins más apropiados para cada uno de los usos posibles:
- Definir varios menús diferentes, que pueden aparecer (o no), en función de las circunstancias. El plugin más recomendable para lograr esta funcionalidad se llama Conditional Menus. Conviene tener en cuenta que su uso puede resultar complicado cuando se quieren establecer muchas condiciones diferentes en un gran número de menús. Se utiliza masivamente en la web del CREENA.
- Establecer condiciones para los elementos de menú, utilizando las etiquetas condicionales de WordPress. El plugin más recomendable para lograr esta funcionalidad se llama Menu Item Visibility Control, y funciona de forma muy parecida a Widget Logic.
- Establecer condiciones para los elementos de menú, de forma que puedan ser visibles o no en función de que el usuario haya iniciado sesión y del rol de dicho usuario. El plugin más recomendable para lograr esta funcionalidad se llama Nav Menu Roles.
Si hay tiempo para ello, durante la segunda sesión del curso se mostrarán algunos ejemplos de uso de todos estos plugins, aunque no se profundizará demasiado en su manejo.
5. Una advertencia final
Conviene utilizar los plugins de widgets y menús condicionales con cuidado. En efecto, si se definen condiciones erróneas o de cumplimiento imposible, o bien si se utilizan a la vez varios plugins que establezcan condiciones contradictorias entre sí, pueden producirse efectos imprevisibles que arruinen el sitio web.