it-swarm.com.de

Zugriff auf das Stammverzeichnis der Site über den Themenordner

Ich habe einige Probleme mit einem PHP Skript, das ich zu erstellen versuche.

Ich muss auf eine Datei zugreifen, die sich im Stammverzeichnis meiner Wordpress-Installation befindet:

wordpress-root/live-config.php

Das Problem ist, dass sich meine Skriptdatei im Stammordner des Themas befindet und ich beim Definieren einer Konstante versuche, auf den Stammordner zuzugreifen.

Meine Skriptdatei befindet sich in: Stammverzeichnis/wp-content/themes/theme-root/

Wenn ich require ABSPATH . 'live-config.php'; verwende, ist es nicht gut, weil es in dem Verzeichnis aussieht, in dem sich Ihre aktuelle Datei befindet (dh Theme-Root-Verzeichnis anstelle meines WordPress-Root-Verzeichnisses ).

Ich möchte nur wissen, wie ich am besten den Stammordner meiner Wordpress-Installation abrufen kann, wenn ich eine Konstante definiere, die sich im Theme-Verzeichnis befindet.

In meinem Skript versuche ich derzeit Folgendes:

/** 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';

Aber offensichtlich zeigt das Definieren von ABSPATH in meinem Theme-Root nicht auf das WordPress-Root -Verzeichnis.

1
remi90

Ich vermute, Sie sprechen von einer wp-config.php-Datei, die sich in Ihrem Themenordner befindet.

An dem Punkt, an dem Sie die wp-config.php-Datei laden, ist WP nicht vollständig geladen, sodass Sie keine Konstanten oder Dateisystem-API oder andere grundlegende API-Funktionen zur Verfügung haben.

So gehe ich das an:

Struktur

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

Im Ordner config habe ich alle Konfigurationsdateien abgerufen, die standortspezifisch sind. Um sie leichter identifizieren zu können, sind sie nach den Domänen benannt, in denen sie verwendet werden.

Der 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 );

Erklärung und Nachteile

DS ist nur eine kurze Konstante, mit der DIRECTORY_SEPARATOR umbrochen wird. Da ich es an vielen Orten verwende und meine Zeilen kurz halten möchte, setze ich es.

Also ist der $suffix das, was ich aus dem SERVER_NAME oder dem HTTP_Host erhalte. Der Punkt ist, dass Sie nicht sicher sein können, welches eingestellt ist. Deshalb teste ich beide.

Der $config_path ist einfach der Pfad der aktuellen Datei + ein Ordner mit dem Namen config auf der darunter liegenden Ebene.

Die Dateien selbst heißen example.com.php. So kann ich sie leicht finden, indem ich nur die Domain identifiziere und ich bin fertig. Dies hilft, die Dinge sauber zu halten.

Die erste Überprüfung, die ich durchführe, betrifft eine _local.php-Datei, die meine lokale Konfiguration enthält. Ich überspringe diesen Schritt, indem ich diese Zeilen für Dateien lösche, die ich auf Servern verwende. Es ist nur da, um mein lokales Setup laufen zu lassen.

Die zweite Prüfung betrifft die Datei stage. Dies wird auch an Produktionsstandorten gelöscht.

Ich hoffe, dies hilft anderen, Dinge wie das hier gezeigte Setup zu vermeiden .

1
kaiser

Schauen Sie sich diese Antwort bei StackOverflow an: https://stackoverflow.com/a/2356526/1077363 - sie ähnelt der Methode I wurde schon einmal verwendet, aber ich habe diesen Code noch nicht zur Hand.

Die Theorie dahinter ist, dass Sie sich normalerweise nur 2 oder 3 Verzeichnisse unterhalb des Stammverzeichnisses befinden. Wenn Sie also wp-config.php (der die meiste Zeit im Stammverzeichnis gespeichert ist) mithilfe von file_exists() überprüfen, erfahren Sie, ob Sie das gefunden haben richtiges Verzeichnis. Verwenden Sie zum Aufrufen von Verzeichnissen dirname() (wenn Sie sie wie in der anderen Antwort verschachteln, gelangen Sie in weniger LOC dorthin).

Hoffe, das hilft, wenn Sie mehr Hilfe benötigen, kann ich meinen alten Code später heute Abend ausgraben.

1
ParkeyParker