WordPress制作、カスタマイズ、Webシステム開発とSEO対策

Fatal error: Call to a member function get_results() on a non-object… の解決策

WordPressで、用意されているWordPress関数でなくオリジナルな挙動をする関数を自作するとき、便利なのが$wpdbクラスですね。
query、insert、get_resultsなど各メソッドの引数にSQL文を入れることによって、WordPressのMySQLデータベースから自由自在に結果を出し入れすることができます。

…と思ったら、あれっ?
フェイタルエラーが出てしまった!

Fatal error: Call to a member function get_results() on a non-object….
Fatal error: Call to a member function query() on a non-object….
Fatal error: Call to a member function insert() on a non-object….

はい。functions.phpの中の関数などにコードを余所からコピーしてきた場合など、上記のエラーが出て困った人も多いのではないでしょうか。

このエラーは「メンバー関数(メソッド)をオブジェクトでない場所で使おうとしてますよ」という意味です。

こんな時は慌てず

global $wpdb;

のグローバル宣言をそれより前に挿入します。
WordPress で DB にアクセスするには wpdb クラスを使います。グローバル変数 $wpdb でアクセスすることが可能です。
PHPでは、グローバル変数を関数の内部で使用する場合、関数の内部でグローバルとして宣言しておく必要があります。

上記はWordPressの例ですが、他のPHPフレームワークでも共通する原則なので、「困ったらグローバル宣言!」を忘れないようにしましょう!

コメントを残す