Подтвердить что ты не робот

Использование WPDB в автономном режиме script?

Я пытаюсь подключиться к WordPress с помощью WPDB, потому что это такой красивый класс, а также есть конфигурации, которые указаны в wp-config.php, поэтому мне не нужно будет указывать его снова.

Я собираюсь написать небольшой отдельный скрипт из основного WordPress для запуска в фоновом режиме, который должен будет использовать этот экземпляр WPDB.

Как я могу заархивировать это?

Любая помощь приветствуется.

4b9b3361

Ответ 1

Самый лучший (самый быстрый и безопасный) способ загрузки только загрузки основных функций WordPress - использовать флаг SHORTINIT следующим образом:

define( 'SHORTINIT', true );

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

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

Для получения дополнительной информации об этом и просмотра загружаемого кода необходимо проверить код в /wp-settings.php. Там вы найдете следующий раздел:

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

Это означает, что все, что после этого не будет загружено, и это довольно много, как вы можете видеть. Отпечаток будет намного меньше, чем просто загрузить wp-load.php и по-прежнему дает вам доступ ко всем встроенным функциям в ядре WordPress, в отличие от, например, /wp-includes/wp-db.php. Многие функции в ядре WP также имеют зависимости в других файлах, и может быть беспорядок, чтобы точно определить, какие файлы вам нужно включить, чтобы иметь возможность делать то, что вы хотите. SHORTINIT включает необходимые зависимости, поэтому вам не нужно беспокоиться об этом.

Если вы точно знаете, что вам нужно, например, только WPDB, самый быстрый способ, конечно, включать только файлы, которые вам нужны, но SHORTINIT обеспечивает более безопасный и более стандартизованный способ загрузки ядра WP и зависимостей. С SHORTINIT WordPress не загружает плагины, большинство частей API плагина, темы, функции темы и большинство функций администратора и внешнего интерфейса. Здесь тяжелый код находится в типичной установке WordPress. В большинстве случаев я думаю, что SHORTINIT стоит небольшой компромисс в скорости/производительности по сравнению с тем, чтобы включать только файлы, которые вам нужны, и это в большинстве случаев огромное увеличение производительности по сравнению с полной нагрузкой.

Ответ 2

<?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

Ответ 3

WordPress фактически позволяет вам использовать собственный DBA (уровень абстракции базы данных), просто создав файл с именем db.php и сохраните его в корневом каталоге wp-content.

У меня возникла проблема с доступом к базе данных через класс, который я написал, который ничего не делал с WordPress, но я не хотел создавать совершенно новый DBA, просто перейдите с этим script.

Так как по умолчанию WPDB не позволяет использовать шаблон factory, я быстро написал несколько строк для его поддержки и добавил его в db.php...

<?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();

Теперь, когда вам нужно использовать WPDB из другого места (в моем случае класс, отличный от WordPress), вы можете использовать juse:

$wpdb = DB::getInstance();

из метода, а не ужасного global.

Ответ 4

Вы можете использовать $wpdb в новом .php файле, который находится внутри папки темы, используя следующий код.

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

Ответ 5

Вам просто нужно включить файл wp-load.php в свой script.

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

Ответ 6

Это тоже должно сделать трюк:

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

Ответ 7

Вам просто нужно require_once('../../../wp-load.php');

И тогда вы все классы WordPress, хуки и все будет загружено. Теперь вы можете начать взаимодействовать с базой данных, используя global $wpdb; и экземпляр wpdb будет запущен.

Ответ 8

Достаточно выполнить два шага.

  • Включить файл wp-blog-header.php
  • Прежде чем использовать $wpdb, поставьте глобальный $wpdb;

любые глобальные переменные, которые вы можете использовать на этой странице после этого. Убедитесь, что вы указали правильный путь wp-blog-header.php. Нет необходимости включать несколько файлов.

Ответ 9

Быстрый и легкий способ только с одной линией

require (dirname (_FILE__). '/wp-blog-header.php');

Причина в том, что WordPress инициализирует загрузку index.php, и когда вы проверяете index.php, вы видите:

require (dirname (__FILE__). '/wp-blog-header.php');

Это загружает и загружает WordPress.

поэтому, чтобы использовать WordPress вне установки WordPress, просто создайте новый файл и напишите:

require (dirname (__FILE__). '/wp-blog-header.php');

затем для теста напишите: global $ wpdb; var_export ($ wpdb).

так что теперь у вас есть доступ ко всем WordPress API и объекту базы данных $ wpdb.