it-swarm.com.de

WPDB als eigenständiges Skript verwenden

Ich versuche, eine Verbindung zu Wordpress mithilfe der WPDB herzustellen, da es eine so schöne Klasse ist und es auch Konfigurationen gibt, die in der wp-config.php angegeben sind.

Ich werde ein kleines getrenntes Skript aus dem Haupt-Wordpress schreiben, um im Hintergrund zu laufen, das diese WPDB-Instanz verwenden muss.

Wie kann ich das archivieren?

Jede Hilfe wird geschätzt.

42
DucDigital

Der beste (schnellste und sicherste) Weg, um nur die Kernfunktionen von WordPress zu laden, besteht darin, das Flag SHORTINIT wie folgt zu verwenden:

define( 'SHORTINIT', true );

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

//Here you can use WordPress core features, for example the $WPDB object

Weitere Informationen zu diesem Thema und zum Anzeigen dessen, was geladen wird, ist das Überprüfen des Codes in /wp-settings.php. Dort finden Sie folgenden Abschnitt:

// Stop most of WordPress from being loaded if we just want the basics.
if ( SHORTINIT )
    return false;

Dies bedeutet, dass alles, was danach kommt, nicht geladen wird, und wie Sie sehen, ist es eine Menge Dinge. Der Footprint ist viel kleiner als das Laden von wp-load.php und bietet Ihnen weiterhin Zugriff auf alle integrierten Funktionen in WordPress Core, im Gegensatz zum direkten Hinzufügen von /wp-includes/wp-db.php. Viele Funktionen in WP core haben auch Abhängigkeiten in anderen Dateien und es kann ein Durcheinander sein, um genau herauszufinden, welche Dateien Sie enthalten müssen, um das tun zu können, was Sie wollen. SHORTINIT enthält die erforderlichen Abhängigkeiten, damit Sie sich keine Sorgen machen müssen.

Wenn Sie genau wissen, was Sie benötigen, zum Beispiel nur WPDB, ist der schnellste Weg, natürlich nur die Dateien einzuschließen, die Sie benötigen, aber SHORTINIT bietet eine sicherere und standardisiertere Methode zum Laden des WP - Kerns und der Abhängigkeiten. Mit SHORTINIT lädt WordPress keine Plugins, die meisten Teile der Plugin-API, Designs, Theme-Funktionen und die meisten Admin- und Frontend-Funktionen. Hier befindet sich der schwere Code in einer typischen WordPress-Installation. In den meisten Fällen denke ich, dass SHORTINIT den kleinen Kompromiss bei Geschwindigkeit/Leistung wert ist, wenn Sie nur die Dateien einbeziehen, die Sie benötigen, und es ist in den meisten Fällen eine enorme Leistungssteigerung im Vergleich zu einer Volllast.

55
Pelmered
<?php

$path = $_SERVER['DOCUMENT_ROOT'];

include_once $path . '/wp-config.php';
include_once $path . '/wp-load.php';
include_once $path . '/wp-includes/wp-db.php';
include_once $path . '/wp-includes/pluggable.php';

// $wpdb is available, do stuff
45
farinspace

Mit WordPress können Sie Ihren eigenen DBA (Database Abstraction Layer) verwenden, indem Sie einfach eine Datei mit dem Namen db.php erstellen und diese im Stammverzeichnis Ihres wp-content-Verzeichnisses speichern.

Ich hatte das Problem, dass ich über eine Klasse, die ich geschrieben hatte, auf eine Datenbank zugreifen musste, die mit WordPress nichts zu tun hatte, aber ich wollte nicht einen ganzen neuen Datenbankadministrator erstellen.

Da die Standardvariable WPDB Ihnen nicht erlaubt, das Factory-Muster zu verwenden, habe ich schnell ein paar Zeilen geschrieben, um es zu unterstützen, und es zu db.php... hinzugefügt.

<?php

class DB extends wpdb
{
  protected static $instance = null;

  public static function getInstance()
  {
    if (!self::$instance) {
      self::$instance = new DB(DB_USER, DB_PASSWORD, DB_NAME, DB_Host);
    }

    return self::$instance;
  }
}

$wpdb = DB::getInstance();

Wenn Sie nun wpdb an anderer Stelle verwenden müssen (in meinem Fall eine Nicht-WordPress-Klasse), können Sie Folgendes verwenden:

$wpdb = DB::getInstance();

aus einer Methode heraus und nicht aus der schrecklichen global.

18
Matt Humphrey

Sie können $ wpdb in der neuen .php-Datei verwenden, die sich innerhalb des Designordners befindet, indem Sie folgenden Code verwenden.

$url = (!empty($_SERVER['HTTPS'])) ? "https://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'] : "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
$url = $_SERVER['REQUEST_URI'];
$my_url = explode('wp-content' , $url); 
$path = $_SERVER['DOCUMENT_ROOT']."/".$my_url[0];

include_once $path . '/wp-config.php';
include_once $path . '/wp-includes/wp-db.php';
include_once $path . '/wp-includes/pluggable.php';

global $wpdb;
13
Ankur21

Sie müssen nur die Datei wp-load.php in Ihr Skript aufnehmen.

require('the/path/to/wp-load.php file');
4

Das sollte auch den Trick tun:

  preg_match('/^(.+)wp-content\/.*/', dirname(__FILE__), $path);
  include($path[1] . 'wp-load.php');
4
Olli Bolli

sie sollten nur request_once ('../../../wp-load.php');

und dann werden Sie alle WordPress-Klassen anhängen und alles wird geladen. Jetzt können Sie die Datenbank mit der globalen $ wpdb-Datenbank beginnen und die wpdb-Instanz wird gestartet

3
Arsalan Azhar

Die folgenden zwei Schritte sind ausreichend.

  1. Fügen Sie die Datei wp-blog-header.php ein
  2. Setzen Sie vor der Verwendung von $ wpdb als globales $ wpdb;

alle globalen Variablen, die Sie auf dieser Seite verwenden können. Stellen Sie sicher, dass Sie den korrekten Include-Pfad von wp-blog-header.php angeben. Mehrere Dateien müssen nicht hinzugefügt werden.

Schneller und leichter Weg mit nur einer Leitung 

required (dirname (FILE_). '/ wp-blog-header.php');

Grund dafür ist, dass WordPress das Laden der index.php initialisiert. Wenn Sie die index.php überprüfen, wird Folgendes angezeigt:

erfordern (dirname (_FILE_). '/ wp-blog-header.php');

Dies lädt und bootstrap WordPress. 

um WordPress außerhalb der WordPress-Installation zu verwenden, erstellen Sie einfach eine neue Datei und schreiben Sie dann: 

erfordern (dirname (_FILE_). '/ wp-blog-header.php');

dann schreiben Sie für einen Test: global $ wpdb; var_export ($ wpdb). 

jetzt haben Sie Zugriff auf alle Wordpress-API und das Datenbankobjekt $ wpdb. 

1
Devqxz