$wpdb->optionsや$wpdb->postmetaと指定してもテーブル名が取得できない場合は、下記の順番でチェックします。
$wpdbのテーブル名が取得できない
- global変数をチェック
- wp-load.phpの読み込みをチェック
global変数をチェック
$wpdbを使うなら、global宣言が必要です。
$wpdb->optionsを関数の中で呼んでいるなら、関数の内側で宣言が必要です。
global変数だからどこからでもアクセスできるように、関数やメソッドの外側で宣言してもうまくいきません。
<?php //うまくいかない例 global $wpdb; function hoge() { echo $wpdb->options; //global宣言していないので✕ } ?>
global宣言は、関数の外側(スコープ外)にあるglobal変数を、関数の内側で利用するための宣言なので、下記のように記述します。
<?php //うまくいく例 function hoge() { global $wpdb; echo $wpdb->options; //wp-options } ?>
wp-load.phpの読み込みをチェック
$wpdbは、wp-load.phpが読み込まれていないと使えません。
独自開発したPHPファイルの場合は、上記のPHPファイルを読み込まないとglobal宣言しても使えないことがあります。
require_onceで読み込んでから、関数の中でglobal宣言して使いましょう。
<?php require_once ( ABSPATH . "wp-load.php"); function hoge() { global $wpdb; echo $wpdb->options; //wp-options } ?>
メモ
「ABSPATH」は、wp-config.phpが存在しているディレクトリのフルパスに「/」がついたものです。
「関数の中でグローバル変数を扱うときは、global宣言してから使う」というのがglobal変数の使い方です。
スーパーグローバル変数
global変数に似ているものに「スーパーグローバル変数」があります。
これは、関数やメソッドの内部で使用する場合でも「global $variable;」のようにしなくても使えます。
<?php $GLOBALS[$key] = $value; ?>
$GLOBALS以外にも、$_SERVER、$_POST、$_GETなどもスーパーグローバル変数です。
例えば、フォームなどのデータをGETで送信した場合、$_GETでどこでも取得できます。
<?php echo( $_GET['name'] ); function hoge() { echo( $_GET['name'] ); } ?>
$wpdbを使うメリット
WordPressのテーブル名は、インストール時に指定したプレフィックスが追加されます。
テーブル名(wp_optionsなど)を直書きすると、プレフィックスを追加したWordPressでは動きません。
$wpdb->optionsや$wpdb->postmetaと指定すると、プレフィックスが付いた状態のテーブル名を指定できます。
メモ
ただし、$wpdbを使うのは最終手段で、可能なかぎり提供されているAPIを使ってDB操作をした方がいいです。
【まとめ】$wpdbのテーブル名が取得できない
$wpdbのテーブル名が取得できない場合は、関数やメソッド内でglobal宣言をして利用します。
function hoge() { global $wpdb; echo $wpdb->options; //wp-options } ?>
global変数は、関数やメソッドの外側にあるグローバル変数を、関数やメソッドの内側で使うと宣言するものです。
global宣言でも使えない場合は、require_onceを使って「wp-load.php」を読み込みます。