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

2013年3月の記事一覧

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フレームワークでも共通する原則なので、「困ったらグローバル宣言!」を忘れないようにしましょう!

WordPressマルチサイト時の画像アップパス&URLが変わった(3.5以降)

WordPressのマルチサイト運用時の画像のアップロードの取り扱いが変わったようです。私が気付いたのは3.5.1からだったんですが、3.5からの変更だったようです。

マルチサイト

  • サブディレクトリにインストールされた WordPress でもマルチサイト機能が利用可能に
  • ms-files.php をデフォルトで無効化
  • 新規インストールについてはファイル容量上限をデフォルトで無効化

Version 3.5 – WordPress Codex 日本語版”

これまでは、マルチサイト運用時には、
wp-content/blogs.dir/サイトID/files/
というディレクトリを作って、その中にファイルがアップロードされ、wp-includes/ms-files.php とmod_rewriteの働きによって
http://example.com/files/画像ファイル名.jpg
というURLで表示できるようになっていたわけです。

普通に、シングルの運用時のように/wp-content/uploads/ の中にアップしていたら、マルチサイトの画像が混ざってしまうからですね。

しかし3.5からはこのms-files.phpが無効になり、画像は
/wp-content/uploads/sites/サイトID/
にアップされ、
http://exanmple.com/wp-content/uploads/sites/サイトID/画像.jpg
で普通にアクセスするようになりました。
(さらに…)