WordPressでfunctions.phpから名前空間を使用しているクラスを呼び出す方法について説明します。PHP初心者による自分用のメモなので、参考程度にしてください。ちなみに、テーマはTwenty Sixteenを使用しています。他のテーマでは動かない可能性もあります。
ソースコード
functions.phpから自作ライブラリMyClassを呼び出します。名前空間はMyNameです。
// my_class.php namespace MyName; class MyClass { private string $id; private string $test = "test"; public function __construct(string $id) { $this->id = $id; } public function getString(): string { // ソースコードをシンプルにするため、$idの値関係なく"test"を返しています。 return $this->test; } }
// functions.php use MyName\MyClass; // メソッドの外でクラスをインポート function my_class_sc($atts){ extract(shortcode_atts(array( 'id' => 'default' ), $params)); ob_start(); $id = $atts['id']; include_once $_SERVER['DOCUMENT_ROOT'] . '/plugins/my_class/my_class.php'; // use MyName\MyClass; // WordPress全体がエラーになる $myClass = new MyClass($id); // useあり OK / useなし Class 'MyClass' not found // $myClass = new \MyName\MyClass($id); // useなし OK echo $myClass->getString(); return ob_get_clean(); } add_shortcode('my_class', 'my_class_sc');
<!-- WordPressのエディタ --> [my_class id="id"]
下記の書籍で、PHPの名前空間、useキーワードについて学べます。