web-dev-qa-db-fra.com

Puis-je utiliser la fonction require () dans un fichier modèle?

Dans mon fichier de modèle, je veux inclure une bibliothèque. J'ai chargé la bibliothèque dans mon dossier de thèmes et, à l'intérieur de celui-ci, se trouve mon fichier de modèle personnalisé. Dans mon fichier de modèle personnalisé, j'ai require 'OAuth2/Client.php';, mais lorsque je charge une page qui utilise le modèle, cela me donne ceci:

Avertissement: requis (OAuth2/Client.php): échec de l'ouverture du flux: Aucun fichier ou répertoire de ce type dans /home/healthf0/public_html/wp-content/themes/healthfitcorpwell/single-iframe.php à la ligne 4

De toute évidence, le fichier existe, je le vois assis via FTP. Pourquoi ça me dit ça?

1
Alex

Vous voyez cette erreur parce que vous avez requireing le fichier avec un chemin relatif. Comme @Mark Kapulun l'a souligné dans les commentaires, vous ne devez pas utiliser de chemins relatifs lorsque vous utilisez requireing. Au lieu de cela, vous voulez être explicite et utiliser des chemins absolus.

Utilisez get_template_directory () qui retourne le

Chemin absolu vers le répertoire du thème actuel (sans la barre oblique finale)

Dans votre fichier de modèle, l'instruction require ressemblera à ceci:

require( get_template_directory() . '/path/from/theme/root/to/file.php');

Ou get_stylesheet_directory() si vous créez un thème enfant. doc

Mise à jour:

Comme @Jack Johansson l'a noté dans sa réponse, vous pouvez également envisager d'utiliser require_once à la place. Cela vous protégera des erreurs générées par plusieurs inclusions du fichier. Voir cette réponse pour plus de détails.

4
DaveLak

Oui, mais l'utilisation de chemins relatifs n'est pas autorisée. Vous voulez toujours des chemins absolus. Cela peut être fait comme suit:

<?php require( get_stylesheet_directory() . '/OAuth2/Client.php'); ?>

get_stylesheet_directory() renverra le chemin absolu où se trouve style.css pour le thème. Cependant, il ne mettra PAS le / final.

1
Cedon

Vous pouvez utiliser get_template_directory() pour obtenir un chemin absolu vers le répertoire de votre modèle. Par exemple, si votre fichier php se trouve dans /my-theme/OAuth2/Client.php, utilisez:

require_once(get_template_directory().'/OAuth2/Client.php');

N'oubliez pas, n'utilisez PAS de fonction relative et n'accédez pas directement au fichier PHP à des fins de sécurité. De plus, vous devez utiliser cette condition dans votre fichier client.php pour le rendre plus sécurisé:

if ( ! defined( 'ABSPATH' ) ) {
    exit('No script rookies, please.');
}

Cela ne permet pas un accès direct à votre fichier PHP.

Je voudrais également aller avec require_once au lieu de require pour m'assurer qu'il ne déclenche aucune erreur si je l'inclue ailleurs accidentellement.

1
Jack Johansson