
WordPressの特定のタグ(tag)を除外/削除する
WordPressの記事に関連付けられたタグの一覧を表示してくれるthe_tag。
そのタグ一覧から特定のタグを除外/削除する場合はthe_tagでは難しそう。しかしget_the_tagsを使うのであれば可能なことが分かったのでメモ。
また、ITエンジニア特化型Q&Aサイトteratail(テラテイル)に複数の特定のタグを除外/削除したいとう以前のブログ記事を引用された記事がアップされていましたので、配列を使用して新たに複数のタグに対応させたコードにしています。
<?php
$exclude_tags = array("tag1", "tag2", "tag3"); // 除外するタグのスラッグの配列
$tags = get_the_tags($post->ID);
$separator = ', ';
$output = '';
if ($tags) {
foreach ($tags as $tag) {
if (!in_array($tag->slug, $exclude_tags)) { // 除外するタグのスラッグが含まれていない場合
$output .= '<a href="' . get_tag_link($tag->term_id) . '">' . $tag->name . '</a>' . $separator;
}
}
echo trim($output, $separator);
}
?>
一方、セレクトボックスにタグ一覧を表示させる場合、特定のタグを除外/削除するには下記のようなコードになります。
<?php
$excluded_tag = array('tag1', 'tag2', 'tag3'); // 除外するタグのスラッグの配列
$tags = get_tags();
$filtered_tags = array();
if ($tags) {
foreach ($tags as $tag) {
if (!in_array($tag->slug, $excluded_tag)) {
$filtered_tags[] = $tag;
}
}
}
if (!empty($filtered_tags)) :
?>
<select onchange="document.location.href=this.options[this.selectedIndex].value;" class="custom-select form-control-sm">
<?php foreach ($filtered_tags as $tag) : ?>
<option value="<?php echo esc_url(get_tag_link($tag->term_id)); ?>"><?php echo esc_html($tag->name); ?></option>
<?php endforeach; ?>
</select>
<?php endif; ?>
以上です。

