Tengo un complemento que llama a un script php independiente (myAjax.php) a través de un script jQuery.ajax () dentro del complemento.
Necesito colocar el siguiente código en el archivo myAjax.php:
require_once('../../../wp-load.php');
if (!is_user_logged_in()){
die("You Must Be Logged In to Access This");
}
if( ! current_user_can('edit_files')) {
die("Sorry you are not authorized to access this file");
}
Sin embargo, me gustaría un método más a prueba de balas para especificar la ruta a wp-load.php en caso de que la ruta relativa real sea diferente a mi ejemplo.
plugin-development
N2Mystic
fuente
fuente
Respuestas:
Puedes usar
__DIR__
constante. Dado que el archivo está dentro del complemento o la carpeta de temas, que siempre se encuentran dentro de lawp-content
carpeta ... Simplemente puede obtener la ruta del archivo y recortar todo a partirwp-content
de él:Si necesita asegurarse de que el wp no esté dentro de una carpeta de contenido de wp (¿quién sabe? Las cosas suceden), use una búsqueda negativa:
(dado que es más fácil asegurarse de que su propio complemento que está desarrollando no se encuentra dentro de otra carpeta wp-content)
Aaand .. tu
wp-load
está ahí:¡Pero!
Como se mencionó anteriormente, para AJAX puedes usar la técnica ajax nativa de WP-s .
Por supuesto, hay casos en que la técnica AJAX nativa de WP no es suficiente.
fuente
wp-content
puede estar ausente o en un directorio completamente diferente que WP.Sé que esta es una pregunta antigua, pero quería agregar mi propia respuesta, que creo que podría ayudar a algunos usuarios que intentan lograr lo mismo.
Sí, siempre es mejor (y más fácil) usar la API WP Ajax nativa, pero puede volverse muy lenta porque carga toda la instancia de WP.
Mi solución: es bastante simple, y debería funcionar para recuperar la
root
instalación de WordPress. En cualquier script que esté haciendo la llamada AJAX personalizada, solo asegúrese de registrar primero el scriptwp_register_script()
(no lo ponga en cola todavía). Luego usewp_localize_script()
y analice elABSPATH
(esta es una constante que se define dentrowp-load.php
y mantendrá la ruta raíz). Ahora puede recuperar esto dentro de su script y analizarlo junto con la llamada AJAX. Finalmente, por supuesto, asegúrese de poner en cola el script conwp_enqueue_script()
.Ejemplo:
El siguiente fragmento de PHP pondrá en cola su
script.js
archivo y le permite recuperar elroot
directorio llamandopluginslug_scriptname_i18n.wp_root
. Básicamente,wp_localize_script()
se usa para hacer traducciones, pero esto también es útil para analizar los datos en sus scripts que recuperó del lado del servidor.Tu
script.js
podrías lucir así:Ahora dentro de tu
ajax-handler.php
puedes recuperar elwp_content_dir
y cargar tuwp-load.php
like así:Tenga en cuenta que
wp_root
se puede modificar el lado del cliente.Como nota al margen:
Otro truco del que algunos de ustedes quizás no se den cuenta es que antes de incluirlo
wp-load.php
, pueden definir una constante llamadaSHORTINIT
(boolean). Esto le indicará a WordPress que solo cargue los elementos básicos (lo que significa que perderá muchas funciones principales de WP), pero acelerará el tiempo de carga ya que no incluirá todos los archivos necesarios para una instancia de WP normal. ElSHORTINIT
interior está definidowp-settings.php
(solo abre el archivo y buscaSHORTINIT
. Tendrás una mejor comprensión de lo que está sucediendo debajo del capó. Este ingenioso truco acelerará los tiempos de carga aún más (hasta un 75% en mis pruebas que hice) hace algún tiempo). Pero esto dependerá de la versión de WP. También tenga en cuenta que loswp-load.php
cambios con frecuencia con los nuevos lanzamientos de versiones de WP, así que si usaSHORTINIT
asegúrese de que su script siempre funcione incluso en futuras versiones de WordPress, y también con una versión inferior de WordPress. En resumen, si haces cosas complejas que dependen de gran parte del códice de WordPress, entonces asegúrate de NO establecerloSHORTINIT
en verdadero .fuente
Puede usar el siguiente código para usar wp-load.php para incluir wp-load desde cualquier ubicación
fuente