get_the_category は、投稿が属するカテゴリーの情報を取得するためのものなので、このコードでは、表示されている最初の記事の情報を元にパンくずが表示されることになります。
最初の記事が、複数のカテゴリーに属している場合、このような表示になり得ます。
これを防ぐには、条件分岐タグを使って、その表示されている条件に応じた内容を出力する必要があります。
jim912さん、
早速ご回答ありがとうございます。
当方phpに関しては初心者ですので、
>条件分岐タグを使って、その表示されている条件に応じた内容を出力する必要があります。
これをどのようにすればよいのかわからなかったため、
archive.phpに直接記述してたものを、
function.phpに下記記述をし、ショートコードで表示させる、
という方法にたどり着き、なんとかカテゴリーページはうまくできたのですが、2,3うまくいかない部分がありますので、もう少し教えていただいてよいでしょうか?
function get_breadcrumbs(){
global $wp_query;
if ( !is_home() ){
echo '<ul class="clearfix">';
echo '
<li><a href="'. get_settings('home') .'">'. ホーム .'</a> </li>
';
if ( is_category() )
{
$catTitle = single_cat_title( "", false );
$cat = get_cat_ID( $catTitle );
echo "
<li>> ". get_category_parents( $cat, TRUE, " </li>
" );
}
elseif ( is_archive() && !is_category() )
{ echo "
<li>> Archives </li>
";}
elseif ( is_search() )
{ echo "
<li>> Search Results </li>
";}
elseif ( is_404() )
{ echo "
<li>> 404 Not Found </li>
";}
elseif ( is_single() )
{
$category = get_the_category();
$category_id = get_cat_ID( $category[0]->cat_name );
echo '
<li>> '. get_category_parents( $category_id, TRUE, " </li>
" );
//echo '
<li>> '.the_title('','', FALSE) ." </li>
";
}
elseif ( is_page() )
{
$post = $wp_query->get_queried_object();
if ( $post->post_parent == 0 ){
echo "
<li>> ".the_title('','', FALSE)." </li>
";
} else {
$title = the_title('','', FALSE);
$ancestors = array_reverse( get_post_ancestors( $post->ID ) );
array_push($ancestors, $post->ID);
foreach ( $ancestors as $ancestor ){
if( $ancestor != end($ancestors) ){
echo '
<li>> <a href="'. get_permalink($ancestor) .'">'. strip_tags( apply_filters( 'single_post_title', get_the_title( $ancestor ) ) ) .'</a> </li>
';
} else {
echo '
<li>> '. strip_tags( apply_filters( 'single_post_title', get_the_title( $ancestor ) ) ) .' </li>
';
}
}
}
}
echo "";
}
}
問題点として、
1,カテゴリーに親がある時、>がつかない。
http://kimagure.coolpage.jp/health/hernia/
2, 固定ページのタイトルが違う表記のものがでてきた。
http://kimagure.coolpage.jp/sitemaps.html
あと、タグの表示も、そのタグの名前にしたいのですが、可能でしょうか?
これはできなそうであればパンくず自体を取ろうかと思っています。
jim912さんのわかる範囲で、もし間違ってる記述があればいただければありがたいです。
お手数おかけしますが、よろしくお願い致します。
1. get_category_parents の3つめのパラメーターを >
で指定してみてください。
※ コードが見にくかったので、codeタグで括られるように、こちらで一部編集させていただきました。編集時に指定が消えてしまっているようでしたらすみません。
2. パンくずのコードではなく、上部のオススメの記事の影響だと思われます。該当部分のコードがどうなっているのか分かりませんが、wp_reset_query を用いて、本来表示する内容に戻す必要があります。
query_postsを使ったらwp_reset_query
タグの表示について:
タグの表示かどうかを判別する条件分岐タグは、is_tagです。
ただし、タグの表示もis_archive に該当してしまうので、is_tag の条件分岐は、
elseif ( is_archive() && !is_category() )
より前に記述する必要があります。
タグの名前の表示には、single_tag_title が使えるでしょう。
jim912さん、ありがとうございます。
codeタグ〜の意味がわからなかったのですが、
ここのコメントでcodeタグが使えて、それでくくれば見やすくなるってことですね?失礼しました。。
そして、編集もできるものなのですね??
ここでの質問も慣れてないもので、わからないことばかりで恐縮です。。
早速なのですが、
1,3は少々僕には難しく、、、
1, “3つめのパラメーター”がわからず、とりあえず色々試してこういう記述にしたのですが、
if ( is_category() )
{
$catTitle = single_cat_title( "", false );
$cat = get_cat_ID( $catTitle );
echo "<li>> ". get_category_parents( $cat, TRUE, " > " ) ."</li>";
}
elseif ( is_archive() && !is_category() )
{ echo "<li>> Archives </li> ";}
elseif ( is_search() )
{ echo "<li>> Search Results </li> ";}
elseif ( is_404() )
{ echo "<li>> 404 Not Found </li> ";}
elseif ( is_single() )
{
$category = get_the_category();
$category_id = get_cat_ID( $category[0]->cat_name );
echo '<li>> '. get_category_parents( $category_id, TRUE, " > " ) ."</li>";
//echo '<li>> '.the_title('','', FALSE) ."</li>";
}
最後の > が必要ないのにでてきてしまうのですが、これは仕方ないものでしょうか?例えば
http://kimagure.coolpage.jp/category/new-york/restaurant/
他のカテゴリーも、親がなくても > がついてしまいます。
2, は
<?php wp_reset_query();?>
をその記述の最後に足したところ大丈夫になりました。こういうことですよね?
3, は、、、すいません、少々理解に時間がかかりそうですので、また把握できましたら追加させていただきます。
ご丁寧に一つづつありがとうございます。
とりいそぎお礼と報告まで。
jim912さん、
1,の件はとりあえずこのままでおいておくことにします。
で、
3, の件、探り探りやってみました。
if ( is_category() )
{
$catTitle = single_cat_title( "", false );
$cat = get_cat_ID( $catTitle );
echo "<li>> ". get_category_parents( $cat, TRUE, " > " ) ."</li>";
}
elseif ( is_tag(single_tag_title(「 )) && !is_category() )
{ echo "<li>> </li> 」 一覧 ";}
elseif ( is_archive() && !is_category() )
{ echo "<li>> Archives </li> ";}
elseif ( is_search() )
{ echo "<li>> Search Results </li> ";}
elseif ( is_404() )
{ echo "<li>> 404 Not Found </li> ";}
http://kimagure.coolpage.jp/tag/new-york/
これでとりあえずtagで表示させたかったようにはなりましたが、
エラーとなる記述ではないでしょうか?
このコードだと、liタグの前にタグ名が出力されてしまいます。
また、タグアーカイブか否かを判断するだけなら、is_tag のパラメータは不要です。
elseif ( is_tag() )
{ echo "<li>> 「" . single_tag_title( '', false ) . "」</li> 」 一覧 ";}
では、いかがでしょうか。
jim912さん
ありがとうございます。
3,のtagの件、
elseif ( is_tag(single_tag_title(「 )) && !is_category() )
{ echo "<li>> </li> 」 一覧 ";}
elseif ( is_archive() && !is_category() )
{ echo "<li>> Archives </li> ";}
の部分をそのままjim912さんの記載いただいた通りに変更してみたところ、
おかげさまできちんと表示できるようになりました。
1,のカテゴリーでも同じようにできないか試してみましたが、
親カテゴリーにもついてしまうので、またこれは別なのですね。
ご丁寧に教えていただいてありがとうございました。
色々勉強になりました。
今後また初歩的な質問をしてしまうかもしれませんが、
その時はよろしくお願い致します。
ありがとうございました!