フォーラムへの返信

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • トピック投稿者 yacchi

    (@yacchi)

    jdbbさま、教えていただいた内容を参考に試行錯誤しましたが、実現できませんでした。
    最終的に行き着いたコードは以下になります。

    <?php $cat = get_queried_object(); ?>
    <?php $id = $cat -> parent; ?>
    <?php $list = get_categories( 'parent=' . $id ) ?>
        <ul class="category">
            <?php echo $list; ?>
        </ul>

    間違っている箇所がありましたら、ご教授いただけましたら有り難いです。
    何卒よろしくお願いいたします。

    トピック投稿者 yacchi

    (@yacchi)

    jdbbさま、ご教授いただきありがとうございます!
    また返信に気づかずご返事が遅くなり申し訳ございません。

    WPの知識があまりなく自信ありませんが、
    教えていただいた内容を参考に、コードを書いて検証してみたいと思います。
    よろしくお願いいたします。

    トピック投稿者 yacchi

    (@yacchi)

    nobitaさま、ご返信が遅くなり申し訳ございません。
    教えていただいた内容で完璧に実現することができました!!
    解決方法がもう一歩だったとは本当に恥ずかしいです。

    この度は長くお付き合いいただき大変感謝いたします。
    自分ももっと精進できるよう頑張ります。
    また機会がありましたらぜひよろしくお願いいたします!

    トピック投稿者 yacchi

    (@yacchi)

    nobitaさま、本当にありがとうございます・・・!
    if/elseだけでなんとかしようとしていた自分では、到底解決できなかったと思います。

    教えていただいた内容を試してみたところ、かなり近いところまでたどり着きましたので、あとは何とか自分でやってみようと四苦八苦しておりました。

    というのも、例えば「親カテゴリ1」の子カテゴリを1つだけチェックして、他は無しの状態で「$ids = array(1,2,3);」とした場合、

    親カテゴリ(1):子カテゴリ
             :
             :
    親カテゴリ(2)
    親カテゴリ(3)

    となり、なぜか「:」がずれてしまっていたからです。

    私が無知なせいでかなり時間がかかってしまいましたが、
    $result[1] .= '<dd>:</dd>';」を「$result[$id] .= '<dd>:</dd>';」にすることで、無事解決することができました!
    本当にありがとうございました!

    さて、ID毎にコピー不要の便利な配列処理にしていただきましたので、現在は親カテゴリ名を取得しようと頑張っているのですが、なかなかうまくいきません。。。

    <dl>
    <?php
    	$args	= array('orderby' => 'ID');
    	$terms	= wp_get_post_terms( $post->ID , 'category', $args);
    	$html	= '<dd>:<a href="%1$s" title="%2$s">%3$s</a></dd>';
    	$colon	= array();
    	$result	= array();
    	/*表示したいIDを列挙*/
    	$ids	= array(1,2,3);
    	/*親カテゴリ名を取得*/
    	$parent	= get_category_parents($ids, true,'');
    
    	foreach($terms as $key=>$term){
    		foreach($ids as $id){
    			if($key== 0){
    				//loopの最初
    				$result[$id] = '<dt>'.$parent.'</dt>';
    				$colon[$id] = false;
    			}
    			if(cat_is_ancestor_of($id, $term)){
    				$result[$id] .= sprintf(	$html,
    						esc_url(get_term_link($term, 'category')),
    						sprintf( __( "%s" ), esc_attr($term->name)),
    						esc_html($term->name)
    				);
    				$coron[$id] = true;
    			}
    			if($key == count($terms) - 1){
    				//loopの最後
    				if($coron[$id] == false){
    					$result[$id] .= '<dd>:</dd>';
    				}
    			}
    		}
    	}
    	// 表示
    	array_walk($result, 'print_named_array');
    	function print_named_array($item, $key){
        	echo $item."\n";
    	}
    ?>
    </dl>

    試行錯誤を繰り返し、最終的に上記のように「$parent = get_category_parents($ids, true,'');」を加えてみたのが解決に一番近かったのですが、全て「親カテゴリ1」の名前になってしまうのです。

    もしかしたらこれを実現するのはとても簡単なことなのかもしれず恐縮なのですが、お知恵をお貸しいただければありがたいです。

    よろしくお願いいたします。

    トピック投稿者 yacchi

    (@yacchi)

    <dl>
    <dt>親カテゴリ(ID=1)</dt>
    <?php
    foreach($terms as $term){
    	if(cat_is_ancestor_of(1, $term)){
    		$html = '<dd>:<a href="%1$s" title="%2$s">%3$s</a></dd>';
    		printf(	$html,
    				esc_url(get_term_link($term, 'category')),
    				sprintf( __( "%s" ), esc_attr($term->name,'...')),
    				esc_html($term->name)
    		);
    	}
    	else {
    		echo ("<dd>:</dd>");
    	}
    }
    ?>
    </dl>

    調べて書き直してみました。
    ただ結果は変わらず、「:」が登録されている子カテゴリの数ぶん表示されてしまいました。
    「cat_is_ancestor_of」に対する条件分岐をうまく記述しなければならないのだと思いますが、「:」を一つだけ出力したいだけなのに、なかなか難しいです。

    ちなみに、フォーラムメンバーであるjim912さんが本投稿内容の解決方法+αをブログでご紹介してくださっております。(もしかしたら本投稿内容を見て記事にしてくださったのかもしれません(._.))

    こちらも大変参考になると思いますので、皆様ご参照いただければと思います。
    http://www.warna.info/archives/1816/

    トピック投稿者 yacchi

    (@yacchi)

    nobitaさま、ちなみになのですが、条件分岐か何かを使って、以下を実現することは可能かおわかりになりますでしょうか。

    <?php
    	$args=array('orderby' => 'ID');
    	$terms = wp_get_post_terms( $post->ID , 'category', $args);
    ?>
    <dl>
    <dt>親カテゴリ(ID=1)</dt>
    <?php
    foreach($terms as $term){
    	if(cat_is_ancestor_of(1, $term)){
    		$html = '<dd>:<a href="%1$s" title="%2$s">%3$s</a></dd>';
    		printf(	$html,
    				esc_url(get_term_link($term, 'category')),
    				sprintf( __( "%s" ), esc_attr($term->name,'...')),
    				esc_html($term->name)
    		);
    	}
    }
    ?>
    </dl>

    子カテゴリがある場合は、
    親カテゴリ:子カテゴリ
    と表示され、

    子カテゴリがない場合は、
    親カテゴリ
    だけの表示になりますが、

    親カテゴリ:
    のように「:」を表示させることは可能でしょうか。

    <?php
    	$args=array('orderby' => 'ID');
    	$terms = wp_get_post_terms( $post->ID , 'category', $args);
    ?>
    <dl>
    <dt>親カテゴリ(ID=1)</dt>
    <?php
    foreach($terms as $term){
    	if(cat_is_ancestor_of(1, $term)){
    		$html = '<dd>:<a href="%1$s" title="%2$s">%3$s</a></dd>';
    		printf(	$html,
    				esc_url(get_term_link($term, 'category')),
    				sprintf( __( "%s" ), esc_attr($term->name,'...')),
    				esc_html($term->name)
    		);
    	}
    	else echo '<dd>:</dd>';
    }
    ?>
    </dl>

    最後の方に「else echo ‘<dd>:</dd>’;」を加えたりしてみたのですが、こうすると「:」が大量に(おそらく登録されている子カテゴリの数ぶん)表示されてしまいました。

    解決方法がわかればご教示いただきたいと思います。

    度々投稿内容と関係のないご質問で大変申し訳ございません。
    よろしくお願いいたします。

    トピック投稿者 yacchi

    (@yacchi)

    nobitaさま、関係のないご質問にまでご対応いただき大変感謝いたします。
    また色々な方法をご教示いただきありがとうございます!

    取り急ぎ「2」の方法を試させていただき、日本語エンコードの問題はすぐに解決できました。
    ただ英字が小文字になってしまうようでしたので、「3」の方法を試させていただいたところ、完璧に問題解決することができました!

    ※「4」の方法は私の知識では難しそうだったため試しておりません。。すみません。。

    お忙しい中、誠にありがとうございました。
    重ねて御礼申し上げます。

    トピック投稿者 yacchi

    (@yacchi)

    nobitaさま、早速のご教示ありがとうございます。
    教えていただいた内容で、希望通りに完璧に実現することができました!

    しかも表示されるカテゴリにリンクまでついている状態になっているのですね!
    これはとてもありがたいです。ありがとうございます。

    今回の投稿内容とは関係なく恐縮なのですが、リンクのtitleに関しまして、日本語部分が「パーセントエンコード」になってしまっているのですが、これを解決する方法がわかりましたらご教示いただければ幸いです。

    よろしくお願いいたします。

    フォーラム: 使い方全般
    返信が含まれるトピック: カスタム投稿タイプの特定のカスタム分類の表示
    トピック投稿者 yacchi

    (@yacchi)

    kzさま、早速のご教示ありがとうございます。
    教えていただいた内容で、希望通りに完璧に実現することができました!

    しかし、「functions.php」をいじるのは思いもよりませんでした。
    PHP知識がほとんどない私には到底及ばない方法で、とても参考になりました。
    また、タームなどの通名もわかりやすく教えていただき、大変感謝いたします。

    お忙しい中、誠にありがとうございました。

9件の返信を表示中 - 1 - 9件目 (全9件中)