$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」を読み込みます。