プログラム初心者のcakephp2.x・wordpress情報

プログラム初心者のcakephp2.xの技術情報・wordpressやAPI関連も覚書(PHP・mySQL)

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>