Was ist der richtige Weg, um WordPress-Funktionen außerhalb von WordPress-Dateien zu verwenden?

59

Ich habe 2 Methoden zum Initialisieren der WordPress-Funktion außerhalb von WordPress-Dateien gelesen, damit wir diese Funktionen auf jeder Seite oder Website außerhalb des WordPress-Blogs verwenden können.

Welche dieser beiden Methoden ist die richtige? Was sind die Anwendungsfälle für jede Methode, wenn beide korrekt sind? Was ist der Unterschied zwischen der einen oder der anderen Methode?

Methode 1:

<?php 
    define('WP_USE_THEMES', false);
    require('./wp-blog-header.php');
?>

Methode 2:

<?php 
    define('WP_USE_THEMES', false);
    require('./wp-load.php');
?>
Alhoseany
quelle
Welche WP-Funktionen möchten Sie "außerhalb von WP" verwenden und warum? Bei beiden Methoden wird die WP-Umgebung weiterhin geladen (allerdings ohne Theme-Unterstützung), sodass Sie weiterhin Funktionen innerhalb von WP aufrufen.
EAMann
Ich versuche den Unterschied zwischen den beiden Methoden zu verstehen. Ich werde das WordPress-Theme in mein Support-Skript integrieren.
Dazu
Ich bezweifle wirklich, dass Sie so vorgehen wollen ... es gibt bessere Lösungen, als WordPress selbst zu booten.
EAMann
Ich bin offen für Vorschläge, ich suche den besten Weg, um Dinge zu tun? Wie lässt sich das WordPress-Theme am besten in eine externe Webanwendung integrieren?
Alhoseany

Antworten:

58

Es gibt kaum einen Unterschied zwischen den Dateien. Wenn Sie eine WordPress-Seite anzeigen, lautet die erste aufgerufene Datei index.php. Und es ist im Wesentlichen Ihre "Methode 1:"

define('WP_USE_THEMES', true);

/** Loads the WordPress Environment and Template */
require ('./wp-blog-header.php');

Die Blog-Header-Datei (die den Rest von WordPress in die Warteschlange stellt) wird wp-load.phpdirekt geladen und startet WordPress selbst. Hier ist das meiste von wp-blog-header.php:

if ( !isset($wp_did_header) ) {

    $wp_did_header = true;

    require_once( dirname(__FILE__) . '/wp-load.php' );

    wp();

    require_once( ABSPATH . WPINC . '/template-loader.php' );

}

Der Unterschied zwischen Ihren beiden Methoden ist also ... was geladen ist.

Methode 1 ist genau das, was WordPress tut, um sich selbst zu laden (mit Ausnahme des Deaktivierens von Themen). Wenn Sie also ganz WordPress benötigen und alle Standard-Hooks / -Aktionen auslösen möchten, gehen Sie auf diese Route.

Methode 2 ist nur ein weiterer Schritt auf der ganzen Linie. Es lädt alles von WordPress, ruft aber nicht wp()den Template Loader auf (der von Themes verwendet wird). Methode 2 ist etwas leichter, sollte aber die gleiche Funktionalität bieten.

EAMann
quelle
3
Gibt es ein Diagramm oder etwas, das all diese Dateien abbildet? Ich habe es vor langer Zeit gesehen, aber ich kann es nicht finden.
Ninja08
17

Methode 2 aus Ihrer Frage:

<?php 
define( 'WP_USE_THEMES', false ); // Don't load theme support functionality
require( './wp-load.php' );

wp-load.phpist der Zugriff auf alle Funktionen von WordPress, das ist alles. In der ersten Zeile wird WordPress angewiesen, nicht die Themendateien zu laden. Vielleicht sind die Dateien für Ihre Anforderungen notwendig, dann entfernen Sie die Zeile.

bueltge
quelle
1
Was bedeutet diese erste Zeile überhaupt?
Sagive SEO
8
In der ersten Zeile wird WordPress angewiesen, nicht alle Funktionen zur Unterstützung von Designs zu laden. Laden Sie grundsätzlich weniger Dateien.
EAMann
Wird die erste Zeile nur für die erste Methode benötigt?
mcont
4

wp-blog-header.php fügt einen Header-Status hinzu und gibt den http-Statuscode 404 zurück

wp-load.php geht nicht

Nützlich, wenn Sie Ajax verwenden, um den http-Statuscode zu überprüfen

RayLau135
quelle
2

Manchmal kann das Laden der functions.php des Themes zu Problemen führen. Es hat den HTML-Code meiner anderen Seite verletzt. So habe ich es gemacht und mein Problem gelöst:

define('STYLESHEETPATH', '');
define('TEMPLATEPATH', '');
require_once(RAIZ_WORDPRESS."/wp-load.php");
Wellington Lorindo
quelle
0

@ ninja08

Wir können die xDebug-PHP-Erweiterung verwenden, um ein Skript zu analysieren.

nur ermöglichen , ;xdebug.profiler_enable = 1in Ihrer php.iniDatei durch Entfernen ;von der ersten Linie und nach diesem Neustart Apache - Server und führen Sie Ihre Wordpress - Seite ... jetzt eine Datei erstellt in tmp - Verzeichnis Ihrer XAMPP Server ..open diese Datei mit WincachGrind Anwendung.

Jetzt können Sie eine Karte Ihres Skripts sehen

WincacheGrind Einfache Wordpress-Analyse

Mostafa
quelle
Sie sollten dies im Kommentar unter ninja08 hinzugefügt haben. Das ist jetzt eine falsche Antwort.
Alhoseany
2
@alhoseany ja..ich jetzt schon ... aber ich habe nicht genug Ruf ... und dann entscheide ich mich dazu.
Mostafa