Mi problema es cuando en el archivo de complemento principal incluyo un archivo PHP algo como esto:
include(WP_PLUGIN_URL . '/wordpress-group-buying/ipn/paypal-ipn.php');
// or
include_once(WP_PLUGIN_URL . '/wordpress-group-buying/ipn/paypal-ipn.php');
// or
require(WP_PLUGIN_URL . '/wordpress-group-buying/ipn/paypal-ipn.php');
// or
require_once(WP_PLUGIN_URL . '/wordpress-group-buying/ipn/paypal-ipn.php');
y en ese archivo tengo una llamada a una función de WordPress como:
add_action('hook', 'callback');
y obtengo:
Error grave: llamada a la función indefinida add_action ()
Ahora, antes de decir "usar if(**function_exists**('add_action')){
" si lo uso, simplemente no funciona.
Las preguntas:
- ¿Cuál sería la forma correcta de hacer eso?
- ¿Cuáles son las diferencias entre
include
,include_once
,require
y cuando hacer yo utilizo bruja?
plugin-development
functions
Bainternet
fuente
fuente
WP_PLUGIN_URL
en su código de arriba :)Respuestas:
Llegando tarde a esta fiesta, pero aquí está la forma "WordPress": use
plugin_dir_path( __FILE__ )
, por ejemplo:Tenga en cuenta que la función no devuelve la barra final de la ruta de archivo.
fuente
__FILE__
se generará un resultado relativo al archivo actual desde el que lo llama, por lo que si suinclude
declaración se realiza desde un subdirectorio dentro de la estructura de su archivo de complemento, también obtendrá el subdirectorio.require_once(plugin_dir_path(__DIR__).'/myfile.inc');
Revisé un par de complementos que creé previamente para ver las diferentes formas en que he incluido archivos adicionales dentro de los complementos y noté que hay dos métodos que puede usar, probablemente hay más.
Defina su directorio de complementos
Dentro de su complemento tiene la siguiente definición para definir la ubicación actual del complemento.
Código de ejemplo:
Solo un directo incluye o requiere
Simplemente puedes usar; include, include_once, require o require_once dentro de su carpeta de complementos haciendo referencia a la ubicación como en el código de ejemplo a continuación. El siguiente ejemplo se basará en un archivo en su directorio raíz de complementos que incluye otro archivo dentro de una carpeta dentro de su carpeta de complementos.
Código de ejemplo:
fuente
Termino renunciando a las construcciones de WordPress para incluye y uso lo siguiente:
No creo que realmente resuelva su problema, que parece ser un problema de alcance, pero es el código que uso.
En cuanto a la diferencia entre include y require:
include arrojará una advertencia si no se encuentra el archivo
require arrojará un error fatal si no se encuentra el archivo
include_once y require_once no incluirán / requerirán el archivo / código nuevamente si ya ha sido incluido / requerido (tenga en cuenta que, por lo que puedo decir, esto es solo para un archivo específico en un directorio específico).
fuente
Primero, gracias a todos los que respondieron:
Mi problema fue llamar a los archivos incluidos con la URL completa para que no pasen por WordPress. y eso sucedió porque, como dije en la pregunta, los estaba llamando desde el archivo de complemento principal. entonces la solución terminó usando:
Lo leí en el soporte de WordPress . y de nuevo gracias por responder!
fuente
La información anterior es de la documentación de PHP, la cuestión es que no hay una correcta, dependerá de la necesidad del código, sí necesito () en cosas importantes como funciones, pero en archivos de temas como el pie de página o el bucle que uso include_once o include porque puedo manejar la advertencia y decirle al usuario / visitante que ocurrió un error en lugar de solo un error_ fatal
fuente
Hola @ בניית אתרים:
Cuando se está cargando WordPress, define la
add_action()
función antes de que intente cargar cualquier complemento. El hecho de que reciba el error me dice que está haciendo algo extraño o que algo está mal con su instalación de WordPress.¿A quién vas a cargar tu "plugin" ? ¿Está utilizando
include*()
orequire*()
para cargarlo, tal vez en suwp-config.php
archivo?fuente
o
o
Nota: para colocar archivos .css y .js
admin_enqueue_scripts
dentro del uso del complementoplugin_dir_url( __FILE__ )
fuente
Cada vez que crea un nuevo archivo dentro de su directorio de trabajo, debe incluirlo cada vez. Pero intente un método para escanear su directroy y adjuntarlo automáticamente, no solo los archivos php, que ayuda a incluir php, js y css correctamente en ambos lados (backend, front-end).
http://kvcodes.com/2014/05/wordpress-theme-development-include-files-automatically/
fuente