web-dev-qa-db-fra.com

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

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-il assez bon de s'y fier, quel que soit l'emplacement du script ou la configuration de WP?

3
akamaozu

Dans le cas générique, il n’existe pas de solution performante autre que la vérification de tous les fichiers et dossiers accessibles au public, puis de tous les dossiers parents.

Comme ce n'est pas une opération réalisable ou excusable à effectuer à chaque chargement ou demande de page, il vous reste deux autres options:

  • Définir 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

Ce dernier est ce sur quoi vous compterez si vous voulez automatiser les choses.

Problèmes que je vois avec votre code:

  • Il suppose que WordPress se trouve dans le même dossier ou dans 2 dossiers

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

Cependant, je vous recommanderais de transformer votre script externe dans WordPress en tant que plugin.

2
Tom J Nowell

Selon le Codex,

http://codex.wordpress.org/Integrating_WordPress_with_Your_Website

<?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 toutes les variantes possibles), par rapport à un emplacement WordPress. Ainsi, si quelqu'un a quelque chose à ajouter qui peut affiner votre code, il serait alors logique que votre extrait soit localisé en fonction de votre utilisation Cas.

METTRE À JOUR#

(en réponse à votre commentaire)

Le chemin d'accès à votre installation WordPress est une constante. Par conséquent, au lieu de concevoir quelques astuces pour déterminer où se trouve ce chemin, indiquez-le tel quel et en entier, comme dans l'exemple ci-dessus.

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

c:\Apache\htdcos\wordpress

...puis,

//document root being c:\Apache\htdocs

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

Va localiser votre racine de document, pour laquelle vous spécifiez ensuite votre répertoire d'installation et votre fichier wp-blog-header.php.

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

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

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

..\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 l’un des sous-répertoires, quelle que soit sa profondeur.

Maintenant, dans ce fichier inclus automatiquement, vous pouvez placer une fonction qui englobe la require('/the/path/to/your/wp-blog-header.php'); pour laquelle 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)

Ou bien, vous n'avez pas besoin d'encapsuler la require et de la disposer dans 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.

Étant 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.

1
userabuser

Vous avez juste besoin du code suivant à appliquer 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');
0
Keshav Kalra

Par ailleurs, si vous souhaitez inclure worpdress core (+ fonctions de thème), il est préférable de:

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

et pas

require('/wp-blog-header.php');
0
T.Todua