wordpressのカテゴリ&タクソノミーの一覧にテキスト&画像を追加してみた。
wordpressのカテゴリ&タクソノミーの一覧にテキスト&画像を追加してみた。
まず最初にこれらのリストページは複数ページにまたがっているため、最初のページのみに画像やテキストを表示することとする。
最初のページかどうかの条件分岐が必要
条件分岐タグ is_paged() を使う。 if ( !is_paged() ) : // 1ページ目 else : // 2ページ目以降 endif;
wordpressの条件分岐参照
つぎにカテゴリの設定項目にカスタムフィードを追加する。
function.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="" /><br /> </td> </tr> <?php }
データを保存するために以下の処理も追加します。
コレもfunction.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 ); } }
タグの場合やタクスノミーの場合は 「add_action ( 'edit_category_form_fields', 'extra_category_fields');」と記述している部分を修正すれば利用可能。
コレもfunction.phpに追加します。
●タグの場合 add_action ( 'edit_tag_form_fields', 'extra_tag_fields'); ●タクソノミーの場合 add_action ( '[タクソノミー名]_edit_form_fields', 'extra_taxonomy_fields'); ※複数を連続して記述をしても問題なく動作します。extra_tag_fields、extra_taxonomy_fieldsを同一にすれば、同じ項目を利用できます。
最後に表示部分です.。カテゴリはcategory.php,タグはtag.phpもしくはachive.phpで表示させたい部分に以下を追加します。なお最初のページだけ表示させたいので、最初に書いた条件分岐「!is_paged() 」を全体に定義すれば完了です。
<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="" width="110" height="110" /> <?php echo esc_html($cat_data['extra_text']) ?><br /> </li> <?php endforeach; ?> </ul>