ワードプレス

WordPressで$wpdbオブジェクトでテーブル名が取得できない

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

-ワードプレス
-,