サポート » 使い方全般 » カテゴリーのパンくずが、意図しないカテゴリー名で表示される

  • 解決済 jun316jun

    (@jun316jun)


    カテゴリーの一覧で表示されるパンくずが、意図しない別のカテゴリー名で表示されてしまいます。

    例えば、”かわいい:cute” というカテゴリー一覧なのに、パンくずには “おもしろい:funny” とでてきます。
    記述は以下のように記載されてるのですが、何が原因なのでしょうか?

    <div id=”breadcrumb”>
    <div itemscope itemtype=”http://data-vocabulary.org/Breadcrumb”&gt; ” itemprop=”url”> <span itemprop=”title”>ホーム</span> > </div>
    <?php /*— カテゴリーが階層化している場合に対応させる — */ ?>
    <?php $postcat = get_the_category(); ?>
    <?php $catid = $postcat[0]->cat_ID; ?>
    <?php $allcats = array($catid); ?>
    <?php
    while(!$catid==0) { /* すべてのカテゴリーIDを取得し配列にセットするループ */
    $mycat = get_category($catid); /* カテゴリーIDをセット */
    $catid = $mycat->parent; /* 上で取得したカテゴリーIDの親カテゴリーをセット */
    array_push($allcats, $catid);
    }
    array_pop($allcats);
    $allcats = array_reverse($allcats);
    ?>
    <?php /*— 親カテゴリーがある場合は表示させる — */ ?>
    <?php foreach($allcats as $catid): ?>
    <div itemscope itemtype=”http://data-vocabulary.org/Breadcrumb”&gt; ” itemprop=”url”> <span itemprop=”title”><?php echo get_cat_name($catid); ?></span> > </div>
    <?php endforeach; ?>
    </div>

    ちなみにサイトのURLは
    http://my-favorite-movies.com/category/cute/
    になります。
    他のカテゴリーでも意図しないものが多数あり、それの全てで “おもしろい:funny” のパンくずがでてきます。
    ちなみに親カテゴリーは設定なしです。

    何がおかしいか、もしお分かりでしたら教えてください。
    よろしくお願い致します。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • モデレーター jim912

    (@jim912)

    get_the_category は、投稿が属するカテゴリーの情報を取得するためのものなので、このコードでは、表示されている最初の記事の情報を元にパンくずが表示されることになります。
    最初の記事が、複数のカテゴリーに属している場合、このような表示になり得ます。

    これを防ぐには、条件分岐タグを使って、その表示されている条件に応じた内容を出力する必要があります。

    スレッド開始 jun316jun

    (@jun316jun)

    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さんのわかる範囲で、もし間違ってる記述があればいただければありがたいです。

    お手数おかけしますが、よろしくお願い致します。

    モデレーター jim912

    (@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 が使えるでしょう。

    スレッド開始 jun316jun

    (@jun316jun)

    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, は、、、すいません、少々理解に時間がかかりそうですので、また把握できましたら追加させていただきます。

    ご丁寧に一つづつありがとうございます。
    とりいそぎお礼と報告まで。

    スレッド開始 jun316jun

    (@jun316jun)

    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で表示させたかったようにはなりましたが、
    エラーとなる記述ではないでしょうか?

    モデレーター jim912

    (@jim912)

    このコードだと、liタグの前にタグ名が出力されてしまいます。
    また、タグアーカイブか否かを判断するだけなら、is_tag のパラメータは不要です。

    elseif ( is_tag() )
    { echo "<li>> 「" . single_tag_title( '', false ) . "」</li> 」 一覧 ";}

    では、いかがでしょうか。

    スレッド開始 jun316jun

    (@jun316jun)

    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,のカテゴリーでも同じようにできないか試してみましたが、
    親カテゴリーにもついてしまうので、またこれは別なのですね。

    ご丁寧に教えていただいてありがとうございました。
    色々勉強になりました。

    今後また初歩的な質問をしてしまうかもしれませんが、
    その時はよろしくお願い致します。

    ありがとうございました!

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「カテゴリーのパンくずが、意図しないカテゴリー名で表示される」には新たに返信することはできません。