2011-03-15 14 views
30

私はWPDBを使ってWordpressに接続しようとしています。それはとても美しいクラスで、wp-config.phpで指定された設定があるので、もう一度指定する必要はありません。スタンドアロンスクリプトでWPDBを使用していますか?

このWPDBインスタンスを使用する必要があるバックグラウンドで実行するために、メインのwordpressから小さな切り離されたスクリプトを書きます。

どうすればこのファイルをアーカイブできますか?

何か助けていただければ幸いです。

答えて

40

のみロードのWordPressのコア機能をロードするための最良の(最速かつ最も安全な)方法は、このようなSHORTINITフラグを使用することです/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を使用した方が最適です。 –

+0

ありがとうございます!これはまさに私が必要としていたものです。 wp-db.php自体には含まれていない無関係のWP機能が必要です。これにより解決されます。 –

41
<?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 
+20

'wp-load.php'で十分ではありませんか? –

+2

はい、wp-loadだけで十分です。残りの部分はすべて読み込まれます。つまり、すべてのプラグインを含むWordPressがすべて読み込まれています。 –

16

WordPressは実際にあなただけのdb.phpというファイルを作成し、あなたのwp-contentディレクトリのルートにそれを保存することにより、独自のDBA(データベース抽象化レイヤ)を使用することができます。

私は、私が書いたクラスを使ってデータベースにアクセスする必要があるという問題がありました。これはWordPressには何もしませんでしたが、このスクリプトだけで新しいDBAを作成したくはありませんでした。

デフォルトWPDBあなたは工場出荷時のパターンを使用することはできませんので、私はすぐにそれをサポートするために数行を書き、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を使用する必要がする場合むしろ恐ろしいglobalよりも、メソッド内から

$wpdb = DB::getInstance(); 

:他の場所(私の場合非WordPressのクラスで)、あなたが使用することを日科技連することができます。

+0

$ wpdbを取得する美しい方法 – hidden

+0

うわー、どこでWordPressのDBAとdb.phpファイルについてもっと知ることができますか? – BenRacicot

+0

この問題は、コードではまだapply_filterのようなWordPress関数が呼び出されています。私は、他の無関係のPHPファイル(またはすべてのもの)を含める必要があることを回避しようとしています。 –

11

次のコードを使用して、テーマフォルダの内側にある新しい.phpファイルで$ wpdbを使用することができます。

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

私が見る限りでは、これはWordPressのすべてをロードせずに、wpdbを使うための最小限のコードをロードする唯一の方法です。 –

2

以下の2つのステップで十分です。

  1. は、グローバルの$ wpdbとして置くの$ wpdbを、使用する前
  2. WP-ブログ - header.phpのファイルを含めます。

その後、このページで使用できるグローバル変数です。 wp-blog-header.phpの正しいインクルードパスを指定してください。複数のファイルを含める必要はありません。

3

あなたはrequire_once( '../../../ wp-load.php');

あなたはすべてのワードプレスクラスフックとすべてが読み込まれます。今すぐグローバル$ wpdbを使用してデータベースでinterectを開始することができ、wpdbインスタンスが起動されます

4

wp-load.phpファイルをスクリプトに含めるだけです。この詳細については

define('SHORTINIT', true); 

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

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

とロードされているものを参照してください:

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

これはあまりにもトリックを行う必要があります:1行だけで

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

高速かつ軽量な方法は

です(dirnameは(_FILE__)が必要です '/ WP-ブログ - header.phpの。 ');ワードプレスは、index.phpのをロードし初期化し、あなたがindex.phpのを確認したときに、あなたが見るので

理由がある:

が必要(のdirname(__FILE__) '/ WP-ブログ - header.phpの'。) ;

これはワードプレスを読み込み、ブートストラップします。

ので、インストールワードプレスの外でワードプレスを使用するには、単純に新しいファイルを作成し、書き込み:

は(dirnameは(__FILE__) '/ WP-ブログ - header.phpの' を。)が必要です。

次に、テスト用に、次のように記述します。global $ wpdb; var_export($ wpdb)。

これで、すべてのwordpress APIとデータベースオブジェクト$ wpdbにアクセスできます。

関連する問題