WordPressの自作プラグインでAjaxする方法で、正しく行う方法がないか探していた。Googleで検索しても、Ajaxを使ってるプラグインの情報がたくさん出てくるばっかりで、作り手に有益な情報を調べるにまでいけなかった。だから、必要なファイルのみを無理矢理require_onceで読み込んでインスタンスを生成してから、やりたい処理を行うという強引な方法を取っていた。しかし、Ajaxしたいところで毎回require_onceをやるのは面倒だし、正しくやる方法があるに違いないと思っていたら、あったよ!やっぱり!
http://wpdocs.sourceforge.jp/AJAX_in_Plugins
上のサイトの例では、javascriptライブラリとしてSACKを使っているが、俺はprototype.js&scriptaculousファンなので、prototype.jsを使ったAjaxで勝負!
まず、プラグイン側でjavascriptファイルを読み込む設定を行う。
プラグインの名前は、hogeとします。
/** * /wp-content/plugins/hoge/hoge.php * * 管理画面でjavascriptを読み込む */ add_action('admin_enqueue_scripts', 'hoge_script_admin'); function hoge_script_admin($hook_suffix){ // 指定したページのみでjsを読み込むために、条件を設定 // ここではhogeプラグインのカテゴリー管理ページに焦点と絞ったとする if (preg_match('/page_hoge_category_list$/', $hook_suffix)) { // hoge_category.jsと、prototype.jsを読み込む wp_enqueue_script('hoge_category', plugins_url('hoge/js/hoge_category.js'), array('prototype'), '1.0', false); } }
次に、hoge_category.js側に処理を記述する。
関数 update_category_list が呼ばれると、Ajaxでカテゴリーリストを更新する想定です。
function update_category_list(){ // ajaxurlはWordPressが定義してくれてる var params =[]; // Ajaxアクションを指定 params.push('action=hoge_get_category'); // あとは必要なパラメータを設定 params.push('abc=xyz'); new Ajax.Updater( 'category_list', // 更新される領域のID ajaxurl, { method: 'post', parameters: params.join('&') } }); }
最後に、hoge_category.jsから呼ばれるサーバ側の処理を記述する。
// ajaxで呼ばれるアクションを追加する add_action('wp_ajax_hoge_get_category', 'hoge_get_category'); // 実際に呼ばれるアクションを定義する function hoge_get_category(){ $output = '<ul>' . "\n"; for($i = 1; $i < 10; $i++){ $output .= '<li>カテゴリーその'. $i .'</li>' . "\n" } $output .= '</ul>' . "\n"; echo $output; }
これで、カテゴリーリストがAjaxで更新されます。