サポート » 使い方全般 » 【パンくず】で特定のカテゴリーの除外

  • 記事詳細ページとアーカイブで『パンくず』を表示させています。特定のカテゴリーのみを『非表示』にする方法はないでしょうか?

    親カテゴリーで表示させたくないカテゴリーがあり、どうにか非表示にする方法を探しています。(ショッピングカートプラグインを使用しておりまして、その関係でこの親カテゴリーは削除できず、非表示にするしかありません)。
    ご教授のほど宜しくお願いします。

    ↓パンくずリスト部です。

    <?php
    $cat_now = get_the_category();
    $cat_now = $cat_now[0];
    echo(get_category_parents($cat_now, true, ” > “));
    single_post_title();
    ?>

    どのようにカスタマイズすればよいか、宜しくお願いします。

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

    (@jim912)

    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に変更

    スレッド開始 love-san

    (@love-san)

    gim912さま

    早速のアドバイスありがとうございます。

    質問があいまいだったようで申し訳ありませんm(_._)m

    『特定のカテゴリー』というのは、『指定したカテゴリーIDだけを非表示にできないか?』という意味で質問させて頂きました。

    カテゴリーを再度確認してみましたが、カテゴリーの段数指定の場合は『最上位と上から2段目』のカテゴリーの非表示が希望です。

    カテゴリーIDを指定して非表示にする/もしくは最上位と上から2段目のカテゴリーを非表示にする、いずれかの方法がありましたら教えて頂けますでしょうか。

    宜しくお願いします。

    モデレーター jim912

    (@jim912)

    love-sanさん、こんにちは。

    IDが固定であるなら上記の

    if ( $parent->parent ) {

    if ( ! in_array( $parent->term_id, array( n1, n2, n3 ) ) ) {

    みたいな感じでいいのではないかと思います。(n1, n2…はカテゴリーのID)
    カテゴリーの階層で判別させるのであれば、内部カウンターを参照渡しにして、階層毎にカウントアップさせ、1or2階層目はif分岐で除外するようなロジックになるかと思います。

    スレッド開始 love-san

    (@love-san)

    jim912さま

    ご丁寧なアドバイスありがとうございました。

    おかげさまでうまく非表示にすることができました。

    スレッド開始 love-san

    (@love-san)

    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;
    }
    ?>

    宜しくお願いします。

    Mee

    (@keisakamoto)

    $chain .= 'term_id ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $parent->name ) ) . '">'.$name.'' . $separator;

    の部分でPHPエラーになっているのでは?

    スレッド開始 love-san

    (@love-san)

    k0420さま

    すいません、どのように修正すればよいのでしょうか?

    モデレーター jim912

    (@jim912)

    love-sanさん、こんにちは。

    エラーメッセージを表示させてどのようなエラーが生じているか確認するのが、試行錯誤がなく、最も手っ取り早いのですが。。。
    テーマのfunctions.phpは、サイトであろうが、管理画面であろうが読み込まれるため、functions.phpの記述にあるなら、サイトの表示も行われないはずです。
    あと、考えられるとすれば、使用しているプラグイン(管理画面でのみ利用されるものがあやしい?)との関数名競合です。

    my_category_parentsではなく、他の名前にしてみてはどうでしょうか。
    (冒頭のfunction my_category_parents、関数内のmy_category_parents、およびパンくずナビ部分の計3箇所)

    スレッド開始 love-san

    (@love-san)

    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はコードを設置している先頭行)。

    他に何か考えられる要因はありますでしょうか?

    宜しくお願いします。

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • トピック「【パンくず】で特定のカテゴリーの除外」には新たに返信することはできません。