web-dev-qa-db-fra.com

Accéder à la racine du site à partir du dossier thèmes

Avoir quelques problèmes avec un script PHP que j'essaie de construire.

J'ai besoin d'accéder au fichier a qui se trouve dans le dossier racine de mon installation Wordpress:

wordpress-root/live-config.php

Le problème, c'est que mon fichier de script est situé dans le dossier racine du thème et j'essaie d'accéder au dossier racine lors de la définition d'une constante.

Mon fichier de script se trouve dans: répertoire-racine/wp-content/themes/theme-root/

Si j’utilise require ABSPATH . 'live-config.php';, ce n’est pas bon car il se trouve dans le répertoire où se trouve votre fichier actuel (c.-à-d. le répertoire racine du thème au lieu de mon wordpress-root ).

Je veux juste savoir quel serait le meilleur moyen de récupérer le dossier racine de mon installation Wordpress lors de la définition d’une constante qui se trouve dans le répertoire du thème?

Dans mon script, j'essaie actuellement:

/** Absolute path to the WordPress directory. */
if ( !defined('ABSPATH') )
define('ABSPATH', dirname(__FILE__) . '/');

/**
* Define type of server
*
* Depending on the type other stuff can be configured
* Note: Define them all, don't skip one if other is already defined
*/

define( 'WP_DEV_SERVER', file_exists( ABSPATH . 'dev-config.php' ) );

/**
* Load DB credentials
*/

if ( WP_DEV_SERVER )
    require ABSPATH . 'dev-config.php';
else
    require ABSPATH . 'live-config.php';

Mais évidemment, définir ABSPATH dans mon thème-root ne pointe pas réellement vers le wordpress-root répertoire.

1
remi90

Je suppose que vous parlez d'un fichier wp-config.php spécifique à un site qui réside dans votre dossier de thèmes.

Au moment où vous chargez le fichier wp-config.php, WP n'est pas complètement chargé. Par conséquent, vous ne disposez d'aucune API de constantes ou de système de fichiers ni d'aucune autre fonction de base de l'API.

Voici comment j'aborde ceci:

Structure

# Dir structure
~/ROOT
├── config
├── wp-content
│   ├── themes
│   └── plugins
│   └── mu-plugins

Dans le dossier config, j'ai tous les fichiers de configuration spécifiques à un site. Pour les identifier facilement, ils sont nommés d'après les domaines sur lesquels ils sont utilisés.

Le wp-config.php

# Config file suffix
! empty( $_SERVER['SERVER_NAME'] ) AND $suffix = $_SERVER['SERVER_NAME'];
! isset( $suffix ) AND ! empty( $_SERVER['HTTP_Host'] ) AND $suffix = $_SERVER['HTTP_Host'];

# CONFIG FILE PATH: Sub of root ~/config
$config_path = dirname( __FILE__ ).DS.'config';

// inside wp-config.php
# LOAD CONFIG FILE
// local
if ( file_exists( "{$config_path}/_local.php" ) )  
{
    require( "{$config_path}/_local.php" );
}
// Stage
elseif ( file_exists( "{$config_path}/{$suffix}-stage.php" ) ) 
{
    require( "{$config_path}/{$suffix}-stage.php" );
}
// Production
elseif ( file_exists( "{$config_path}/{$suffix}.php" ) ) 
{
    require( "{$config_path}/{$suffix}.php" );
}
unset( $suffix, $config_path );

Explication et inconvénients

DS est simplement une constante courte faite pour envelopper DIRECTORY_SEPARATOR. Comme je l’utilise dans beaucoup d’endroits et que j’aime garder les lignes courtes, je le règle.

Donc, le $suffix est ce que je récupère du SERVER_NAME ou du HTTP_Host. Le fait est que vous ne pouvez pas savoir lequel est défini. Par conséquent, je teste les deux.

Le $config_path est simplement le chemin du fichier actuel + un dossier nommé config au niveau inférieur.

Les fichiers eux-mêmes sont nommés example.com.php. Donc, je peux les trouver facilement en identifiant simplement le domaine et j'ai terminé. Cela aide à garder les choses propres.

La première vérification que je fais concerne un fichier _local.php qui contient ma configuration locale. Je saute cette étape en supprimant ces lignes pour les fichiers que j'utilise sur des serveurs. C'est juste là pour laisser fonctionner ma configuration locale.

La deuxième vérification concerne le fichier stage. Cela sera également supprimé sur les sites de production.

J'espère que cela aidera d'autres personnes à éviter des choses comme la configuration présentée ici .

1
kaiser

Essayez de jeter un oeil à cette réponse sur StackOverflow: https://stackoverflow.com/a/2356526/1077363 - cela ressemble à la méthode I utilisé une fois auparavant, mais vous n'avez pas ce code sous la main pour le moment.

La théorie sous-jacente est que vous ne trouvez généralement que 2 ou 3 répertoires sous le répertoire racine. Par conséquent, vérifier l'existence de wp-config.php (qui est généralement stocké dans le répertoire racine) à l'aide de file_exists() vous indiquera si vous avez trouvé le fichier. bon répertoire. Pour ouvrir les répertoires, utilisez dirname() (si vous les imbriquez comme dans l'autre réponse, vous obtiendrez un nombre de LOC inférieur).

J'espère que cela vous aidera, si vous avez besoin de plus d'aide, je pourrai extraire mon ancien code plus tard ce soir.

1
ParkeyParker