web-dev-qa-db-ja.com

最後のアイテムにリンクなしでget_category_parents()ブレッドクラム・トレイルを取得する方法

ちょっとした質問:カテゴリアーカイブページにブレッドクラムを表示するのにget_category_parents()を使いたいが、現在表示されているカテゴリにはリンクを張らない(SEOの目的、それはそれ自体へのリンクだと思うので。thatstupid、とにかく)。

このような :

link_home"link_cat1"link_subcat1"nolink_subsubcat1

get_category_parents()はそれにぴったりですが、2つの選択肢があります:リンクありとリンクなしです。

私が欲しいのは最後のアイテムにリンクします。

この関数はオブジェクトや配列ではなく文字列を返すので、最後の項目を削除することはできません。

私は正規表現を»セパレータで検索して最後のリンクを削除することでそれを行うことができましたが、正規表現ではかなり悪いと思います(そのための良い参照を知っていれば、興味があります!)。

私は明白な答えはget_ancestors()とループを使用してカスタム関数を作成し、そして現在のカテゴリ名の後に単に追加することです。

しかし、もっと簡単な方法があるかどうかを知りたかったのですが、最後の項目にリンクを追加しないようにget_category_parents()をフックするだけですか?

何か洞察をありがとう。

サイモンよろしく

1
Simon

私はこれをカイザーの選択肢よりも良くも悪くも考えていないが、ただ違う。親カテゴリでget_category_parentsを使用してから(オプションで)現在のカテゴリを追加しないのはなぜですか。

これはテストしていませんが、次のようなものでうまくいくはずです。

$cat_id=7;//current category's ID (e.g. 7)
$separator='»';//The separator to use
$category = get_category($cat_id);//$category is the current category object
$parent_id = $category[0]->category_parent //category's parent ID
$ancestors = get_category_parents($parent_id, true, $separator);

それから、オプションで現在のカテゴリの名前を追加します。

 if($ancestors){
      $breadcrumb = $ancestors.$separator.' <span class="active-cat">'.single_cat_title().'</span>';
 }else{
      $breadcrumb = '<span class="active-cat">'.single_cat_title().'</span>';
 }
     echo $breadcrumb;

編集:

get_category_parentsは自分自身を再帰的に呼び出すので( こちら を参照)、この方法では基本的に '早めにやめてください'手動でそれを完成させる。ただし、この効果を達成できるフックはありません。

3
Stephen Harris

ネイティブのphp関数を使う

Php.netで文字列や配列の扱いを詳しく調べれば、それほど難しくありません。

// 1. Calls the category parents including their links
// 2. Explodes the string to an array with limit -1 to avoid outputting the last element
// 3. Loops through the array and echos the breadcrumbs
// 3.a Shows the » only after the first breadcrumb
foreach( explode( '//', get_category_parents( $cat, true, '//' ), -1 ) as $index => $breadcrumb )
    echo $index <= 0 ? $breadcrumb : " &raquo; {$breadcrumb}";
// 4. Echo the current category with a leading »
echo ' &raquo; <span class="breadcrumb-active-cat">'.single_cat_title().'</span>';

注:未テスト

3
kaiser

少し古いスレッドですが、私はこれを出しました:

$catpars= get_category_parents($cat_id, true, ' &raquo; ');
$catpars= preg_replace('/\W\w+\s*(\W*)$/', '', $catpars);
1
sariDon

カテゴリページでも実行でき、現在のカテゴリをブレッドクラムから除外し、そのすべての親カテゴリが表示されます。

   echo get_category_parents( get_queried_object()->parent, true, ' &rarr; ' ); 
0