¿Cuáles son las diferencias entre WPINC y ABSPATH?

34

Es común que los desarrolladores de complementos protejan sus complementos del acceso directo. Vi dos formas de hacer eso:

if ( ! defined( 'WPINC' ) ) die;

y

if ( ! defined( 'ABSPATH' ) ) exit;

¿Cuáles son las diferencias entre WPINC y ABSPATH? ¿Cuál es la forma 'correcta' de hacerlo?

Daniel
fuente

Respuestas:

19

Se definen de la siguiente manera:

define( 'ABSPATH', dirname(dirname(__FILE__)) . '/' );
define( 'WPINC', 'wp-includes' );

dirnamees una función PHP que devuelve la ruta del directorio padre y wp-includesse explica por sí misma.

Diría que ABSPATHes mejor porque es una de las primeras cosas que carga WP y también se ve mejor :) Pero no existe una "forma correcta" real porque ambos funcionan.

Wyck
fuente
44
No existe una forma correcta de verdad, y siempre uso if ( ! defined( 'ABSPATH' ) ) exit;... pero, tal vez, considere que el alcance de este fragmento es garantizar que se cargue wordpress 'WPINC' es mejor porque es más wordpressfull mirando con 'WP'.
gmazzap
4

if ( ! defined( 'WPINC' ) ) die;y if ( ! defined( 'ABSPATH' ) ) exit;agregue una capa adicional de seguridad al evitar cualquier acceso directo a su archivo de complemento. ABSPATHes una constante PHP definida por WordPress en su núcleo.

Si se accede a su archivo de complemento desde fuera de WordPress, la constante ABSPATHo WPINCno se definirá, por lo que sale del código del complemento, evitando cualquier acceso no autorizado a su código.

ABSPATHy WPINCse definen en el núcleo de WordPress como:

define( 'ABSPATH', dirname(dirname(__FILE__)) . '/' );
define( 'WPINC', 'wp-includes' );

Ambos se usan para el mismo propósito.

PM Aagjal
fuente
1

¿Cuáles son las diferencias entre WPINC y ABSPATH?

Puedes comprobarlo tú mismo. Solo mira enwp-load.php el espejo de WordPress en GitHub.

Incluso un vistazo rápido mostrará que la respuesta seleccionada actualmente ya no es correcta en cuanto a cómo ABSPATHse define. Y si compara diferentes etiquetas en GitHub, verá que la ABSPATHdefinición realmente cambia con el tiempo.

¿Cuál es la forma 'correcta' de hacerlo?

Dado que estos se utilizan para la seguridad, iría por ABSPATH. La razón es que ABSPATHno solo se define primero en el programa de arranque de WP, WPINCse define bajo un condicional en el mismo archivo y, como resultado, es más probable que experimente una regresión futura.

Además, aunque no se le preguntó explícitamente, proporcionó ejemplos utilizando ambos diey exit. Según devdocs.io, que se basa en la documentación oficial de la API, diees equivalente a exit, por lo que puede elegir cualquiera de los dos y no hará la diferencia.

Ambos diey exitaceptan argumentos, por lo que podría considerar usarlos para generar información útil, como una etiqueta de versión encriptada o información de contacto, al finalizar, o pasar un código de salida como 0o -1para un procesamiento posterior.

También vale la pena señalar que wp_dieeso también es una cosa. No debe confundirse con las funciones integradas de PHP, pero las complementa para su uso en la salida de HTML, además de texto sin formato, y actualmente se usa de forma liberal en todo el núcleo de WordPress. Obtenga más informaciónwp_die sobre WordPress.org.

Josh Habdas
fuente