web-dev-qa-db-ja.com

$ wpdbを初期化する方法

1つのCUSTOMフォームのデータをチェックするために、テーマルートに.phpページがあります。このデータを受け取った後、カスタムmysqlテーブルでクエリを実行する必要があるので、$ wpdbが必要ですが、それは物理的な.phpファイルであるため直接使用することはできません(またはglobal $wpdbを実行する)。書き換えルールはリクエストに影響しません(リクエストがファイルが存在するためindex.phpに渡されません)。

だからこの場合どのように私はオブジェクト$ wpdbを作成することができますか?

ありがとう

2
Dail

まず最初に、WP filesの傘下にない独立したファイルを作成したでしょう。だからこそ、あなたは$ wpdbを手に入れていません。私はあなたがテーマ開発の一般的な規則/慣習に従わないかもしれないと思います。私の質問は今どのようにあなたはファイルにアクセスしていますか?

とにかく、あなたのファイルにwp_config.phpを含めると、あなたはあなたのファイルに$ wpdbを得るでしょう。

themesディレクトリの下のディレクトリを考慮して、ファイルをインクルード/要求する方法は次のとおりです。

require_once ('../../../wp-config.php');

あなたのシステムに基づいてパスを変更する必要があるかもしれません。

1
HungryCoder
require_once( 'path/to/wordpress/wp-includes/wp-db.php' );
if ( file_exists( 'path/to/wordpress/wp-content/db.php' ) )
    require_once( 'path/to/wordpress/wp-content/db.php' );

$wpdb = new wpdb( 'user', 'password', 'database', 'Host' );

WordPressによる初期化方法については、wp-includes/load.phpの326行を参照してください。

1
sorich87

まず、HungryCoderというユーザーが言っていることが正しいことに注意してください。 あなたのファイル、WordPressには好まれていない

あなたの開発者、そしてLinuxサーバ上で動作する可能性のある一つの解決策は以下の通りです。

include( $_SERVER['DOCUMENT_ROOT'] . '/wp-load.php');

優れた解決策は:

my_wpdb('test','pass',  'database', 'Host', '../path/to/wp/');

関数

function my_wpdb($user, $pass, $db, $Host, $path_to_root= '/../../../../../../', $run_wp_config=true){
    $path_to_wp=  dirname(__DIR__) .$path_to_root;
  //execute wp-config, if not run already
    if($exec_config && !defined('DB_Host')){    preg_match('/\<\?php(.*?)\/\* That\'s all, stop editing/si',  file_get_contents($path_to_root."wp-config.php"), $found);    eval($found[1]);    }
    require_once( $path_to_wp.'wp-includes/wp-db.php' );    if ( file_exists($path_to_wp.'wp-content/db.php' ) ) require_once($path_to_wp.'wp-content/db.php' );
    return $GLOBALS['wpdb'] = new wpdb( $user, $pass, $db, $Host );
}
0
T.Todua