Using WPDB in standalone script?

2019-01-02 15:46发布

I am trying to connect to Wordpress using the WPDB because it's such a beautiful class and also there are configurations that specified in wp-config.php so i won't need to specify it again.

I going to write a small separated script from main wordpress to run in background that will need to use this WPDB instance.

How can I archive this?

Any help is appreciated.

9条回答
永恒的永恒
2楼-- · 2019-01-02 15:56
<?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楼-- · 2019-01-02 16:05

you should just require_once('../../../wp-load.php');

and then you all wordpress classes hooks and everything will loaded. now you can start interect with database using global $wpdb and wpdb instance will be started

查看更多
后来的你喜欢了谁
4楼-- · 2019-01-02 16:07

WordPress actually allows you to use your own DBA (database abstraction layer) just by creating a file called db.php and saving it in the root of your wp-content directory.

I had the problem of needing to access a database via class I wrote, that had nothing todo with WordPress, but I didn't want to create a whole new DBA just go with this script.

Since the default WPDB does not allow you to use the factory pattern, I quickly wrote a few lines to support it, and added it to 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();

Now when needing to use wpdb from elsewhere (in my case a non-WordPress class), you can juse use:

$wpdb = DB::getInstance();

from within a method, rather than the horrible global.

查看更多
明月照影归
5楼-- · 2019-01-02 16:11

You can able to use $wpdb in new .php file which is inside of theme folder, by using following code.

$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;
查看更多
君临天下
6楼-- · 2019-01-02 16:11

You just need to include the wp-load.php file into your script.

require('the/path/to/wp-load.php file');
查看更多
有味是清欢
7楼-- · 2019-01-02 16:12

The best(fastest and safest) way to load only load the core functionality of WordPress is to use the SHORTINIT flag like this:

define( 'SHORTINIT', true );

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

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

For more information about this and see what is loaded, is to check the code in /wp-settings.php. There you will find the following section:

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

This means that anything after this won't be loaded, and it's quite a lot of things as you can see. The footprint will be much smaller than just loading the wp-load.php and still gives you access to all the all the built in functions in WordPress core, unlike including for example /wp-includes/wp-db.php directly. Many functions in WP core also has dependencies in other files and it can be a mess to figure out exactly what files you need to include to be able do what you want. SHORTINIT includes the needed dependencies so you don't have to worry about this.

If you know exactly what you need, for example only WPDB, the fastest way is of course to only include the files you need, but SHORTINIT provides a safer and more standardised way to load the WP core and the dependencies. With SHORTINIT WordPress does not load plugins, most parts of the plugin API, themes, theme functions and most admin and frontend functions. This is where the heavy code is in a typical WordPress install. In most cases I think SHORTINIT is worth the small tradeoff in speed/performance compared to including only the files you need and it's in most cases a huge performance boost compared to a full load.

查看更多
登录 后发表回答