¿Cuál es la diferencia entre require_once con dirname(__FILE__) y ruta directa en WordPress?

30 nov 2011, 04:07:12
Vistas: 19.2K
Votos: 5

¿Cuál es la diferencia entre estos dos fragmentos de código y cuál debería usar para un plugin de WordPress?

require_once(dirname(__FILE__).'/inc/canagan_admin_functions.php'); // Usa la ruta absoluta del archivo actual
require_once( '/inc/canagan_admin_functions.php' ); // Usa una ruta relativa desde la raíz del servidor
1
Comentarios

El primero, porque el segundo no funcionará.

Otto Otto
30 nov 2011 04:12:33
Todas las respuestas a la pregunta 1
0
11

El primero es como decir...

Incluye el archivo encontrado en el directorio inc, por encima del directorio donde este archivo está ubicado.

El segundo enunciado está diciendo...

en la raíz del servidor (/) busca en la carpeta inc el archivo canagan_admin_functions.php e inclúyelo.

El primero funcionará, el segundo no. En el segundo estás buscando en la raíz de todo el sistema de archivos, donde ciertamente tu archivo no estará.

Como nota al margen, cada vez que inicio un plugin que abarcará múltiples archivos, y/o que encola archivos CSS o JS, usualmente configuro algunas constantes para ayudarme en el camino. Aquí hay un ejemplo.

<?php
define( 'CD_PLUGIN_PATH', plugin_dir_path( __FILE__ ) );
define( 'CD_PLUGIN_URL', plugin_dir_url( __FILE__ ) );

plugin_dir_path y plugin_dir_url son útiles porque siempre retornan rutas/URLs con barras diagonales al final.

Luego, para incluir/requerir archivos, uso las constantes. Evita tener que llamar dirname(__FILE__) en cada include.

Puedes entonces usar las constantes para incluir archivos...

require_once( CD_PLUGIN_PATH . 'path/to/file.php' );

o para encolar scripts/estilos...

<?php
add_action( 'wp_enqueue_scripts', 'wpse35088_enqueue' );
function wpse35088_enqueue()
{
    wp_enqueue_script( 'wpse35088-script', CD_PLUGIN_URL . 'path/to/script.js' );
}
30 nov 2011 04:30:36