この記事ではWordpress3.2を使用しています。
カテゴリー編集に項目を追加
さっそくですがカテゴリー編集画面に項目を追加してみましょう。
現在使用している「functions.php」に以下を追加します。
functions.php
add_action ( 'edit_category_form_fields', 'extra_category_fields'); function extra_category_fields( $tag ) { $t_id = $tag->term_id; $cat_meta = get_option( "cat_$t_id"); ?> <tr class="form-field"> <th><label for="extra_text">その他テキスト</label></th> <td><input type="text" name="Cat_meta[extra_text]" id="extra_text" size="25" value="<?php if(isset ( $cat_meta['extra_text'])) echo esc_html($cat_meta['extra_text']) ?>" /></td> </tr> <tr class="form-field"> <th><label for="upload_image">画像URL</label></th> <td> <input id="upload_image" type="text" size="36" name="Cat_meta[img]" value="<?php if(isset ( $cat_meta['img'])) echo esc_html($cat_meta['img']) ?>" /><br /> 画像を追加: <img src="images/media-button-other.gif" alt="画像を追加" id="upload_image_button" value="Upload Image" style="cursor:pointer;" /> </td> </tr> <?php }
項目を追加したい場合は「$cat_meta」の配列名を変更して追加してください。
これでカテゴリー編集画面を見ると下図のようになっているはずです。
メタデータの保存
項目を追加しただけでは保存されませんので、保存する処理を記述しましょう。
先ほど記述した「extra_category_fields」の下に追加します。
functions.php
add_action ( 'edited_term', 'save_extra_category_fileds'); function save_extra_category_fileds( $term_id ) { if ( isset( $_POST['Cat_meta'] ) ) { $t_id = $term_id; $cat_meta = get_option( "cat_$t_id"); $cat_keys = array_keys($_POST['Cat_meta']); foreach ($cat_keys as $key){ if (isset($_POST['Cat_meta'][$key])){ $cat_meta[$key] = $_POST['Cat_meta'][$key]; } } update_option( "cat_$t_id", $cat_meta ); } }
画像アップ用のjs&cssの読み込み
追加した項目がテキストフィールドだけなら必要ありませんが、今回は画像フィールドもあるので、その場でアップロードできるようにcssとjsを読み込みます。
まずは新しいjavascriptを作成します。
upload.js
(function($) { $(function() { $('#upload_image_button').click(function() { formfield =$('#upload_image').attr('name'); tb_show('', 'media-upload.php?type=image&post_id=&TB_iframe=true'); return false; }); window.send_to_editor = function(html) { imgurl = $('img',html).attr('src'); $('#upload_image').val(imgurl); tb_remove(); } }); })(jQuery);
このjsファイルは「upload.js」として現在使用しているテーマの「js」フォルダに保存します。
次に「functions.php」に戻って下記を追加します。
functions.php
add_action('admin_print_scripts', 'my_admin_scripts'); add_action('admin_print_styles', 'my_admin_styles'); function my_admin_scripts() { global $taxonomy; if( 'category' == $taxonomy ) { wp_enqueue_script('media-upload'); wp_enqueue_script('thickbox'); wp_register_ script('my-upload', get_bloginfo('template_ directory') .'/js/upload.js'); wp_enqueue_script('my-upload'); } } function my_admin_styles() { global $taxonomy; if( 'category' == $taxonomy ) { wp_enqueue_style('thickbox'); } }
これで画像を追加の横のアイコンをクリックすると、いつもの画像を挿入するウィンドウが表示されます。
テンプレートファイルでの表示
入力したデータをテンプレートで表示してみます。
ここではリスト表示をしてみます。
<ul class="clearfix"> <?php $tag_all = get_terms("category", "fields=all"); foreach($tag_all as $value): $cat_data = get_option('cat_'.intval($value->term_id)); ?> <li> <?php echo esc_html($value->name) ?> <img src="<?php echo esc_html($cat_data['img']) ?>" width="110" height="110" /> <?php echo esc_html($cat_data['extra_text']) ?><br /> </li> <?php endforeach; ?> </ul>
カテゴリーで追加したカスタムフィールドのデータは「wp_options」に保存されていますので、「term_id」でidを取得したら「get_option」で取得できます。