web-dev-qa-db-fra.com

Comment inclure PHP les fichiers dans les plugins de la bonne manière

Mon problème est lorsque j'inclus dans le fichier de plugin principal un fichier PHP qui ressemble à ceci:

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 comme:

add_action('hook', 'callback');

et je reçois:

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

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

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?
57
Bainternet

Tout d'abord, merci à tous ceux qui ont répondu,

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

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

j'ai lu sur le WordPress support . et encore merci d'avoir répondu!

5
Bainternet

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 fait retourne le barre de fin pour le chemin du fichier.

83
Chip Bennett

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éfinir votre répertoire de plugin

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

Exemple de code:

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

Juste une ligne droite inclure ou exiger

Vous pouvez simplement utiliser; include, include_once, require ou require_once à l'intérieur de votre dossier de plug-in 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";
9
Dwayne Charrington

Je finis par renoncer aux constructions WordPress pour includes 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 inclure et exiger:
include lancera un warning si le fichier n'est pas trouvé
require lancera un 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).

5
mtekk

Comprendre

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

Inclure une fois

L'instruction include_once () inclut et évalue le fichier spécifié lors de l'exécution du script. Ce comportement est similaire à celui de l'instruction include (), à la différence que si le code d'un fichier a déjà été inclus, il ne sera plus inclus. Comme son nom l'indique, il ne sera inclus qu'une fois.

Require

require () et include () sont identiques à tous égards sauf la manière dont ils gèrent les échecs. Ils produisent tous les deux un avertissement, mais require () entraîne une erreur fatale. En d’autres termes, n’hésitez pas à utiliser require () si vous voulez qu’un fichier manquant arrête le traitement de la page.

Demandez une fois

L'instruction require_once () inclut et évalue le fichier spécifié lors de l'exécution du script. Ce comportement est similaire à celui de l'instruction require (), à la différence que si le code d'un fichier a déjà été inclus, il ne sera plus inclus.

Les informations ci-dessus proviennent de la documentation PHP. En réalité, cela n’est pas correct, cela dépendra de la nécessité du code, j’exige () des éléments importants comme des fonctions, mais le pied de page ou la boucle que j'utilise include_once ou include parce que je peux gérer l'avertissement et dire à l'utilisateur/au visiteur qui se produit une erreur au lieu d'une erreur fatal_error

3
Webord

Bonjour @ יית אתרים:

Lorsque WordPress est en cours de chargement, il définit la fonction add_action() before il essaie de charger des plug-ins. Le fait que vous obteniez l'erreur signifie que vous faites quelque chose d'étrange ou que quelque chose ne va pas avec votre installation WordPress.

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

1
MikeSchinkel
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 les fichiers .css & .js admin_enqueue_scripts dans le plugin, utilisez plugin_dir_url( __FILE__ )

$plugin_dir_uri = plugin_dir_url( __FILE__ );
wp_enqueue_style( 'plugin-style', $plugin_dir_uri . 'css/plugin-style.css');
1
Aamer Shahzad

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).

http://kvcodes.com/2014/05/wordpress-theme-development-include-files-automatically/

0
varadha