Cómo incluir archivos PHP en los complementos de la manera correcta

53

Mi problema es cuando en el archivo del complemento principal incluyo un archivo PHP similar a este:

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 me sale:

  

Error grave: llamar a la función indefinida add_action ()

Ahora, antes de que digas "use if(**function_exists**('add_action')){ " si lo uso, simplemente no funciona.

Las preguntas:

  • ¿Cuál sería la forma correcta de hacerlo?
  • ¿Cuál es la diferencia entre include , include_once , require y cuándo uso bruja?
pregunta Bainternet 21.01.2011 - 02:48

8 respuestas

4

Primero, gracias a todos los que respondieron,

Mi problema fue llamar a los archivos incluidos con la URL completa, de manera que no pasen por WordPress. y eso sucedió porque, como dije en la pregunta, los estaba llamando desde el archivo del complemento principal. así que la solución terminó usando:

include_once('/ipn/paypal-ipn.php');

Leí acerca de compatibilidad con WordPress . ¡Y otra vez gracias por responder!

    
respondido por el Bainternet 21.01.2011 - 05:00
76

Llegar tarde a esta fiesta, pero aquí está la forma de "WordPress": use plugin_dir_path( __FILE__ ) , por ejemplo:

<?php
include( plugin_dir_path( __FILE__ ) . 'ipn/paypal-ipn.php');
?>

Tenga en cuenta que la función sí devuelve la barra inclinada al final para la ruta de archivo.

    
respondido por el Chip Bennett 25.10.2011 - 00:19
8

Revisé un par de complementos que creé anteriormente para ver las diferentes formas en que he incluido archivos adicionales dentro de los complementos y noté que hay dos métodos que puedes 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:

define( 'PLUGIN_DIR', dirname(__FILE__).'/' );  

Sólo un directo incluye o requiere

Puedes usar simplemente; incluya, 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 el directorio del complemento raíz que incluye otro archivo dentro de una carpeta dentro de la carpeta de su complemento.

Código de ejemplo:

include "classes/plugin-core.php";
    
respondido por el Dwayne Charrington 21.01.2011 - 11:40
5

Terminé renunciando a las construcciones de WordPress para incluir y uso lo siguiente:

require_once(dirname(__FILE__) . '/filename.php);

No creo que realmente solucione tu problema, que parece ser un problema de alcance, pero es el código que uso.

En cuanto a la diferencia entre incluir y requerir:
include lanzará una advertencia si no se encuentra el archivo
require lanzará 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 sé, esto es solo para un archivo específico en un directorio específico).

    
respondido por el mtekk 21.01.2011 - 04:29
3
  

Include

     

La declaración include () incluye y evalúa el archivo especificado.

     

Incluir una vez

     

La sentencia include_once () incluye y evalúa la especificada   archivo durante la ejecución del   guión. Este es un comportamiento similar a   la sentencia include (), con el único   la diferencia es que si el código de   un archivo ya ha sido incluido,   No se incluirá de nuevo. Como el   nombre sugiere, será incluido   solo una vez.

     

Require

     

require () e include () son idénticos en todos los sentidos, excepto en cómo   manejar el fracaso. Ambos producen una   Advertencia, pero requiere () da como resultado un   Error fatal. En otras palabras, no   dudes en utilizar require () si quieres   un archivo faltante para detener el procesamiento de   la página.

     

Requerir una vez

     

La declaración require_once () incluye y evalúa la especificada   archivo durante la ejecución del   guión. Este es un comportamiento similar a   la declaración require (), con el único   la diferencia es que si el código de   un archivo ya ha sido incluido,   no se incluirá de nuevo.

La información anterior es de la documentación de PHP, la cosa es que no es correcta, dependerá de la necesidad del código, requiero () en cosas importantes como funciones, pero en archivos de tema como el pie de página o el bucle uso include_once o include porque puedo manejar la advertencia y decirle al usuario / visitante que ha ocurrido un error en lugar de solo un error_error fatal

    
respondido por el Webord 21.01.2011 - 04:34
1

Hola @ בניית אתרים:

Cuando WordPress se está cargando, define la función add_action() antes intenta cargar cualquier complemento. El hecho de que esté recibiendo el error me dice que está haciendo algo extraño o que algo está mal con su WordPress instalar.

¿A quién le vas a cargar tu "plugin" ? ¿Está utilizando un include*() o require*() para cargarlo, tal vez en su archivo wp-config.php ?

    
respondido por el MikeSchinkel 21.01.2011 - 04:46
0

Siempre que cree un nuevo archivo dentro de su directorio de trabajo, debe incluirlo cada vez que lo haga. Pero pruebe un método para escanear su directroy y adjuntarlo automáticamente, no solo los archivos php, lo que ayuda a incluir los archivos php, js y css correctamente en ambos lados (backend, front end).

enlace

    
respondido por el varadha 29.05.2014 - 06:56
0
include( plugin_dir_path( __FILE__ ) . 'ipn/paypal-ipn.php');

o

define( 'PLUGIN_ROOT_DIR', plugin_dir_path( __FILE__ ) );
include( PLUGIN_ROOT_DIR . 'ipn/paypal-ipn.php');

o

$plugin_dir_path = plugin_dir_path( __FILE__ );
include( $plugin_dir_path . 'ipn/paypal-ipn.php');

Nota: para enqueu .css & Los archivos .js admin_enqueue_scripts dentro del complemento usan plugin_dir_url( __FILE__ )

$plugin_dir_uri = plugin_dir_url( __FILE__ );
wp_enqueue_style( 'plugin-style', $plugin_dir_uri . 'css/plugin-style.css');
    
respondido por el Aamer Shahzad 13.05.2016 - 18:35

Lea otras preguntas en las etiquetas