こんにちは
タグの説明欄に分類名(「対象年齢」、「おもちゃの種類」)を記述する方法はどうでしょうか。
例:
<?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' ) ) );
?>
返信ありがとうございます。
タグの説明欄に記載することで、「対象年齢」と「おもちゃの種類」でタグを分けて表示することが出来ました。
ありがとうございます。
表示されたタグにリンクをつける
どちらかのグループのタグがない場合、グループ名を表示しない(例:おもちゃの種類の指定タグがない場合は「おもちゃの種類:」の文字も表示させない)
以上の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>';
}
?>
何度も回答をありがとうございます。
大変申し訳ございません。
教えて頂いた方法で正しく表示が出来たのですが、
タグの中に既に説明欄を使っているものがあり
説明欄を使っているタグは正しく表示することが出来ませんでした。
(例:
おもちゃの種類 ←この文字を足しました。
知育玩具とは知育を目的とした遊び道具を指します。
おもちゃの種類によってその子の知識を増やすための・・・・)
説明欄を既に使っている場合は
教えて頂いた方法では表示することが出来ないのでしょうか。
申し訳ございません。
何か方法があれば教えて頂きたいです。
宜しくお願い致します。
} 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>';
}
教えて頂いた方法で問題なく表示されました。
本当にありがとうございます。
また一つ問題があります。
説明欄の文章をタグページの説明文として表示をしており、
<?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>';
}
?>
本当にありがとうございます。
スラッグを指定する事で、希望通りの表示が出来ました。
自分であれこれとやってみても、上手くいかず行き詰っていたところに
的確な教えを頂き進めていくことが出来ました。
本当にありがとうございました。
すみません、ちょっと訂正です。このままだとタグが未設定の場合、エラーになってしまうので get_the_tags() の戻り値 $tags をチェックする処理を入れてください。
例:
foreach ( $tags as $tag ) {
↓
foreach ( (array) $tags as $tag ) {