JavaScript を利用したページ作りは、WordPress ではどのように実現するか? について、探し方が悪かったのか良い方法が見つけられなかった。そこで自分なりに考え、以下の方法で解決することにした。
post(実際はpostmetaテーブル)データにカスタムフィールドが登録できる、と言う機能には正直感心した。これのおかげで、非常に拡張性 に富んだ作業が行なえると感じたからだ。今回カスタムフィールドに登録するデータは、ライブラリ読み込みの例としてjQueryを読み込むためのデータ と、プログラムを読み込む例としてjQueryを利用したプログラムである。
それぞれのキーを、ライブラリは「js」、プログラムは「script」とする。
ところで外部ライブラリの読み込みは、テンプレートに直接書けば可能だ。が、利用しない表示ページにも読み込まれてしまうので、あまり嬉しくない。 ここはライブラリを利用する投稿またはページを表示するときだけ、必要なライブラリを読み込むようにしたいので、カスタムフィールドを利用することにし た。
ライブラリの読み込みは、WordPress で用意されている「wp_enqueu_script()」関数を利用するので、その関数に必要なパラメータを、カンマ区切りで登録する。パラメータは、 ハンドル名、ソースのURL、依存するライブラリのハンドル名、バージョンとなる。
jQueryの読み込みを例に取ると
wp_enqueue_script('jquery','/js/jquery/jquery-1.3.2.min',false,'1.3.2');
とすれば良い。WordPress 側は、同じライブラリが登録されても2重に読込みしないようにしてくれる。また、テンプレート上の「wp_head()」を記述したところに、ライブラリを読み込むHTMLを挿入してくれる。
カスタムフィールドの値は、「jquery,/js/jquery/jquery-1.3.2.min,0,1.3.2」とする。
余談だが、jQueryはデフォルトでWordPressのシステムに登録されているため、上のように記述しても、WordPress の方からロードする。また、「jQuery.noConflict();」も追加されているので、そのままでは「$()」を利用できない。
ヘッダ部のテンプレートは、デフォルトで「header.php」ファイルである。「</head>」タグの上を見ると、 「<?php wp_head(); ?>」があるので、この上にライブラリを読み込むPHPのソース、この下にプログラムを読み込むためのPHPのソースを、それぞれ追加する。
<?php if (is_singular()) { $src = get_post_meta($post->ID, 'js'); if (!empty($src)) { $opt = explode(',', $src[0]); wp_enqueue_script($opt[0],$opt[1],$opt[2]==0?false:true,$opt[3]); } } ?>
投稿記事またはページを表示するときだけ、そのページのライブラリ情報のカスタムフィールドを取得し、その情報を元に WordPress に読込みの登録をする。
次に、プログラムの読込みである。「<?php wp_head(); ?>」と「</head>」の行間に以下のPHPソースを挿入する。
<?php if (is_singular()) { $script = get_post_meta($post->ID, 'script'); if (!empty($script)) { ?> <script type="text/javascript"> //<![CDATA[ <?php echo $script[0]; ?> //]]> <?php }} ?>
上と同様、投稿記事またはページを表示するときだけ、そのページに登録されたプログラムのカスタムフィールドを取得し、(X)HTMLにタグで囲んだプログラムを挿入するようにする。
実験したプログラムは、次のものを試してみた(scriptキーに登録した値)。
jQuery(document).ready(function() { $ = jQuery; $("p").click(function() { alert("キタ━━━━(゚∀゚)━━━━ !!!!!"); }); });
動作が確認できたときは、少し嬉しかった。自分で作ったブログシステムを捨てて WordPress へ置き換えるのは寂しいが、WordPress の持つCMSとしての未来にはワクワクするものを感じる。ので、相殺と言うことで(^_^;)。
WordPress のバージョンは、2.8.4。
Firefoxを利用してフォームのtextareaにタブを挿入したい場合、「Tab in Textarea(tabinta)」アドオンを利用すると良い。フォーム表示画面でのタブキーは、項目移動に使われるので、「shift+tab」でタ ブが挿入されるように設定して使っており、便利いいです、hai。