get_queried_object 関数で、表示しているタグページのタグを取得できます。
これを、foreach の次、$count++; の前で、同じかどうかをチェックし、同じであれば、continue; で次のループへスキップしてしまえば大丈夫です。
jim912さま
ありがとうございます!
こちらの知識不足で申し訳ないのですが、
同じかどうかチェックするというのは
どのようにすればいいのでしょうか?
jim912さま
調べながら下記のように書いてみたのですが、
表示しているタグが相変わらず出たままになってしまいます。
何が間違っているのか分からない状態なので、ご教示いただけないでしょうか。
<?php
$arr = get_the_tags();
$queried_object = get_queried_object();
$count=0;
if ($arr) {
foreach($arr as $tag) {
if( $tag == $queried_object ){
continue;
}
$count++;
if (2 >= $count) {
echo '<span>'.$tag->name.'</span> ';
}
}
}
?>
よろしくお願いいたします。
以下の2つは、get_queried_object で得られる値と、get_the_tags で得られる配列の要素の個々の値を出力してみたものです。
似ているようですが、get_the_tags で得られる配列の要素には、object_id という項目があるのが分かりますでしょうか。この object_id が何かというと、ここでは投稿のIDが格納されます。
オブジェクトを比較する場合、「 同じ属性と値を有し」とありますから、この差違によって、同じタグの場合でも異なるものとして判断されてしまっています。
get_queried_object で得られる値の内容
object(stdClass)#2022 (10) {
["term_id"]=>
int(3)
["name"]=>
string(4) "sample-tag"
["slug"]=>
string(4) "sample-tag"
["term_group"]=>
int(0)
["term_taxonomy_id"]=>
int(3)
["taxonomy"]=>
string(8) "post_tag"
["description"]=>
string(0) ""
["parent"]=>
int(0)
["count"]=>
int(1)
["filter"]=>
string(3) "raw"
}
get_the_tags で得られる配列の要素の値
object(stdClass)#1885 (11) {
["term_id"]=>
int(3)
["name"]=>
string(4) "sample-tag"
["slug"]=>
string(4) "sample-tag"
["term_group"]=>
int(0)
["term_taxonomy_id"]=>
int(3)
["taxonomy"]=>
string(8) "post_tag"
["description"]=>
string(0) ""
["parent"]=>
int(0)
["count"]=>
int(1)
["object_id"]=>
int(12)
["filter"]=>
string(3) "raw"
}
では、どうするかというと、term_taxonomy_id が同じかどうかで判断されると良いかと思います。
if ( $tag->term_taxonomy_id == $queried_object->term_taxonomy_id ) {
jim912さま
ご丁寧にありがとうございます!
大変勉強になりました。
おかげさまで無事にやりたいことができました!
<?php
$arr = get_the_tags();
$queried_object = get_queried_object();
$count=0;
if ($arr) {
foreach($arr as $tag) {
if ( $tag->term_taxonomy_id == $queried_object->term_taxonomy_id ) {
continue;
}
$count++;
if (2 >= $count) {
echo '<span>'.$tag->name.'</span> ';
}
}
}
?>
これにて解決としたいと思います。
本当にありがとうございました。