Afin de garder les choses propres, j'utilise functions.php presque uniquement pour exiger d'autres fichiers. En tant que tel, une partie de functions.php ressemble à ceci:
#include types
require("includes/types.php");
#include shortcodes
require("includes/shortcodes.php");
#include widgetareas
require("includes/widgetareas.php");
#include paging navs
require("includes/paging-navs.php");
#include widgets
require("includes/widgets.php");
themolder/includes/widgets.php se présente comme suit:
/*columns widget*/
require("widgets/columns-widget.php");
Et un widget de travail est écrit dans le répertoire/includes/widgets/columns-widget.php
Maintenant, voici la partie étrange: ce code ne rompt pas ou ne jette aucune erreur. Pourtant, le code écrit dans le répertoire dossier/includes/widgets.php n'est pas traité et mon colonnes-widget.php ne se charge pas.
Par contre, si je renomme le dossier/includes/widgets.php en dossier/includes/widget.php et que je modifie la ligne correspondante dans functions.php en
#include widgets
require("includes/widget.php");
le code fonctionne comme prévu et mes colonnes-widget se chargent.
Pourquoi est-ce? Est-ce un bug ou est-ce un comportement prévu?
Le premier emplacement où PHP chercherait un chemin relatif sera et non le fichier que vous spécifiez, mais plutôt le fichier de point d'entrée (index.php
ou autre). .
Les fichiers sont inclus en fonction du chemin de fichier indiqué ou, si aucun n’est spécifié, du chemin d’inclusion spécifié. Si le fichier ne se trouve pas dans le chemin include_path, include va finalement archiver le répertoire propre du script appelant et le répertoire de travail actuel avant d'échouer.
Mon hypothèse serait que votre code récupère wp-admin/includes/widgets.php
(car dans le contexte admin, le point d'entrée est probablement wp-admin/index.php
) au lieu de votre fichier.
Toujours écrire inclut, par exemple, require( __DIR__ . '/includes/widgets.php' );