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

Cómo incluir y requerir archivos y plantillas en WordPress

by
Read Time:10 minsLanguages:

Spanish (Español) translation by Eva Collados Pascual (you can also view the original English article)

Cuando se trata de PHP, a muchos desarrolladores les encanta el lenguaje, otros muchos lo odian el lenguaje, y muchos desarrolladores generalmente simplemente lo utilizan para llevar a cabo su trabajo.

Por si vale de algo, yo soy de este último grupo. Creo que PHP está bien. Como cualquier cosa, no está exento de problemas, pero disfruto trabajar con él lo suficiente y lo veo como una manera de llevar a cabo el trabajo frente a algún otro lenguaje perteneciente a los tiempos utópicos del desarrollo.

Lo cierto es que algunas de las cosas que los desarrolladores aman de PHP, sus características y flexibilidades, son las mismas cosas que a menudo nos hacen tropezar. La lista es larga, pero en el mundo de WordPress, uno de los puntos más comunes de confusión es la forma adecuada de incluir archivos externos.

PHP ofrece cuatro(!) maneras de hacer esto y WordPress incluso ofrece su propia variación de los mismas.

En este artículo, vamos a ver las cuatro maneras que PHP ofrece para incluir archivos, pautas para cuándo usar cada una, y revisaremos las características de WordPress para incluir archivos.


Incluir archivos con PHP

En términos generales, incluir archivos con PHP se refiere a la acción de incluir otro script en el contexto del script en el que estés trabajando actualmente.

Podrías pensar en esto como la importación de un archivo de modo que cuando el archivo sea devuelto desde el servidor, los scripts se combinan juntos en el orden en que se incluyen y, a continuación, se interpretan como un único archivo.

En primer lugar, veremos las formas de incluir archivos en PHP y las implicaciones de cada uno. Al final del artículo, revisaremos cuándo deberíamos hacer esto.

include()

Según el manual de PHP:

include() incluirá y evaluará el archivo especificado. Si no se encuentra el archivo, se lanzará una advertencia PHP.

En pocas palabras, esto significa que PHP buscará el archivo que estás intentando incluir. Si lo encuentra, se agregará a tu script en el lugar exacto en el que lo hayas declarado.

Es importante entender esto. Por ejemplo, supongamos que estás escribiendo un conjunto de funciones que dependen de otro conjunto anterior de funciones. En ese caso, deberás asegurarte de que el otro archivo se incluya primero.

Por otro lado, si pretendes traer un conjunto de funciones o un archivo externo en medio de una función existente, entonces puedes incluirlo exactamente en el lugar que lo necesites.

En segundo lugar, ten en cuenta que si falta el archivo, PHP lanzará una advertencia. Dependiendo de la configuración del servidor, es posible que veas esto representado en el explorador o que lo veas escrito en un archivo de registro (o en ambos).

Sin embargo, las advertencias son solo eso: no se consideran fatales y normalmente no detienen la ejecución, pero es importante tenerlas en cuenta porque generalmente implica que parte de tu trabajo no se está cargando y/o interpretando correctamente.

Por último, ten en cuenta que cuando se carga un archivo utilizando include() que va a tener acceso a todas las variables definidas previamente en el script existente.

Por ejemplo, supongamos que estás trabajando en una función y a mitad de la función, vas a incluir un archivo independiente. Ese archivo independiente tendrá acceso a las variables definidas anteriormente en la función en la que ha sido incluido.

Aunque es posible que veas esto como algo conveniente, hace que el script externo sea un poco menos claro, ya que no necesariamente muestra que depende de las variables definidas externamente. Esto puede resultar confuso, especialmente cuando se trabaja con un equipo.

include_once()

Tomado directamente del manual de PHP:

include_once() realizará el mismo comportamiento que include() pero no volverá a incluir el archivo si este ya ha sido incluido con anterioridad.

Obviamente, no hay necesidad de pasar tanto tiempo hablando de los puntos generales de include_once(), pero hay algunos diferenciadores clave entre cómo funciona include_once() y cómo funciona include().

En primer lugar, aunque include_once() funciona en gran medida igual que include(), no te permitirá incluir el script de nuevo. Esto significa que si en otro lugar del proyecto se ha incluido un archivo externo, esa será la ubicación definitiva en la que se incluya ese archivo.

Entonces, ¿cuál es la ventaja de esto? Además de asegurarse de que solo hay un único lugar en el que se incluye un script, también garantiza que las variables y funciones no se redefinirán necesariamente. Recuerda que cuando se utiliza include(), los scripts tienen acceso a funciones y variables que se definen por encima de ellos.

Si optas por definir un nuevo conjunto de variables o funciones en un archivo, incluirlo en otro script y no utilizar include_once(), entonces corres el riesgo de redefinir funciones y variables que potencialmente causen problemas importantes con la ejecución del código.


Requerir archivos con PHP

Requerir archivos es similar a incluir archivos en el sentido de que es otra manera de incluir un script en el script que estás escribiendo actualmente, pero lleva un conjunto de implicaciones propias en torno a los errores y la seguridad.

Aunque puedes considerar el acto de requerir un archivo de la misma manera que puedes incluir un archivo, el primero tiene la implicación de que es más fuerte, es decir, el archivo externo es necesario para la ejecución.

Como veremos, este es exactamente este caso.

require()

Una vez más, directamente del manual de PHP:

require() realiza lo mismo que include() pero producirá un error PHP fatal si no se encuentra el archivo.

Así que aquí está la cosa con require(): realizará la misma acción que include() en cuanto a la importación del script externo en el contexto en el que estés trabajando, pero si no puede localizar el archivo, produce un error y detiene completamente la ejecución.

Esto significa que la aplicación se detiene. Con include(), recibirás una advertencia e intentará seguir adelante.

En cierto nivel, puede parecer que requerir archivos es la manera correcta hacerlo. Después de todo, ¿por qué desearías arriesgarte a incluir algo solo para obtener una advertencia con un posible error en la aplicación.

Pero todo se reduce a la naturaleza de aquello en lo que estés trabajando. A veces, las advertencias PHP simples están bien, como olvidarse de inicializar el índice de una matriz, otras veces, necesitas un error.

No hay reglas rígidas y rápidas para cuándo usar esto en lugar de include, pero piensa críticamente sobre la naturaleza de aquello que estás haciendo y las implicaciones que conlleva si fallase.

require_once()

Por último, del manual de PHP:

require_once() funciona igual que require(), pero no incluirá el archivo una segunda vez si este ya ha sido incluido con anterioridad.

Esto posiblemente sea el más fácil de entender, ya que hemos cubierto las últimas tres funciones con relativo detalle. En pocas palabras, require_once() realiza exactamente las mismas funciones que requiere, aunque no intentará incluir un archivo de nuevo si ya está cargado en el script.


Reglas generales

Además de pensar críticamente sobre qué función es mejor para la naturaleza de tu proyecto, aquí hay dos reglas generales adicionales a tener en cuenta al trabajar con include() y require():

  • require_once() es mejor para sitios más grandes, ya que hace algún trabajo adicional en el nivel inferior que afecta a la seguridad y el rendimiento
  • include_once() es más rápido y generalmente se considera aceptable para sitios más pequeños

Bastante fácil, pero ¿qué pasa con las funciones auxiliares de WordPress?


Incluyendo archivos con WordPress

Dicho todo esto, existen mejores maneras que usar include() y require() para incluir plantillas en tus proyectos de WordPress.

Supongamos, por ejemplo, que tienes varios archivos de bucle, uno para un formato de entrada:

  • loop-standard.php
  • loop-image.php
  • loop-quote.php

Y necesitas incluirlos en single.php cada vez que estés trabajando en la página de entrada individual de un tema.

En un momento dado, hacer algo como esto fue aceptable:

Pero esta ya no es la mejor práctica.

get_template_part()

WordPress ahora ofrece una función, get_template_part(), que forma parte de la API nativa y que se utiliza específicamente para reutilizar secciones, o plantillas, de código (excepto el encabezado, el pie de página y la barra lateral) a través de tu tema.

La función acepta dos argumentos:

  • El primer argumento es el slug de la plantilla. En el ejemplo anterior, eso sería 'loop'.
  • El segundo argumento es el nombre de la plantilla. En el ejemplo anterior, sería 'standard', 'quote', o 'image'.

Al seguir con nuestro ejemplo anterior, digamos que estamos en The Loop y queremos incluir la plantilla de formato de entrada de presupuesto (quote). En ese caso, haríamos lo siguiente:

O bien, suponiendo que hayas nombrado tus plantillas para que coincidan con los tipos de formato de entrada, puedes hacer algo aún más limpio:

Limpio, ¿verdad?

En realidad, puedes llevar esto un paso más allá. Supongamos que has abstraído el código de paginación en su propio archivo de plantilla llamado pagination.php. Usando get_template_part(), puedes incluir esto en todo tu sitio en, por ejemplo, la plantilla footer.php o en index.php, single.php, archives.php, etc. simplemente añadiendo:

Mucho más fácil, ¿no?


¿Cuándo debo usar cada cosa?

Así que después de todo esto, todavía tenemos que discutir realmente las pautas de cuándo usar qué. De ninguna manera soy una autoridad en esto, pero aquí están las reglas generales que sigo:

  1. En el desarrollo de temas, siempre uso get_template_part().
  2. En el desarrollo de plugins, casi siempre uso include_once() y generalmente lo uso una vez en una función. Puedes ver esto en mis boilerplates.
  3. Si el plugin que estoy escribiendo va a ser utilizado en un sitio muy grande, entonces uso require_once().

¡Es todo!


Lecturas adicionales

Para obtener explicaciones más detalladas sobre lo que hemos tratado en este artículo, asegúrate de leer las páginas del manual correspondientes a cada una de las funciones:

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.