- 2010-06-29 (火) 19:43
- wordpress
複数のカテゴリーに属している記事のタイトルに複数のアイコンをつけたい。
ということを実現するのにかなり時間を費やしてしまった…
あーもっと検索上手にならなくっちゃ。
ってその前に、もっと勉強しなきゃ…
下記、迷える人がいたら参考になればと…
ただ、もっといい方法があれば是非おしえてください。
さて、今回、アイコン表示は以下のようなルールにしたいと思ってとりかかったわけで…
カテゴリA (ID=1)
カテゴリAの子
カテゴリAの子の子
カテゴリB (ID=2)
カテゴリBの子
カテゴリBの子の子
があったとする。
カテゴリA、カテゴリAの子、カテゴリAの子の子 の記事はAのアイコン
カテゴリB、カテゴリBの子、カテゴリBの子の子 の記事はBのアイコン
カテゴリA、カテゴリBの子の二つに属する場合はAのアイコンとBのアイコン
といった具合にしたかった。
まず試したのが下記の方法
<?php
$post_cats = get_the_category();
if ( $post_cats[0]->cat_ID == 1 || $post_cats[0]->category_parent == 1 || cat_is_ancestor_of( 1, (int)$post_cats[0]->category_parent ) ) {
echo 'Aアイコン';
} else {
echo 'Bアイコン';
?>
これだと、複数のカテゴリに属する場合、1つ目しか読み込まない。
よって、カテゴリA、カテゴリBの子の二つに属する場合はAのアイコンしか表示されなくなってしまう。
やりたいことはこれじゃない!
そして彷徨ってようやく見つけたのは
フォーラム【特定のカテゴリ記事へのアイコン表記 】
この記事で下記のような方法を発見
下記引用
テーマのディレクトリー直下に category-SLUG.png を作っておけば、それを表示するというサンプルです (SLUG の部分は実際のカテゴリースラッグに差し替えてください)。
<?php
$ClassAddCategory = '';
$cats = wp_get_post_categories(get_the_ID());
if( is_array( $cats)){
foreach( $cats as $cat){
$cobj = get_category( $cat);
$icon_file = '/category-' . $cobj->slug . '.png';
if (file_exists(get_template_directory() . $icon_file)) {
echo '<img src="' . get_template_directory_uri() . $icon_file . '" alt="' . $cobj->name . '" />';
}
}
}
?>
ほぉー…
しかしこれでは子孫のところがうまくいかない。
すべての子孫カテゴリーの画像も用意すればいいのかもしれないが、同じ画像がいくつもあるのはスマートじゃない!しかもカテゴリーが増えるたびに画像も…。それは大変だー。
さらに旅を続けること数時間…
見つけたー!!これ!!
post_is_in_descendant_category 関数!!
下記で定義する post_is_in_descendant_category 関数(呼び出す前にテンプレート、プラグイン、またはテーマ関数にコードをコピーする必要がある)を使用することで実現可能!
post_is_in_descendant_category 関数
<?php /** * Tests if any of a post's assigned categories are descendants of target categories * * @param int|array $cats The target categories. Integer ID or array of integer IDs * @param int|object $_post The post. Omit to test the current post in the Loop or main query * @return bool True if at least 1 of the post's categories is a descendant of any of the target categories * @see get_term_by() You can get a category by name or slug, then pass ID to this function * @uses get_term_children() Passes $cats * @uses in_category() Passes $_post (can be empty) * @version 2.7 * @link http://codex.wordpress.org/Function_Reference/in_category#Testing_if_a_post_is_in_a_descendant_category */ function post_is_in_descendant_category( $cats, $_post = null ) { foreach ( (array) $cats as $cat ) { // get_term_children() accepts integer ID only $descendants = get_term_children( (int) $cat, 'category'); if ( $descendants && in_category( $descendants, $_post ) ) return true; } return false; } ?>
私はこれをfunction.phpにコピーして、テンプレは下記のように…
<?php
if ( in_category(1) || post_is_in_descendant_category(1) ) {
echo 'Aアイコン';
}
if ( in_category(2) || post_is_in_descendant_category(2) ) {
echo 'Bアイコン';
}
?>
これでやりたかったことが実現。
まぁ、親カテゴリーが増えると増やさなくてはいけなのであんまりスマートじゃないかな…?
でも子孫が増える分には問題なし!
今回は親カテゴリはほぼ増えないのでよしとする!
上記2つの方法をうまく組み合わせてカテゴリーが増えてもいいようにできそうだが、
とりあえず今日は力尽きたのでここまで。
とりあえず実現できたということで。
ふぅー長かった~
関連記事
- 特定の投稿(記事)の条件分岐方法【wordpress】
- カテゴリー1とその子孫カテゴリーを呼び出す【WordPress】
- 子孫含むカテゴリでの条件分岐【WordPress】
- カテゴリースラッグを表示する方法【WordPress】
- カテゴリーの親カテゴリーを取得【WordPress】
- 特定のカテゴリにある記事のスタイルを変更する【WordPress】
- WordPress のアドレス (URL)を誤って変更してしまったら…【WordPress】
- アーカイブページのmetaタグのtitleに親カテゴリ名と子カテゴリ名を入れたい【WordPress】
- get template part【WordPress】
- 【wordpress】wordpressの外にあるhtmlに、カテゴリーAの新着リストを表示したい
- Newer: フィードのテンプレートをカスタマイズしたい!【WordPress】
- Older: カテゴリーの親カテゴリーを取得【WordPress】
コメント:46
- perfumed candles 10-12-28 (火) 10:44
-
I found this blog from my friend. I was wondering if you had an rss feed. It would help people find this more easily. Best wishes and keep up the good info!
- Mondaine 11-01-13 (木) 7:37
-
Hey, That was a great thread thank u very much for sharing that information with everybody.
- ****** 11-06-19 (日) 11:20
- このコメントは管理者の承認待ちです
- ****** 11-06-24 (金) 7:19
- このコメントは管理者の承認待ちです
- ****** 11-06-25 (土) 18:29
- このコメントは管理者の承認待ちです
- ****** 11-07-01 (金) 0:31
- このコメントは管理者の承認待ちです
- ****** 11-07-06 (水) 2:24
- このコメントは管理者の承認待ちです
- ****** 11-07-10 (日) 23:01
- このコメントは管理者の承認待ちです
- ****** 11-07-15 (金) 6:12
- このコメントは管理者の承認待ちです
- ****** 11-07-21 (木) 4:01
- このコメントは管理者の承認待ちです
- ****** 11-07-22 (金) 2:15
- このコメントは管理者の承認待ちです
- ****** 11-07-25 (月) 5:43
- このコメントは管理者の承認待ちです
- ****** 11-07-28 (木) 0:26
- このコメントは管理者の承認待ちです
- ****** 11-07-30 (土) 5:47
- このコメントは管理者の承認待ちです
- ****** 11-08-20 (土) 1:14
- このコメントは管理者の承認待ちです
- ****** 11-08-28 (日) 2:44
- このコメントは管理者の承認待ちです
- ****** 11-08-30 (火) 0:17
- このコメントは管理者の承認待ちです
- ****** 11-08-31 (水) 23:02
- このコメントは管理者の承認待ちです
- ****** 11-09-02 (金) 21:16
- このコメントは管理者の承認待ちです
- ****** 11-09-06 (火) 7:52
- このコメントは管理者の承認待ちです
- ****** 11-09-08 (木) 0:48
- このコメントは管理者の承認待ちです
- ****** 11-10-08 (土) 3:06
- このコメントは管理者の承認待ちです
- ****** 11-10-15 (土) 12:47
- このコメントは管理者の承認待ちです
- ****** 11-10-19 (水) 9:17
- このコメントは管理者の承認待ちです
- ****** 11-10-26 (水) 11:21
- このコメントは管理者の承認待ちです
- ****** 11-10-29 (土) 1:29
- このコメントは管理者の承認待ちです
- ****** 11-11-05 (土) 2:04
- このコメントは管理者の承認待ちです
- ****** 11-11-14 (月) 6:44
- このコメントは管理者の承認待ちです
- ****** 11-11-16 (水) 18:17
- このコメントは管理者の承認待ちです
- ****** 11-11-23 (水) 18:23
- このコメントは管理者の承認待ちです
- ****** 11-12-06 (火) 6:11
- このコメントは管理者の承認待ちです
- ****** 11-12-11 (日) 1:21
- このコメントは管理者の承認待ちです
- ****** 11-12-11 (日) 17:25
- このコメントは管理者の承認待ちです
- ****** 11-12-15 (木) 4:30
- このコメントは管理者の承認待ちです
- ****** 11-12-20 (火) 2:56
- このコメントは管理者の承認待ちです
- ****** 11-12-22 (木) 10:15
- このコメントは管理者の承認待ちです
- ****** 11-12-26 (月) 7:27
- このコメントは管理者の承認待ちです
- ****** 11-12-29 (木) 11:11
- このコメントは管理者の承認待ちです
- ****** 11-12-29 (木) 15:21
- このコメントは管理者の承認待ちです
- ****** 12-01-01 (日) 12:02
- このコメントは管理者の承認待ちです
- ****** 12-01-03 (火) 3:59
- このコメントは管理者の承認待ちです
- ****** 12-01-03 (火) 8:18
- このコメントは管理者の承認待ちです
- ****** 12-01-23 (月) 23:43
- このコメントは管理者の承認待ちです
- ****** 12-01-27 (金) 5:49
- このコメントは管理者の承認待ちです
- ****** 12-01-28 (土) 4:10
- このコメントは管理者の承認待ちです
- ****** 12-02-04 (土) 1:58
- このコメントは管理者の承認待ちです
トラックバック:1
- このエントリーのトラックバックURL
- http://web.donnatokimo.com/wordpress/307/trackback
- Listed below are links to weblogs that reference
- 複数のカテゴリーに属している記事のタイトルに複数のアイコンをつけたい【WordPress】 from ウェブなとき。
- ****** 11-09-09 (金) 5:36
- このコメントは管理者の承認待ちです