Création d'un chemin dynamique vers wp-blog-header.php

3

Création d'une classe dans un script externe dépendant de l'environnement Wordpress. Comme il s’agit d’une classe que j’ai l’intention d’utiliser dans divers projets, j’ai décidé de créer de manière dynamique un chemin vers wp-blog-header.php et voici ce que j’ai proposé. Cela fonctionne actuellement pour moi, mais je dois m'assurer qu'il est infaillible.

$docRoot = $_SERVER['DOCUMENT_ROOT'];
$scriptName = $_SERVER['SCRIPT_NAME'];
$queryArray = explode("/", $scriptName);
$queryLength = count($queryArray);

require_once($docRoot . ($queryLength > 2 ? "/".$queryArray[$queryLength - 2] : "" ) . '/wp-blog-header.php');

Quelqu'un a-t-il une meilleure solution ou est-ce suffisamment bon pour pouvoir compter, peu importe l'emplacement du script ou la configuration de l'installation de WP?

    
posée akamaozu 09.08.2012 - 23:30

4 réponses

2

Dans le cas générique, il n’existe pas de solution performante à part vérifier tous les fichiers et dossiers accessibles au public, puis tous les dossiers parents.

Etant donné que l'opération n'est pas réalisable ni excusable à chaque chargement ou demande de page, deux options vous restent:

  • Définissez l'emplacement manuellement, ce qui n'est pas une requête déraisonnable
  • Faites des hypothèses et des attentes sur l'emplacement de WordPress par rapport à votre fichier

C’est ce dernier que vous utiliserez si vous voulez automatiser les choses.

Problèmes que je vois avec votre code:

  • Cela suppose que WordPress se trouve soit dans le même dossier, soit dans 2 dossiers vers le haut

Si ces hypothèses vous conviennent, alors oui, votre code est sûr à utiliser

Toutefois, je vous recommanderais de transformer votre script externe dans WordPress en tant que plug-in.

    
réponse donnée Tom J Nowell 08.04.2013 - 12:09
1

Selon le Codex,

enlace

<?php
require('/the/path/to/your/wp-blog-header.php');
?>

Que vos moyens et votre méthode soient infaillibles dépend entièrement de votre configuration et des emplacements dans lesquels vous placez vos scripts, par rapport à votre installation WordPress.

En supposant que vous respectiez la convention décrite dans votre code, tout devrait bien se passer.

Vous devriez fournir un exemple plus détaillé d'emplacements de script (y compris d'éventuelles variantes), par rapport à un emplacement WordPress. Ainsi, si quelqu'un a quelque chose à ajouter qui peut affiner votre code, il serait alors judicieux, car votre extrait est à localiser à votre cas d'utilisation.

UPDATE #

(en réponse à votre commentaire)

Le chemin de votre installation WordPress est une constante. Par conséquent, au lieu de trouver une astuce pour déterminer où se trouve ce chemin, indiquez-le tel quel et dans son intégralité, comme dans l'exemple ci-dessus.

Si, par exemple, votre chemin actuel (pour localhost) ressemble à quelque chose comme;

c:\apache\htdcos\wordpress

... alors,

//document root being c:\apache\htdocs

$_SERVER["DOCUMENT_ROOT"] . '/wordpress/wp-blog-header.php';

Localisera la racine de votre document pour laquelle vous spécifiez ensuite le répertoire d’installation et le fichier wp-blog-header.php .

Je placerais ensuite un fichier .htaccess dans c:\apache\htdocs , qui devrait notamment contenir les éléments suivants,

php_value auto_prepend_file "auto_inc.php" //the auto_inc.php can be a name of choice

Ceci inclura (auto_prepend) le fichier auto_inc.php avant tout autre fichier PHP, donc si vous avez une structure de répertoires comme,

..\htdocs\ (root)
..\htdocs\project1\
..\htdocs\project2\
..\htdocs\project-test\sample\
..\htdocs\wordpress\
..\htdocs\.htaccess
..\htdocs\auto_inc.php
..\htdocs\index.php

Le fichier auto_inc.php sera inclus dans n’importe quel sous-répertoire, quelle que soit sa profondeur.

Maintenant, dans ce fichier inclus automatiquement, vous pouvez placer une fonction qui englobe le require('/the/path/to/your/wp-blog-header.php'); que vous pouvez utiliser arbitrairement dans vos différents projets, par exemple;

function wp_function_include() {

$path = require('/the/path/to/your/wp-blog-header.php');

echo $path;

}

wp_functions_include(); //which fires the verbose require(path..wp-blog-header.php)

Sinon, vous n'avez pas besoin d'envelopper le require et de le disposer sur tous les fichiers, sous-répertoires, à n'importe quelle profondeur, sans avoir à le spécifier à nouveau, ce qui vous permet de vous concentrer sur vos projets. .

Etant donné que le répertoire /wordpress/ a déjà son propre .htaccess , il ne sera pas affecté par le .htaccess trouvé dans son répertoire racine, ce qui supprimera tout conflit entre deux fonctions déclarées.

    
réponse donnée userabuser 09.08.2012 - 23:42
0

Il vous suffit d'appliquer le code suivant pour obtenir un chemin réel pour le wp-blog-header.php

$scriptPath = dirname(__FILE__);
$path = realpath($scriptPath . '/./');
$filepath = split("wp-content", $path);
// print_r($filepath);
define('WP_USE_THEMES', false);
require(''.$filepath[0].'/wp-blog-header.php');
    
réponse donnée Keshav Kalra 28.02.2014 - 13:49
0

BTW, si vous souhaitez inclure worpdress core (+ fonctions de thème), son meilleur pour l'utilisateur:

require('/wp-load.php');

et NON

require('/wp-blog-header.php');
    
réponse donnée T.Todua 19.09.2014 - 11:07

Lire d'autres questions sur les étiquettes