サポート » プラグイン » 各投稿に付けたタグを分類して表示したい

  • 解決済 zonox

    (@zonox)


    WordPressで作成した記事のタグを分類して表示したいです。

    それぞれの記事に数個ずつタグをつけています。
    例えば
    おもちゃでタグの種類は
    0~5歳, 6~10歳, 11~15歳,
    知育, ヒーロー, ぬいぐるみ,
    と何種類もあります。

    ある記事のタグが「0~5歳, 知育」だった場合に

    対象年齢: 0~5歳
    おもちゃの種類: 知育

    と言った具合に二つの分類分けをして
    記事につけたタグを表示したいです。

    プラグインxili-tidy-tagsが分類分けが出来るとの事でインストールしてみましたが、
    分類分けした全てのタグが表示されてしまいます。
    記事につけたタグのみを表示する方法がわからず、こちらに質問いたしました。

    single.phpのページに

    
    <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
    <section class="content">
    <?php the_content(); ?>
    <?php echo do_shortcode('[xili-tidy-tags params="age=trademark&largest=10&smallest=10" glue=" | "]'); ?>
    </section>
    <?php endwhile; endif; ?>

    と記載してみましたが、記事につけていないタグを含めた全てのタグが表示されてしまいました。

    phpやWordpressにあまり詳しくありません。
    宜しくお願い致します。`

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • こんにちは

    タグの説明欄に分類名(「対象年齢」、「おもちゃの種類」)を記述する方法はどうでしょうか。

    例:

    <?php
    $tags = get_the_tags();
    echo '対象年齢: ' . esc_html( implode( ', ', array_column( array_filter( $tags, function( $value ) { return '対象年齢' === trim( $value->description ); } ), 'name' ) ) );
    echo 'おもちゃの種類: ' . esc_html( implode( ', ', array_column( array_filter( $tags, function( $value ) { return 'おもちゃの種類' === trim( $value->description ); } ), 'name' ) ) );
    ?>
    スレッド開始 zonox

    (@zonox)

    返信ありがとうございます。
    タグの説明欄に記載することで、「対象年齢」と「おもちゃの種類」でタグを分けて表示することが出来ました。
    ありがとうございます。

    表示されたタグにリンクをつける

    どちらかのグループのタグがない場合、グループ名を表示しない(例:おもちゃの種類の指定タグがない場合は「おもちゃの種類:」の文字も表示させない)

    以上の2点は可能でしょうか?

    宜しくお願い致します。

    こんな感じではどうでしょうか。

    <?php
    $tags = get_the_tags();
    $tags1 = array();
    $tags2 = array();
    foreach ( $tags as $tag ) {
    	if ( '対象年齢' === trim( $tag->description ) ) {
    		$tags1[] = '<a href="' . esc_url( get_tag_link( $tag->term_id) ) . '">' . esc_html( $tag->name ) . '</a>';
    	} else if ( 'おもちゃの種類' === trim( $tag->description ) ) {
    		$tags2[] = '<a href="' . esc_url( get_tag_link( $tag->term_id) ) . '">' . esc_html( $tag->name ) . '</a>';
    	}
    }
    if ( ! empty( $tags1 ) ) {
    	echo '<span class="tags-links">対象年齢: ' . implode( ', ', $tags1 ) . '</span>';
    }
    if ( ! empty( $tags2 ) ) {
    	echo '<span class="tags-links">おもちゃの種類: ' . implode( ', ', $tags2 ) . '</span>';
    }
    ?>
    スレッド開始 zonox

    (@zonox)

    何度も回答をありがとうございます。
    大変申し訳ございません。
    教えて頂いた方法で正しく表示が出来たのですが、
    タグの中に既に説明欄を使っているものがあり
    説明欄を使っているタグは正しく表示することが出来ませんでした。
    (例:
    おもちゃの種類 ←この文字を足しました。
    知育玩具とは知育を目的とした遊び道具を指します。
    おもちゃの種類によってその子の知識を増やすための・・・・)

    説明欄を既に使っている場合は
    教えて頂いた方法では表示することが出来ないのでしょうか。
    申し訳ございません。

    何か方法があれば教えて頂きたいです。
    宜しくお願い致します。

    } else if ( 'おもちゃの種類' === trim( $tag->description ) ) {

    この「おもちゃの種類」を説明欄と同じ文字列にすればできます。

    文字列の部分比較であれば、下記のようになります。

    if ( '対象年齢' === trim( $tag->description ) ) {
    	$tags1[] = '<a href="' . esc_url( get_tag_link( $tag->term_id) ) . '">' . esc_html( $tag->name ) . '</a>';
    } else if ( 'おもちゃの種類' === trim( $tag->description ) ) {
    	$tags2[] = '<a href="' . esc_url( get_tag_link( $tag->term_id) ) . '">' . esc_html( $tag->name ) . '</a>';
    }

    if ( false !== strpos( $tag->description, '対象年齢' ) ) {
    	$tags1[] = '<a href="' . esc_url( get_tag_link( $tag->term_id) ) . '">' . esc_html( $tag->name ) . '</a>';
    } else if ( false !== strpos( $tag->description, 'おもちゃの種類' ) ) {
    	$tags2[] = '<a href="' . esc_url( get_tag_link( $tag->term_id) ) . '">' . esc_html( $tag->name ) . '</a>';
    }
    スレッド開始 zonox

    (@zonox)

    教えて頂いた方法で問題なく表示されました。
    本当にありがとうございます。

    また一つ問題があります。
    説明欄の文章をタグページの説明文として表示をしており、

    <?php if(!is_paged()):?>
    <?php if(tag_description()):?>
    <section class="comments">
    <?php echo tag_description(); ?>
    </section><!-- /comments -->
    <?php endif;?>
    <?php endif;?>
    

    今回増やした「おもちゃの種類」や「対象年齢」の言葉も表示されます。
    この単語を元々の説明文に含んでいるタグや、
    複数回含んでいるものもあります。
    後から後から問題を出して申し訳ございません。
    説明欄の文章を他で使用する場合は、今回の分類で教えて頂いた方法は使用できないのでしょうか。
    その場合、if構文のタグのterm_idで種類分けする事も可能でしょうか?
    (上記のif構文と言うのは、この質問の前に自分で試してみたのですが知識不足なため実現することが出来ませんでした。)

    何度も申し訳ございません。
    お知恵を頂けますでしょうか。
    宜しくお願い致します。

    スラッグを指定するのはどうでしょうか。

    <?php
    
    $params = array(
    	'対象年齢'       => array( 'スラッグ1' ),
    	'おもちゃの種類' => array( 'スラッグ2', 'スラッグ3' ),
    );
    
    $tags = get_the_tags();
    $outs = array();
    foreach ( $tags as $tag ) {
    	foreach ( $params as $key => $value ) {
    		if ( in_array( $tag->slug, $value ) ) {
    			$outs[$key][] = '<a href="' . esc_url( get_tag_link( $tag->term_id) ) . '">' . esc_html( $tag->name ) . '</a>';
    		}
    	}
    }
    foreach ( $outs as $key => $value ) {
    	echo '<span class="tags-links">' . esc_html( $key ) . ': ' . implode( ', ', $value ) . '</span>';
    }
    ?>
    スレッド開始 zonox

    (@zonox)

    本当にありがとうございます。
    スラッグを指定する事で、希望通りの表示が出来ました。
    自分であれこれとやってみても、上手くいかず行き詰っていたところに
    的確な教えを頂き進めていくことが出来ました。
    本当にありがとうございました。

    すみません、ちょっと訂正です。このままだとタグが未設定の場合、エラーになってしまうので get_the_tags() の戻り値 $tags をチェックする処理を入れてください。

    例:
    foreach ( $tags as $tag ) {

    foreach ( (array) $tags as $tag ) {

    • この返信は2ヶ月、 1週前にishitakaが編集しました。
9件の返信を表示中 - 1 - 9件目 (全9件中)
  • このトピックに返信するにはログインが必要です。