今回はWordpress側に管理画面を作らずにWordpressにCakephpのデータ表示のみ行います。
Wordpressは3.3.1、Cakephpは古いですが1.2.10
例として、Yahoo地図のように都道府県を指定すると市町村一覧を表示する簡単なものを作ります。
Cakephpで都道府県IDが付いた市町村データがあるものとします。
WordPress側から「http:www.example.com/city?pref=13」のように引数を指定してアクセスし、引数でCakephpからデータを抽出して表示します。
スラッグ「city」の固定ページに表示しますので、テーマに「page-city.php」を作成します。
Cakephpの設定
参考サイトと同じようにCakephpのindex.phpを変更。
モデル、コントローラーは通常のCakephpと同じ。ビューは使用しません。
function city_list($id=null) {
if ($id) {
$this->City->recursive = 0;
$condition = array(
'conditions' => array(
'City.pref_id' => $id
)
);
$citys = $this->City->find('all',$condition);
return $citys;
}
}
DBから抽出したデータをreturnします。
WordPressの設定
今回はプラグインにしていますが、function.phpに書いても動くと思います。
Plugin Name: Test Cake
Plugin URI: http://www.example.com/
Description: Test Cakephp Plugin
Author: xxxxxx
Author URI: http://www.example.com/
Version: 0.1
* ---------------------------------------- */
/* ----------------------------------------
* query_var に追加
* ---------------------------------------- */
function add_my_query_var($vars) {
$vars[] = 'pref';
return $vars;
}
add_filter('query_vars', 'add_my_query_var');
/* ----------------------------------------
* Cakephp
* ---------------------------------------- */
class WPCakePHP {
var $controller;
function __construct() {
//require_once($_SERVER['DOCUMENT_ROOT'].'/webroot/cakephp.php');
require(ABSPATH.'/webroot/cakephp.php');
App::import('Controller', 'Tests');
$this->controller = new TestsController();
$this->controller->constructClasses();
}
}
testcake.phpを作りpluginsに入れて有効化します。
テーマは通常のpage.phpをコピーしてpage-city.phpにします。
query_varsに引数のprefが入ってきますので、
$wp_query->query_vars[‘pref’]
で値が取得できます。
表示部分はCakephpのビューと同じようにモデル付きで
$cake = new WPCakePHP();
$citys = $cake->controller->city_list($wp_query->query_vars['pref']);
echo '<ol>';
foreach($citys as $city) {
echo '<li>'.$city['City']['name'].'</li>';
}
echo '</ol>';
?>
とするとWordpressのテーマを使い、Cakephpのデータを表示できます。
ちなみに、プラグイン専用のテーマを使いたい時は
add_filter('template_include', 'my_custom_template');
function my_custom_template($incFile) {
global $wp;
global $wp_query;
if (条件を指定する) {
$incFile = MY_PLUGIN_TEMPLATES . '/テンプレート名.php';
}
return $incFile;
}
専用テーマを使うトリガーが何になるかによって違いますが、
ページ名が「abc」の時に使うのであれば
と条件をつけて設定すれば、abcの時だけ専用テーマになります。
日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)