Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. WordPress

Por Qué No Deberías Programar URLs en Temas o Plugins—Funciones de WordPress a Usar en Reemplazo

by
Difficulty:BeginnerLength:MediumLanguages:

Spanish (Español) translation by Nadia Castelli (you can also view the original English article)

Cuando estás desarrollando un tema o plugin, frecuentemente precisarás incluir una URL en tu código. Por ejemplo, en un plugin podrías necesitar un link a una hoja de estilos incluida en el mismo, mientras que en un tema probablemente quieras programar la URL del sitio en el header.

Puede ser tentador el simple hecho de escribir la URL de la misma manera que lo harías en un sitio estático, pero es una mala idea. En este tutorial explicaré por qué no deberías hacer esto—y te mostraré las funciones que puedes usar para crear URLs dinámicamente.

Por Qué No Deberías Programar URLs en Tus Temas y Plugins

Comencemos por los temas. Si estás desarrollando un tema para su uso en un sitio específico, agregar su dominio en alguna parte de los archivos del tema puede no parecer demasiado dañino, pero existen algunos riesgos y desventajas definidos:

  • Si alguna vez decides cambiar el nombre de dominio del sitio, tendrás que editar todas las URLs que hayas hard-codeado.
  • Si estás trabajando en un sitio de desarrollo que migrarás a un servidor productivo, tendrás que cambiar todas las URLs que hayas hard-codeado.
  • Si decides utilizar el tema en otro sitio, tendrás que editar todas esas URLs.
  • Si decides publicar el tema o permitir su uso a otros desarrolladores, se romperá.
  • Si utilizas el tema como base para otro tema que desarrolles para otro sitio, tendrás que editar todas esas URLs.
  • Si tu sitio está en un subdirectorio del directorio raíz de tu dominio, pero le has indicado a WordPress que utilice el directorio raíz para la URL, tus URLs hard-codeadas pueden estar apuntando al lugar incorrecto.
  • Si te olvidas de hacer algunas de las cosas anteriores, tu sitio devolverá errores 404, y los links a recursos como imágenes y hojas de estilo no funcionarán.

Entonces, ¡no lo hagas!

¿Qué hay acerca de los plugins? Bueno, esto es aún más riesgoso. No es poco común desarrollar un tema para un único sitio, pero la mayoría de los plugins se utilizarán en múltiples sitios. Es poco probable que alguna vez hard-codees una URL completa en un plugin, pero puedes estar tentado a utilizar una función que devuelva la URL del sitio, y luego programar dicha ruta en el directorio del plugin. De nuevo, esto es riesgoso:

  • Si tu plugin se migra a un directorio diferente (como el directorio de "must-use" plugins), se romperán los links.
  • Si tu plugin se instala en una red Multisitio que corre una versión antigua de WordPress, tus links podrían romperse.
  • Si tu plugin se instala en un sitio que emplea una estructura de directorio diferente a la que has usado en tus URLs, tus links se romperán también.

Esto podría resultar en que tu plugin directamente no funcione.

Entonces, ¿qué hacemos para evitar hard-codear URLs en WordPress?

Funciones a Utilizar en Reemplazo de URLs Hard-Codeadas

Existe una variedad de funciones que se pueden usar para evitar hard-codear URLs en WordPress. Las separaré en cinco categorías:

  • funciones para obtener la página principal del sitio
  • funciones para obtener otros links del front-end (posts, páginas, archivos y adjuntos)
  • funciones para obtener URLs de las pantallas de administrador
  • funciones para obtener URLs de archivos incluidos en los directorios de tu plugin y tu tema
  • funciones para obtener hojas de estilo y scripts

Comencemos por las funciones para obtener y mostrar un link en la página principal.

Obtener la URL Principal

Las siguientes etiquetas genéricas obtendrán o mostrarán la URL principal de tu sitio:

  • bloginfo( 'url' ) muestra la URL principal, como esté especificada en los Ajustes de Lectura del panel de administrador.
  • get_bloginfo( 'url' ) obtiene la URL principal del sitio sin mostrarla.
  • home_url() obtiene la URL principal sin mostrarla: debes utilizar echo esc_url( home_url( '/' ) ); para mostrar la URL principal sin barra al final. Esta lleva dos parámetros opcionales: $path si deseas agregar una dirección a una página específica o agregar una barra al final, y $scheme para especificar el esquema para la URL, como http, https y relative.
  • get_home_url() obtiene la URL para la página principal, y soporta Multisitio: puedes incluir el blog ID como parámetro.
  • site_url() es la URL donde se almacena WordPress, así que si tu instalación de WordPress está en el subdirectorio wordpress, esta obtendrá la URL http://mysite.com/wordpress.
  • get_site_url() obtiene la URL del sitio sin mostrarla. Puede utilizarse con parámetros para mostrar la URL de un sitio en una red Multisitio, agregar una dirección, y usar un esquema específico.
  • network_home_url()es la URL raíz del sitio principal de una red Multisitio, útil si deseas incluir un link al sitio principal en el footer de cada sitio perteneciente a la red, por ejemplo.
  • network_site_url() la URL del sitio principal de una red Multisitio.

Como puedes ver, existen varias etiquetas genéricas diferentes que puedes usar para mostrar la URL. Cuál utilices dependerá de cierto número de factores:

  • ¿Quieres solamente obtener la URL, o también mostrarla?
  • ¿Quieres agregar una dirección a continuación de la URL principal? (Puedes evitar esto en algunos casos, empleando las funciones detalladas en la próxima sección.)
  • ¿Quieres especificar el esquema?
  • ¿Quieres obtener la URL principal o la URL del sitio, en caso que sean diferentes?
  • ¿Quieres obtener la URL de un sitio en una red Multisitio?

Deberías utilizar una de estas funciones en los archivos de tu tema, donde desees insertar un link a la página principal. Por ejemplo, si un logo en la cabecera de tu sitio redirige a la página principal. También puede haber casos donde un plugin necesite obtener o mostrar la URL principal.

Obtener Otras URLs del Front-End

Al igual que la URL principal, alguna vez podrías necesitar mostrar links a otras partes de tu sitio. Esto incluye páginas, posts, adjuntos, y tipos de entrada personalizados. Estas son las funciones que deberías usar:

  • post_permalink() muestra un link a un post, con el ID de post como parámetro.
  • get_page_link() obtiene (pero no muestra) el link a una página, con el ID de página como parámetro.
  • get_permalink() obtiene (pero no muestra) el link a un post o página, usando el ID de post o página como parámetro.
  • get_category_link() obtiene el link al archivo de cierta categoría, usando el ID de categoría como parámetro.
  • get_tag_link() obtiene el link al archivo de cierta etiqueta, con el ID de la misma como parámetro.
  • get_post_type_archive_link() obtiene el link al archivo de cierto tipo de post, empleando el tipo de post como parámetro.
  • get_term_link() obtiene el link a cierta palabra dentro de una taxonomía dada, utilizando la palabra clave y la taxonomía como parámetros.
  • the_attachment_link() muestra el link a un archivo adjunto, utilizando el ID de dicho adjunto como parámetro. También contempla otros parámetros para definir el tamaño de la imagen, y si el link redireccionará al archivo en sí o a la página del adjunto.
  • get_attachment_link() obtiene el link a un adjunto, con el ID del mismo como parámetro.
  • wp_get_attachment_link() también obtiene el link a un adjunto, pero además permite mostrar la imagen si el adjunto lo es, en un tamaño que puedes especificar.
  • get_search_link() obtiene el link a la página de búsqueda. Puedes definir una consulta como parámetro, o dejarlo en blanco, en cuyo caso usará la consulta actual.

Obteniendo URLs del Admin

Si estás creando un plugin o tema con pantallas de preferencias en el admin de WordPress, o estás personalizando las pantallas del admin, podrías querer agregar links hacia las pantallas del administrador. Nuevamente, no deberías hard-codear las URLs, sino utilizar alguna de las siguientes funciones:

  • admin_url() obtiene (pero no muestra) una URL en el panel de admin. Debes incluir la ruta de la URL como parámetro, y también puedes incluir el esquema si es necesario. Entonces, por ejemplo, para mostrar la URL a la pantalla para crear un nuevo post, podría utilizarse echo admin_url( 'post-new.php'  );.
  • get_admin_url() es similar a admin_url() pero soporta redes Multisitio: puedes incluir el ID de blog como parámetro.
  • edit_post_link() muestra un link a la página de edición de un post determinado. Puede ser utilizado dentro del bucle (The Loop) o fuera del mismo, con el ID de post como parámetro.
  • get_edit_post_link() obtiene el link a la pantalla de edición de un post, usando e ID de post como parámetro.

Recuperando Archivos de Tus Carpetas de Plugins y Temas

Así como cuando programas URLs en el front-end o en las pantallas del admin, deberías también escribir las URLs y direcciones correctamente al referirte a archivos almacenados en tus carpetas de plugin o tema.

Para empezar, aquí están las funciones que deberías emplear para archivos de temas:

  • get_stylesheet_directory() obtiene la ruta completa al servidor (no la URL) del directorio del tema activado actualmente. Usa esta función para incluir archivos más que para mostrar links.
  • get_stylesheet_directory_uri() obtiene la URL al tema activado actualmente, sin una barra al final. Utilízalo en archivos de plantilla para recuperar recursos almacenados en tu carpeta de tema: por ejemplo, para mostrar una imagen almacenada en la carpeta de imágenes de tu tema, usa <img src="<?php  echo get_stylesheet_directory_uri(); ?>/images/logo.jpg">.
  • get_bloginfo( 'stylesheet_directory' ) obtiene la URL del tema activado actualmente: utilizar get_stylesheet_directory_uri() es más prolijo.
  • get_template_directory_uri() es similar a get_stylesheet_directory_uri(), pero si estás utilizando un tema hijo, obtiene la URL del tema padre. De manera similar, get_template_directory() trabaja de la misma manera que get_stylesheet_directory(), pero para el tema padre.

También existen funciones para utilizar en archivos de plugin:

  • plugins_url() obtiene la URL absoluta al directorio de plugins (sin barra al final). Contempla dos parámetros opcionales: la ruta a agregar a continuación de la URL, y el plugin para el cual quieres que la URL sea relativa.
  • plugin_dir_url() obtiene la URL para el directorio en que se encuentra cierto archivo (con barra al final), usando dicho archivo como parámetro. Normalmente se emplea __FILE__ como parámetro para denotar el archivo corriente.

A continuación, un ejemplo de cada una de las funciones anteriores. Primero, para obtener la URL de un archivo guardado en el directorio de archivos incluidos perteneciente al plugin actual:

Y para obtener la misma URL usando plugin_dir_url():

Notarás en el segundo ejemplo que debes hacer "echo" de la URL luego de llamar a la función: yo prefiero la primera ya que es más prolija. No olvides que la segunda función retorna una barra al final y la primera no lo hace.

Obteniendo Hojas de Estilo y Scripts

Nunca debes hard-codear links a hojas de estilo y scripts en tus archivos de plantillas o plugins: en reemplazo, utiliza una función y únela al gancho (hook) correcto. Esto evita problemas al mover archivos, asegura que estés utilizando los scripts correctos sin duplicados, y además es más eficiente.

Para llamar a una hoja de estilos, utiliza wp_register_style() y wp_enqueue_style() en una función, y únelas al gancho wp_enqueue_scripts(). La siguiente función haría esto en un plugin: 

Nota que he utilizado __FILE__ arriba, que le indica a WordPress que la ruta a la hoja de estilos es relativa al archivo actual.

Una llamada a un script se realiza de manera similar, pero se usan wp_register_script() y wp_enqueue_script() en la función, y se vinculan al gancho wp_enqueue_scripts. El ejemplo siguiente registra un nuevo script y lo llama:

Si tu script usa otro script que WordPress ya incluye, como jQuery, no necesitas registrarlo, sólo encolarlo, como se muestra:

Lee más acerca del gancho wp_enqueue_scripts en este tutorial acerca de incluir JavaScript y CSS en temas y plugins.

Resumen

Espero haberte convencido de que hard-codear URLs en WordPress es una mala idea: puede conducir a todo tipo de problemas en el futuro, y es mucho menos eficiente. Dependiendo a dónde necesitas redirigir, WordPress provee una función para remplazar cualquier URL hard-codeada, tanto en temas como plugins. Puedes utilizar funciones y etiquetas genéricas para linkear a otras páginas en el front-end, incluyendo la página principal, pantallas en el admin de WordPress, y archivos pertenecientes a tus plantillas o plugins.

¡Sé el primero en conocer las nuevas traducciones–sigue @tutsplus_es en Twitter!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.