Comment inclure les fichiers PHP dans les plugins correctement

53

Mon problème est que j'inclus un fichier PHP dans le fichier de plugin principal:

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');

et sur ce fichier, j'ai un appel à une fonction WordPress telle que:

add_action('hook', 'callback');

et je reçois:

  

Erreur fatale: appel de la fonction non définie add_action ()

Maintenant, avant de dire "utilisez if(**function_exists**('add_action')){ ", si je l'utilise, cela ne fonctionne tout simplement pas.

Les questions:

  • Quelle serait la bonne façon de faire cela?
  • Quelle est la différence entre include , include_once , require et quand dois-je utiliser witch?
posée Bainternet 21.01.2011 - 02:48

8 réponses

4

Tout d'abord, merci à toutes les personnes qui ont répondu,

Mon problème était d'appeler les fichiers inclus avec une URL complète de cette façon, ils ne passent pas par WordPress. et cela s’est produit parce que, comme je l’ai dit à la question, je les appelais depuis le fichier de plugin principal. donc le correctif a fini par utiliser:

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

J'ai lu des articles sur le assistance WordPress . et encore merci d'avoir répondu!

    
réponse donnée Bainternet 21.01.2011 - 05:00
76

Nous arrivons tard à cette soirée, mais voici la méthode "WordPress": utilisez plugin_dir_path( __FILE__ ) , par exemple:

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

Notez que la fonction renvoie le slash final pour le chemin du fichier.

    
réponse donnée Chip Bennett 25.10.2011 - 00:19
8

J'ai parcouru quelques plugins que j'avais précédemment créés pour voir les différentes manières d'inclure des fichiers supplémentaires à l'intérieur des plugins et j'ai remarqué qu'il y avait deux méthodes que vous pouvez utiliser. Il y en a probablement d'autres.

Définissez votre répertoire de plug-in

À l’intérieur de votre plug-in, définissez la localisation suivante du plug-in.

Exemple de code:

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

Il suffit d'inclure ou d'exiger

Vous pouvez simplement utiliser; include, include_once, require ou require_once à l'intérieur de votre dossier plugin en référençant l'emplacement comme dans l'exemple de code ci-dessous. L'exemple ci-dessous sera basé sur un fichier de votre répertoire de plug-in racine comprenant un autre fichier situé dans un dossier du dossier de votre plug-in.

Exemple de code:

include "classes/plugin-core.php";
    
réponse donnée Dwayne Charrington 21.01.2011 - 11:40
5

Je finis par renoncer aux constructions WordPress pour les inclus et utiliser les éléments suivants:

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

Je ne pense pas que cela résoudra réellement votre problème, ce qui semble être un problème de portée, mais c'est le code que j'utilise.

En ce qui concerne la différence entre include et require:
include lancera un avertissement si le fichier n’est pas trouvé

require émettra une erreur fatale si le fichier n'est pas trouvé

include_once et require_once n'incluront plus / exigent le fichier / code s'il a déjà été inclus / requis (notez que pour autant que je sache, cela ne concerne qu'un fichier spécifique dans un répertoire spécifique).

    
réponse donnée mtekk 21.01.2011 - 04:29
3
  

Inclure

     

L'instruction include () inclut et évalue le fichier spécifié.

     

Inclure une fois

     

L'instruction include_once () inclut et évalue les informations spécifiées.   fichier lors de l'exécution du   scénario. Ceci est un comportement similaire à   la déclaration include (), avec le seul   différence étant que si le code de   un fichier a déjà été inclus, il   ne sera pas inclus à nouveau. Comme le   son nom l'indique, il sera inclus   juste une fois.

     

Requiert

     

require () et include () sont identiques à tous égards sauf la façon dont ils   gérer l'échec. Ils produisent tous les deux un   Attention, mais require () se traduit par un   Erreur fatale. En d'autres termes, ne pas   hésiter à utiliser require () si vous voulez   un fichier manquant pour arrêter le traitement de   la page.

     

Demander une fois

     

L'instruction require_once () inclut et évalue les informations spécifiées.   fichier lors de l'exécution du   scénario. Ceci est un comportement similaire à   l'instruction require (), avec le seul   différence étant que si le code de   un fichier a déjà été inclus, il   ne sera plus inclus.

Les informations ci-dessus proviennent de la documentation PHP. En fait, il n’existe pas de solution correcte, cela dépend du besoin en code, j’exige () des éléments importants tels que des fonctions, mais des fichiers de thème comme le pied de page ou le fichier. la boucle que j’utilise include_once ou include parce que je peux gérer l’avertissement et dire à l’utilisateur / visiteur qui se produit une erreur au lieu d’un message fatal_error

    
réponse donnée Webord 21.01.2011 - 04:34
1

Bonjour @ יית רים:

Lors du chargement de WordPress, il définit la fonction add_action() avant de tenter de charger des plug-ins. Le fait que vous obteniez l'erreur m'indique que vous faites quelque chose d'étrange ou que quelque chose ne va pas avec votre WordPress. installer.

À qui devez-vous charger votre "plugin" ? Utilisez-vous un include*() ou require*() pour le charger, peut-être dans votre fichier wp-config.php ?

    
réponse donnée MikeSchinkel 21.01.2011 - 04:46
0

Chaque fois que vous créez un nouveau fichier dans votre répertoire de travail, vous devez l’inclure à chaque fois. Mais essayez une méthode pour analyser votre répertoire et l’attacher automatiquement, pas seulement les fichiers php, ce qui permet d’inclure correctement les fiules php, js et css des deux côtés (backend, front end).

enlace

    
réponse donnée varadha 29.05.2014 - 06:56
0
include( plugin_dir_path( __FILE__ ) . 'ipn/paypal-ipn.php');

ou

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

ou

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

Remarque: pour interroger .css & Fichiers .js admin_enqueue_scripts dans le plugin utilisent plugin_dir_url( __FILE__ )

$plugin_dir_uri = plugin_dir_url( __FILE__ );
wp_enqueue_style( 'plugin-style', $plugin_dir_uri . 'css/plugin-style.css');
    
réponse donnée Aamer Shahzad 13.05.2016 - 18:35

Lire d'autres questions sur les étiquettes