¿Por qué no deberías codificar las URL en los temas o complementos de WordPress?

Cuando está desarrollando un tema o un complemento, a menudo encontrará que debe incluir una URL en su código. Por ejemplo, en un complemento es posible que necesite un enlace a una hoja de estilo incluida con el complemento, mientras que en un tema probablemente querrá codificar la URL del sitio en su encabezado.

Puede ser tentador simplemente codificar la URL de la misma manera que lo haría en un sitio estático, pero es una mala idea. En este tutorial, explicaré por qué no debes hacer esto y te mostraré las funciones que puedes usar para crear URL dinámicamente..

¿Por qué no deberías codificar las URL en tus temas y complementos?

Vamos a empezar con los temas. Si está desarrollando un tema para su uso en un sitio específico, puede que no parezca demasiado perjudicial agregar el dominio de ese sitio en los archivos de temas en alguna parte, pero existen algunos riesgos y desventajas definidas:

  • Si alguna vez decide cambiar el nombre de dominio del sitio, tendrá que editar todas las URL que haya codificado..
  • Si está trabajando en un sitio de desarrollo que se trasladará a un servidor en vivo en el inicio, tendrá que cambiar todas las URL que haya codificado..
  • Si decides utilizar el tema en otro sitio, deberás editar todas esas URL.
  • Si decides lanzar el tema al público o dejar que otros desarrolladores lo utilicen, se interrumpirá..
  • Si usa el tema como base para otro tema que desarrolle para otro sitio, tendrá que editar todas las URL.
  • Si su sitio se encuentra en un subdirectorio del directorio raíz de su dominio pero le ha dicho a WordPress que use el directorio raíz para la URL, sus URL codificadas pueden apuntar al lugar equivocado.
  • Si alguna vez se olvida de hacer algo de lo anterior, su sitio obtendrá errores 404 y los enlaces a recursos como imágenes y hojas de estilo no funcionarán..

Así que no lo hagas!

Pero ¿qué pasa con los complementos? Bueno, esto es aún más arriesgado. No es raro desarrollar un tema solo para un sitio, pero la mayoría de los complementos se usarán en varios sitios. Es poco probable que alguna vez codificara en un código una URL completa en un complemento, pero podría tener la tentación de usar una función para obtener la URL del sitio y luego codificar la ruta al directorio del complemento. De nuevo, esto es arriesgado:

  • Si su complemento se mueve a un directorio diferente (como el directorio de uso obligatorio), se romperá cualquier enlace.
  • Si su complemento está instalado en una red de sitios múltiples que ejecuta una versión anterior de WordPress, sus enlaces podrían romperse.
  • Si su complemento se instala en un sitio con una estructura de directorios diferente a la que ha usado para sus URL, nuevamente se romperán sus enlaces..

Esto podría hacer que tu plugin simplemente no funcione en absoluto..

Entonces, ¿qué hace para evitar las URL de codificación rígida en WordPress??

Funciones a usar en lugar de URL codificadas

Hay una variedad de funciones que utiliza para evitar las URL de codificación rígida en WordPress. Los voy a dividir en cinco categorías:

  • Funciones para recuperar la página de inicio del sitio.
  • funciones para recuperar otros enlaces de front-end (incluidas publicaciones, páginas, archivos adjuntos y archivos)
  • Funciones para recuperar URLs para las pantallas de administración.
  • Funciones para recuperar direcciones URL para archivos en sus directorios de plugins y temas
  • Funciones para recuperar hojas de estilo y scripts.

Comencemos con las funciones para recuperar y generar un enlace a la página de inicio..

Obteniendo la URL de la página de inicio

Las siguientes etiquetas de plantillas recuperarán o generarán la URL de la página de inicio de su sitio:

  • bloginfo ('url'): muestra la URL de inicio como se especifica en su configuración de lectura en el administrador.
  • get_bloginfo ('url'): recupera la URL del sitio sin mostrarlo.
  • home_url (): recupera la URL de la página de inicio sin mostrarla: usar echo esc_url (home_url ('/')); para mostrar la URL de inicio con una barra diagonal. Esto toma dos parámetros opcionales: $ camino si desea agregar una ruta a una página específica o agregar una barra inclinada al final, y $ esquema para especificar el esquema de la URL, como http, https y relativo.
  • get_home_url () recupera la URL de la página de inicio y es compatible con Multisite: puede incluir el ID del blog como parámetro.
  • Sitio URL(): la URL donde se almacena WordPress, por lo que si su instalación de WordPress está en el subdirectorio de wordpress, esto recuperará la URL http://misitio.com/wordpress
  • get_site_url (): Recupera la URL del sitio sin mostrarlo. También se puede usar con parámetros para generar la URL de un sitio en una red de sitios múltiples, agregar una ruta y usar un esquema específico.
  • network_home_url (): la URL de inicio del sitio principal en una red multisitio, útil si desea incluir un enlace al sitio principal en el pie de página de cada sitio en la red, por ejemplo.
  • network_site_url (): la URL del sitio para el sitio principal en una red multisitio.

Como puede ver, hay algunas etiquetas diferentes que puede usar para mostrar la URL. Lo que utilices dependerá de varios actores:

  • ¿Quieres simplemente obtener la URL o mostrarla??
  • ¿Desea agregar una ruta después de la URL de inicio? (Puede evitar esto en algunos casos utilizando las funciones en la siguiente sección).
  • ¿Quieres especificar el esquema??
  • ¿Desea obtener la URL de la página de inicio o la URL del sitio, si son diferentes??
  • ¿Desea obtener la URL de un sitio en una red multisitio??

Debe usar uno de estos en sus archivos de plantillas de temas donde desee insertar un enlace a la página de inicio, por ejemplo, si un logotipo en la cabecera de su sitio se vincula a la página de inicio. También puede haber casos en los que un complemento deba buscar o mostrar la URL de la página de inicio..

Obteniendo otras URL de front-end

Además de la URL de la página de inicio, puede haber ocasiones en las que desee codificar enlaces a otras páginas de su sitio. Esto incluirá páginas, publicaciones, archivos adjuntos y tipos de publicaciones personalizadas. Aquí están las funciones que debes usar:

  • post_permalink () genera un enlace a una publicación, con el ID de publicación como su parámetro.
  • get_page_link () recupera (pero no genera) el enlace a una página, con el ID de página como parámetro.
  • get_permalink () obtiene (pero no muestra) el enlace permanente para una publicación o página, con el ID de la publicación o la página como su parámetro.
  • get_category_link () recupera el enlace a un archivo de categoría, con el ID de categoría como su parámetro.
  • get_tag_link () obtiene el enlace a la página de archivo de una etiqueta, con el ID de etiqueta como su parámetro.
  • get_post_type_archive_link () obtiene el enlace al archivo de un tipo de publicación, con el tipo de publicación como su parámetro.
  • get_term_link () recupera el enlace a un término de taxonomía, con el término y la taxonomía como sus parámetros.
  • the_attachment_link () envía el enlace a un archivo adjunto, con el ID del archivo adjunto como primer parámetro. Use otros parámetros para definir el tamaño de la imagen y si el enlace conducirá al archivo en sí o a su página adjunta.
  • get_attachment_link () busca el enlace para un archivo adjunto, con el ID de archivo adjunto como parámetro.
  • wp_get_attachment_link () también obtiene el enlace a un archivo adjunto, pero además le permite mostrar la imagen si el archivo adjunto es una imagen, en el tamaño que especifique.
  • get_search_link () recupera el enlace a la página de búsqueda. Puede definir una consulta como su parámetro, o dejarla en blanco, en cuyo caso usará la consulta actual.

Obteniendo URLs de administrador

Si está creando un complemento o tema con pantallas de configuración en el administrador de WordPress, o si está personalizando las pantallas de administración, es posible que desee agregar enlaces a las pantallas de administración. Nuevamente, no debe codificar sus URL, pero use una de estas etiquetas:

  • admin_url () obtiene (pero no genera) una URL en el administrador. Debe incluir la ruta a la URL como un parámetro y también puede incluir el esquema si es necesario. Así, por ejemplo, para generar la URL de la pantalla para crear una nueva publicación, debería usar echo admin_url ('post-new.php');.
  • get_admin_url () es parecido a admin_url () pero admite redes multisitio: puede incluir el ID del blog como parámetro.
  • edit_post_link () muestra un enlace a la página de edición de una publicación. Se puede utilizar en el bucle o fuera del mismo con el ID de publicación como parámetro.
  • get_edit_post_link () obtiene el enlace a la pantalla de edición de una publicación, con el ID de publicación como su parámetro.

Recuperar archivos en tus plugins y carpetas de temas

Al igual que cuando está codificando las URL en las pantallas front-end o admin, también debe codificar las URL y las rutas correctamente al referirse a los archivos en sus carpetas de temas o complementos. 

Primero, aquí están las funciones que debes usar en los archivos de temas:

  • get_stylesheet_directory () recupera la ruta completa del servidor (no la URL) para el directorio del tema actualmente activado. Use esto para llamar a los archivos de inclusión en lugar de para generar enlaces..
  • get_stylesheet_directory_uri () recupera la URL del tema actualmente activado, sin una barra diagonal final. Úselo en archivos de plantilla para recuperar recursos almacenados en su carpeta de temas: por ejemplo, para mostrar una imagen almacenada en la carpeta de imágenes de su tema, use .
  • get_bloginfo ('stylesheet_directory') recupera la URL para el tema actualmente activado: usando get_stylesheet_directory_uri () es más ordenado.
  • get_template_directory_uri () es parecido a get_stylesheet_directory_uri () pero si está utilizando un tema secundario, recupera la URL del tema principal. similar, get_template_directory () funciona de la misma manera que get_stylesheet_directory () pero para el tema principal.

También hay funciones para usar en archivos de plugin:

  • plugins_url () obtiene la URL absoluta en el directorio de complementos (sin una barra diagonal). Toma dos parámetros opcionales: la ruta para agregar después de la URL y el complemento al que desea que la URL sea relativa.
  • plugin_dir_url () recupera la URL del directorio en el que se encuentra un archivo (con una barra diagonal), con ese archivo como su parámetro. Normalmente usarías __EXPEDIENTE__ como su parámetro para denotar el archivo actual.

Aquí hay un ejemplo de cada uno de los anteriores. En primer lugar, para recuperar la URL de un archivo en el directorio de inclusión del complemento actual:

plugins_url ('includes / myfile.php', __FILE__);

Y para recuperar la misma URL usando plugin_dir_url ():

plugin_dir_url (__FILE__). 'includes / myfile.php';

Tenga en cuenta que con el segundo ejemplo tiene que repetir el camino después de la función: prefiero el primero porque es más limpio. No olvide que el segundo devuelve una barra inclinada y el primero no.

Recuperar hojas de estilo y scripts

Nunca debe codificar los enlaces a hojas de estilo y secuencias de comandos en sus archivos de plantilla o complementos: en su lugar, utilice una función y adjúntela al enlace correcto. Esto evita problemas con los archivos que se mueven, asegura que está usando los scripts correctos sin duplicación y también es más eficiente.

Para llamar a una hoja de estilo, use wp_register_style ()wp_enqueue_style () en una función y engancharlo a la wp_enqueue_scripts gancho. La siguiente función haría esto en un complemento:

Tenga en cuenta que he usado __EXPEDIENTE__ arriba, lo que le dice a WordPress que la ruta a la hoja de estilo es relativa al archivo actual.

Llamar a un script es similar, pero usa wp_register_script () y wp_enqueue_script () en su función, y los une a la wp_enqueue_scripts gancho. El siguiente ejemplo registra un nuevo script y lo llama:

function register_my_scripts () wp_register_script ('my_script', plugins_url ('/js/script.js', __FILE__)); wp_enqueue_script ('my_script');  add_action ('wp_enqueue_scripts', 'register_my_scripts');

Si su script usa un script incluido con WordPress, como jQuery, no necesita registrarlo; simplemente encolarlo de la siguiente manera:

function register_my_scripts () wp_enqueue_script ('my_script', plugins_url ('/js/script.js', __FILE__), 'jquery',, 'true');  add_action ('wp_enqueue_scripts', 'register_my_scripts');

Lea más sobre el wp_enqueue_scripts enganche en este tutorial sobre cómo incluir JavaScript y CSS en tus temas y complementos.

Resumen

Espero haberte convencido de que las URLs de codificación rígida en WordPress son una mala idea: puede dar lugar a todo tipo de problemas en el futuro y es menos eficiente. Según el lugar al que deba enlazar, WordPress proporciona una función para reemplazar cualquier URL codificada, ya sea en sus temas o complementos. Puede usar las etiquetas de funciones y plantillas para vincular a las páginas en el extremo delantero de su sitio, incluida la página de inicio, a las pantallas en el administrador de WordPress y a los archivos en sus plantillas o complementos.