WordPressのプラグイン「Custom Field Suite」はAdvanced Custom Fieldより使いやすいと以前紹介させていただいた参考サイトに書いてありました。そしてなによりCustom Field Suiteのループを利用して、カスタムフィールドを追加できる点がすばらしいと思います。
Advanced Custom Fieldsにも似た機能あるらしいですが、何しろ有料アドオンのため考えどころでした。こちらは無料で利用できます。
参考サイト:http://komodo.arrow.jp/wp/733
基本的な使い方には上記の参考サイトを利用した方が分かりやすいのでそちらを見てもらい、今回はCustom Field Suiteのループをテーマ内ではなく投稿入力画面で利用できるようにショートコードを作成してみようというものです。
たとえばIDやクラスを指定しているのでクライアント様の方で追加・削除するときはHTMLを編集しなきゃいけない部分があって、そしてそれが投稿の途中にあるのでカスタムフィールドを何個もつけたくないしどうしようみたいなとき。
ショートコードを作ればHTMLをいじらずに編集でき、ループはカスタムフィールドを投稿別に追加・編集・削除できるのでうってつけかと。入力した値を他のページでも使いたい場合などは投稿タイプを関連させた方もいいかもですが、この場合は投稿画面上で編集して追加したいときに利用するといいと思います。
例として、飲食店のメニュー表をカスタムフィールドに入力しているとします。
フィールド名、吐き出されるHTMLやそのクラス名は任意のもので変更できますが、以下のようにフィールドグループを作成したとします。
コメントをいただいたのですが、ちょうど他の投稿のデータを取る必要が出てきたので、
追記(2014.01.30)として投稿IDを指定しても挿入できるようにしました。
これにより他の投稿でも表示することが出来ます。
- ループのフィールド名・・・「menu」
- 料理名のフィールド名・・・「menutitle」
- 料理の画像(URL)・・・「menuimg」
- 料理の説明・・・「menuimg」
以下はテーマ内のfunctions.php内に記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
function menubox($atts) { extract(shortcode_atts(array( 'id' => "" ), $atts)); global $cfs; if(empty($atts)) : $fields = $cfs->get('menu'); else : $fields = $cfs->get('menu',$atts['id']); endif; $menucode = ''; foreach ($fields as $field) { $menutitle = $field['menutitle']; $menuimg = $field['menuimg']; $menutext = $field['menutext']; $menucode .= '<div class="MenuBox">'; $menucode .= '<h2>'.$menutitle.'</h2>'; $menucode .= '<p class="Img"><img src="'.$menuimg.'" /></p>'; $menucode .= '<p>'.$menutext.'</p>'; $menucode .= '</div>'; } return $menucode; } add_shortcode('menu', 'menubox'); |
「$menucode」は吐き出す変数、「.=」は付け足していく感じです。自由にHTML変えたり出来るかと思います。
ifとかでメニューが入っているか確かめた方がいいのかもですが、こうすれば投稿画面内で[menu]
と入れればカスタムフィールドに入力したものが一覧表示されます。
たぶん吐き出されるHTMLは以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 |
<div class="MenuBox"> <h2>料理名1</h2> <p class="Img"><img src="料理1の画像のURL" /></p> <p>料理1の説明が入ります。</p> </div> <div class="MenuBox"> <h2>料理名2</h2> <p class="Img"><img src="料理2の画像のURL" /></p> <p>料理2の説明が入ります。</p> </div> ・ ・ |
はじめまして。
ちょうど、Custom Field Suite を使って悩んでいたところです。
固定ページ内にカスタムフィールドを作っています。
その値を、トップページ(home.php)に読み込ませたいのですが、うまくできません。
上記ショートコードを作ったらうまくいくのかなと試したのですが、ショートコードがそのまま表示されてしまいました。
良い方法がありましたら、ぜひ教えてください。
よろしくお願いいたします。