Steamer Lane Studio技術備忘録WordPress

WordPressのタグ検索などのタグ利用で、タグを類別にする場合の備忘

wordpress WordPressのタグ検索などのタグ利用で、タグを類別にする場合の備忘
作成日: 2025年1月15日

WordPressのタグ検索などのタグ利用で、タグを類別にする場合の備忘これはタグ付けによる複数条件での検索結果を表示する、ポータルサイト機能を合わせた際にタグの類別/カテゴリー別にしたい場合に用いる。
類別=カテゴリのようなものだが、接頭文字を付けて管理。

ここではサンプルとして「市町村」という接頭を用いた例。

投稿ページでタグ単体を表示

<?php $post_tags = get_the_tags();if ($post_tags && !is_wp_error($post_tags)) {foreach ($post_tags as $tag) {if (strpos($tag->name, '市町村') === 0) {$remaining_text = mb_substr($tag->name, mb_strlen('市町村'));if (!empty($remaining_text)) {echo '<span>' . esc_html($remaining_text) . '</span>';}break;}}}?>

検索ボックス(indexやcategoryに設置、この部分はチェックボックス)

これはポータルなどで用いるAND検索の際の検索用の入れ子。

<?php// 投稿のタグを取得$post_tags = get_tags(array('hide_empty' => true, // 投稿に関連付けられたタグのみを取得));

if ($post_tags && !is_wp_error($post_tags)) {foreach ($post_tags as $tag) {// タグ名が「市町村」で始まるかチェックif (strpos($tag->name, '市町村') === 0) {// 元のタグ名を保持しつつ、「市町村」を削除した部分を取得$original_tag = $tag->name;$remaining_text = mb_substr($original_tag, mb_strlen('市町村'));// 残りの文字列が空でない場合のみ出力if (!empty($remaining_text)) {echo '<label>';echo '<input type="checkbox" class="checks" value="' . esc_attr($original_tag) . '" name="posttag" />';echo esc_html($remaining_text);echo '</label>';}}}}?>

tag.phpでの見出し用最初と被ったけどのそのまま

<h2><?php$str = $_SERVER['REQUEST_URI'];$dec = urldecode($str);$rep = preg_replace('/\/tag\//', '', $dec);$rep2 = preg_replace('/\/page\/[0-9]+/', '', $rep); // ページ部分を削除

// 前方一致で「市町村」を削除if (strpos($rep2, '市町村') === 0) {$rep2 = mb_substr($rep2, mb_strlen('市町村')); // 「市町村」を削除}

echo esc_html($rep2); // 安全に出力?> での検索結果</h2>

titleタグなどへの出力

タグの類別のために先頭に付けた指定の単語を削除。
title用=ページナンバーは残す。

<?php $str = $_SERVER['REQUEST_URI']; $dec = urldecode($str); $rep = preg_replace('/\/tag\//', '', $dec); $rep2 = preg_replace('/\/page\//', 'ページ', $rep); $rep2 = str_replace(' ', ',', $rep2);$remove_words = array('市町村', '特徴');foreach ($remove_words as $word) { if (strpos($rep2, $word) === 0) {$rep2 = mb_substr($rep2, mb_strlen($word)); }}if (preg_match('/ページ[0-9]+/', $rep2)) { $rep2 = preg_replace('/(ページ[0-9]+)/', 'に該当するもの $1', $rep2);} else { $rep2 .= 'に該当するもの';}echo esc_html($rep2);?>|<?php bloginfo(); ?>

description用などナンバリング削除。

東京都内の<?php $str = $_SERVER['REQUEST_URI']; $dec = urldecode($str); $rep = preg_replace('/\/tag\//', '', $dec); $rep2 = preg_replace('/\/page\/[0-9]+/', '', $rep); $rep2 = str_replace(' ', ', ', $rep2);$remove_words = array('市町村', '特徴');foreach ($remove_words as $word) { if (strpos($rep2, $word) === 0) { $rep2 = mb_substr($rep2, mb_strlen($word)); }}$tagres = esc_html($rep2);?>
<?php echo $tagres;?>
<?php /*<?php bloginfo(); ?>*/?>〇〇<?php $str = $_SERVER['REQUEST_URI']; $dec = urldecode($str); $rep = preg_replace('/\/tag\//', '', $dec); $rep2 = implode('', preg_match_all('/[0-9]+/', $rep, $matches) ? $matches[0] : []); foreach ($remove_words as $word) {if (strpos($rep2, $word) === 0) { $rep2 = mb_substr($rep2, mb_strlen($word)); }}echo esc_html($rep2);?> <?php if(have_posts()): while(have_posts()): the_post(); ?><?php $names = get_the_title() . '、'; echo esc_html($names); ?><?php endwhile; else: ?>に該当するものはありません<?php endif; ?>

タグをurlから抽出し羅列する部分はOPGやJSONでも使うので変数化し、<?php echo $tagres;?>これで表示。
実装コードをコピペしたから余計なものも混じってるが、備忘なので。