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

36

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

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

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

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

Теги:
wpdb

9 ответов

51
Лучший ответ

Самый лучший (самый быстрый и безопасный) способ загрузки только загрузки основных функций 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 стоит небольшой компромисс в скорости/производительности по сравнению с тем, чтобы включать только файлы, которые вам нужны, и это в большинстве случаев огромное увеличение производительности по сравнению с полной нагрузкой.

  • 0
    Это, безусловно, лучший ответ!
  • 0
    Безусловно, лучший ответ с использованием SHORTINIT для пользовательских сценариев - это ОЧЕНЬ быстрее.
Показать ещё 2 комментария
42
<?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
  • 22
    Разве wp-load.php достаточно?
  • 2
    Да, wp-load достаточно, он загружает все остальное - другими словами, это загрузка всего WordPress, включая все плагины.
18

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.

  • 0
    прекрасный способ получить $ wpdb
  • 0
    Вау, где я могу узнать больше о DBA WordPress и файле db.php?
Показать ещё 2 комментария
12

Вы можете использовать $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;
  • 1
    Насколько я вижу, это единственный упомянутый здесь способ загрузки минимального кода, чтобы просто использовать wpdb, без загрузки всего WordPress ...
  • 0
    Этот ответ решил мою проблему на тот же вопрос.
4

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

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

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

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

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

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

2

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

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

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

1

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

требуется (имя_директории (_FILE __) '/WP-блог-header.php').

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

требуется (Dirname (__ FILE __) '/WP-блог-header.php').

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

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

требуется (Dirname (__ FILE __) '/WP-блог-header.php').

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню