【パンくず】で特定のカテゴリーの除外
-
記事詳細ページとアーカイブで『パンくず』を表示させています。特定のカテゴリーのみを『非表示』にする方法はないでしょうか?
親カテゴリーで表示させたくないカテゴリーがあり、どうにか非表示にする方法を探しています。(ショッピングカートプラグインを使用しておりまして、その関係でこの親カテゴリーは削除できず、非表示にするしかありません)。
ご教授のほど宜しくお願いします。↓パンくずリスト部です。
<?php
$cat_now = get_the_category();
$cat_now = $cat_now[0];
echo(get_category_parents($cat_now, true, ” > “));
single_post_title();
?>どのようにカスタマイズすればよいか、宜しくお願いします。
-
love-sanさん、こんにちは。
特定のカテゴリーの条件はどのようなものでしょうか。それが分からないとどうすれば良いというのも答えにくいです。
たとえば、一番上位のカテゴリーを非表示にするのであれば、get_category_parentsのコードをちょこっとだけ変えて、独自関数で実装するのがよさげな気がします。
get_category_parents
function get_category_parents( $id, $link = false, $separator = '/', $nicename = false, $visited = array() ) { $chain = ''; $parent = &get_category( $id ); if ( is_wp_error( $parent ) ) return $parent; if ( $nicename ) $name = $parent->slug; else $name = $parent->name; if ( $parent->parent && ( $parent->parent != $parent->term_id ) && !in_array( $parent->parent, $visited ) ) { $visited[] = $parent->parent; $chain .= get_category_parents( $parent->parent, $link, $separator, $nicename, $visited ); } if ( $link ) $chain .= '<a href="' . get_category_link( $parent->term_id ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $parent->name ) ) . '">'.$name.'</a>' . $separator; else $chain .= $name.$separator; return $chain; }
my_category_parents (テーマのfunctions.phpに記述)
function my_category_parents( $id, $link = false, $separator = '/', $nicename = false, $visited = array() ) { $chain = ''; $parent = &get_category( $id ); if ( is_wp_error( $parent ) ) return $parent; if ( $nicename ) $name = $parent->slug; else $name = $parent->name; if ( $parent->parent && ( $parent->parent != $parent->term_id ) && !in_array( $parent->parent, $visited ) ) { $visited[] = $parent->parent; $chain .= my_category_parents( $parent->parent, $link, $separator, $nicename, $visited ); } if ( $parent->parent ) { if ( $link ) $chain .= '<a href="' . get_category_link( $parent->term_id ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $parent->name ) ) . '">'.$name.'</a>' . $separator; else $chain .= $name.$separator; } return $chain; }
あとは、例示コードのget_category_parentsをmy_category_parentsに変更
gim912さま
早速のアドバイスありがとうございます。
質問があいまいだったようで申し訳ありませんm(_._)m
『特定のカテゴリー』というのは、『指定したカテゴリーIDだけを非表示にできないか?』という意味で質問させて頂きました。
カテゴリーを再度確認してみましたが、カテゴリーの段数指定の場合は『最上位と上から2段目』のカテゴリーの非表示が希望です。
カテゴリーIDを指定して非表示にする/もしくは最上位と上から2段目のカテゴリーを非表示にする、いずれかの方法がありましたら教えて頂けますでしょうか。
宜しくお願いします。
love-sanさん、こんにちは。
IDが固定であるなら上記の
if ( $parent->parent ) {
を
if ( ! in_array( $parent->term_id, array( n1, n2, n3 ) ) ) {
みたいな感じでいいのではないかと思います。(n1, n2…はカテゴリーのID)
カテゴリーの階層で判別させるのであれば、内部カウンターを参照渡しにして、階層毎にカウントアップさせ、1or2階層目はif分岐で除外するようなロジックになるかと思います。jim912さま
すいません、非表示にできましたが、今度はwordpressの管理画面が真っ白になってしまいました。
管理画面は真っ白で何も操作出来ないのですが、サイト自体はちゃんと動いています。
エラーログを見ると、function.phpのmy_category_parents のコードを挿入した部分が原因のようです。(コードを削除するとまた管理画面が復活します。)
以下のように単に<?php~?>を付けて挿入したのですが、何か記述方法がおかしかったのでしょうか?
<?php
function my_category_parents( $id, $link = false, $separator = ‘/’, $nicename = false, $visited = array() ) {
$chain = ”;
$parent = &get_category( $id );
if ( is_wp_error( $parent ) )
return $parent;if ( $nicename )
$name = $parent->slug;
else
$name = $parent->name;if ( $parent->parent && ( $parent->parent != $parent->term_id ) && !in_array( $parent->parent, $visited ) ) {
$visited[] = $parent->parent;
$chain .= my_category_parents( $parent->parent, $link, $separator, $nicename, $visited );
}
if ( ! in_array( $parent->term_id, array( 12, 13, 61 ) ) ) {
if ( $link )
$chain .= ‘term_id ) . ‘” title=”‘ . esc_attr( sprintf( __( “View all posts in %s” ), $parent->name ) ) . ‘”>’.$name.’‘ . $separator;
else
$chain .= $name.$separator;
}
return $chain;
}
?>宜しくお願いします。
$chain .= 'term_id ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $parent->name ) ) . '">'.$name.'' . $separator;
の部分でPHPエラーになっているのでは?
love-sanさん、こんにちは。
エラーメッセージを表示させてどのようなエラーが生じているか確認するのが、試行錯誤がなく、最も手っ取り早いのですが。。。
テーマのfunctions.phpは、サイトであろうが、管理画面であろうが読み込まれるため、functions.phpの記述にあるなら、サイトの表示も行われないはずです。
あと、考えられるとすれば、使用しているプラグイン(管理画面でのみ利用されるものがあやしい?)との関数名競合です。my_category_parentsではなく、他の名前にしてみてはどうでしょうか。
(冒頭のfunction my_category_parents、関数内のmy_category_parents、およびパンくずナビ部分の計3箇所)jim912さま
アドバイスありがとうございます。
関数名をいくつか変えて試してみましたが、残念ながらうまくいきませんでした。
エラーログはを見てみると、
PHP Warning: Cannot modify header information – headers already sent by (output started at /functions.php:448) in /wp-login.php on line 337
PHP Warning: Cannot modify header information – headers already sent by (output started at /functions.php:448) in /wp-includes/pluggable.php on line 699, referer: /wp-login.php?
などが出ています(function.phpはコードを設置している先頭行)。
他に何か考えられる要因はありますでしょうか?
宜しくお願いします。
- トピック「【パンくず】で特定のカテゴリーの除外」には新たに返信することはできません。