webentwicklung-frage-antwort-db.com.de

Erstellen eines dynamischen Pfads zu wp-blog-header.php

Erstellt eine Klasse in einem externen Skript, das von der Wordpress-Umgebung abhängig ist. Da es sich um eine Klasse handelt, die ich für verschiedene Projekte verwenden möchte, habe ich beschlossen, dynamisch einen Pfad zur Datei wp-blog-header.php zu erstellen. Es funktioniert derzeit für mich, aber ich muss sicherstellen, dass es narrensicher ist.

$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');

Hat jemand eine bessere Lösung oder ist dies gut genug, um sich unabhängig vom Skriptspeicherort oder der WP -Installationskonfiguration darauf zu verlassen?

3
akamaozu

Im allgemeinen Fall gibt es keine leistungsfähige Lösung, außer die öffentlich zugänglichen Dateien und Ordner sowie alle übergeordneten Ordner zu überprüfen.

Da dies keine durchführbare oder entschuldbare Operation ist, die bei jedem Laden der Seite oder bei jeder Anforderung ausgeführt werden kann, stehen Ihnen zwei weitere Optionen zur Verfügung:

  • Definieren Sie den Speicherort manuell. Dies ist keine unzumutbare Anforderung
  • Machen Sie Annahmen und Erwartungen darüber, wo WordPress in Bezug auf Ihre Datei zu finden ist

Letzteres ist das, worauf Sie sich verlassen werden, wenn Sie Dinge automatisieren möchten.

Probleme, die ich mit Ihrem Code sehe:

  • Es wird davon ausgegangen, dass sich WordPress entweder im selben Ordner oder in zwei Ordnern befindet

Wenn Sie mit diesen Annahmen einverstanden sind, ist Ihr Code sicher zu verwenden

Allerdings würde ich empfehlen, dass Sie Ihr externes Skript als Plugin in WordPress rollen.

2
Tom J Nowell

Nach dem Kodex

http://codex.wordpress.org/Integrating_WordPress_with_Your_Website

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

Ob Ihre Mittel und Methoden narrensicher sind oder nicht, hängt ganz von Ihrem Setup und dem Ort ab, an dem Sie Ihre Skripte platzieren, relativ zu Ihrer WordPress-Installation.

Angenommen, Sie befolgen die in Ihrem Code angegebene Konvention, dann sollten Sie in Ordnung sein.

Sie sollten ein detaillierteres Beispiel für den Speicherort von Skripten (einschließlich möglicher Variationen) im Vergleich zum Speicherort von WordPress bereitstellen. Wenn also jemand etwas hinzufügen kann, das Ihren Code verfeinert, ist es sinnvoll, Ihr Snippet für Ihre Verwendung zu lokalisieren Fall.

AKTUALISIEREN#

(als Antwort auf Ihren Kommentar)

Der Pfad zu Ihrer WordPress-Installation ist eine Konstante. Anstatt also einen Trick auszudenken, um herauszufinden, wo dieser Pfad liegt, geben Sie ihn wie er ist und vollständig an, genau wie im obigen Beispiel.

Wenn zum Beispiel Ihr tatsächlicher Pfad (für localhost) ungefähr so ​​ist;

c:\Apache\htdcos\wordpress

...dann,

//document root being c:\Apache\htdocs

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

Findet Ihren Dokumentenstamm, für den Sie dann das Installationsverzeichnis und die wp-blog-header.php-Datei angeben.

Ich würde dann eine .htaccess-Datei in c:\Apache\htdocs platzieren, die unter anderem Folgendes beinhalten sollte:

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

Dies beinhaltet (auto_prepend) die Datei auto_inc.php vor jeder anderen PHP Datei. Wenn Sie also eine Verzeichnisstruktur wie haben,

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

Die auto_inc.php-Datei wird in jedes der Unterverzeichnisse aufgenommen, unabhängig von der Tiefe.

In diese automatisch eingeschlossene Datei können Sie jetzt eine Funktion einfügen, die die require('/the/path/to/your/wp-blog-header.php'); umschließt, für die Sie sie beispielsweise in Ihren verschiedenen Projekten beliebig verwenden können.

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)

Oder Sie müssen die require gar nicht umbrechen und müssen sie in jeder Datei, in jedem Unterverzeichnis und in jeder Tiefe zur Verfügung haben, ohne sie erneut angeben zu müssen, damit Sie sich auf Ihre Projekte konzentrieren können.

Da das Verzeichnis /wordpress/ bereits einen eigenen .htaccess hat, wird es nicht durch den im Stammverzeichnis gefundenen .htaccess beeinflusst, wodurch Konflikte zwischen dem zweimaligen Deklarieren von Funktionen beseitigt werden.

1
userabuser

Sie müssen nur den folgenden Code anwenden, um den richtigen Pfad für den wp-blog-header.php zu erhalten.

$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

Übrigens, wenn Sie den worpdress-Kern (+ Themenfunktionen) einbinden möchten, ist es für den Benutzer besser:

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

und nicht

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