タグの話

このサイトにはタグ検索機能をつけてあります。

WordPress(このサイトの大元のブログみたいなシステム)にはもともとタグ表示機能があるのですが、わりと適当な実装になっていてタグをたくさんつけることはできるけど検索は一種類しかできない仕様になっています。

私はこのタグ機能を今まで書くときにも読むときにもほとんど活用してこなかったので、ショボい機能だということにもそもそも気づいてなかったんですが……
タグあるんじゃないか便利だし使おう!と思ったら全然思ったような機能ではなかったっていう話なのです

WordPressの記事の分類には「カテゴリ」と「タグ」の2種類があります。
内部の挙動的にも近しい分類方法なんですが一応違うものとして扱われています。
弊サイトではカテゴリをシリーズ分類(100当、時揺蕩、単発SSの3カテゴリ)としてもタグを性癖(記事中のプレイ内容)分類としました。

カテゴリページ(シリーズ作品のトップページ)を表示するとそのシリーズ内で使われているタグの一覧が表示されるようにはすぐできたのですが、そのタグのリンクをクリックすると、カテゴリにかかわらず同じタグが使われている記事全てがひっかかってしまうのです。

100日後に〇〇になる当麻の中の「R18」を絞り込み検索したいのに、「時の揺蕩う処」や「単発SS」の「R18」タグ付きページも引っかかってしまうと、作品数が少ないうちはいいけどページ数が増えてくると面倒くさくなります。
現パロのR18読もうと思ったのに妖邪界物混じっとるやんけ!となるわけです。

というわけで、カテゴリ内での絞り込みが出来るようにならないかとあれやこれや検索してみました。
なにしろこちとら20年前の個人サイト流行期にHTMLをかじり、その後ずっとサイトを維持してる関係で必要最小限のjavascriptやらCSSやらperlやらphpを齧っただけのど素人です。
検索で出てきたサイトに何を書いてあるのかすらおぼつきません。
そこで、コ○ナラという技術系フリマサイトでこのサイトで使っているテンプレートのエキスパートでphpが本職だという方に打診して、これこれの改造は可能でしょうか?可能だとしたらおいくらくらいかかるでしょう?と問い合わせをしました。
もちろん、問い合わせをするにあたってサンプル用に打ち込んでいたR18だの調教だのいうタグを全部削除して、ファンタジー、SF、現代物、ほのぼのなどのあたりさわりのない語句に書き換えておきました。

問い合わせの結果、やるとしたらテンプレートではなくWordpressのコアファイルに手を入れる大改造になる。個人の趣味サイトにかける予算では追いつかない可能性があるし、コアファイルを変更したら今後のテンプレートバージョンアップに対応できなくなってセキュリティ上の問題が生じる可能性がある。
……とのことで、外注を断念。

諦め悪く検索したり切り貼りしたりあれやこれやといじくりまわしたけっか、一週間くらいでシステム改修が完了しました><
テンプレートの中だけで完結したし、その部分だけ取り出して別ファイルにしたので、アップデートにも対応してます、やったね!


以下技術的な話。
同様の改造をされる方は自己責任になりますがコピペなどして適宜ご活用いただけます。
テーマはCocoonを利用している前提ですが、意味がわかっていれば他のテンプレート用に必要部分を書き換えても特に問題ないと思われます。

管理メニュー>テーマを編集からCocoon Childを開き、ローカルのテキストエディタなどにfunctions.phpのバックアップを取る(万が一の破損の際の巻き戻し用)

hacknote様の
WordPress:カテゴリ別のタグクラウドを出す方法
https://hacknote.jp/archives/5449/
に書かれた内容をfunctions.phpの末尾に書き加える

同じくCocoon Childのjavascript.jsを開きバックアップを取る。

javascript.jsの文末に以下を書き加える。

//// カテゴリクエリを差し込んでタグクエリをリセットする
var cid = location.search;
var recid = "";
    if (cid !== "") {
 // クエリストリング毎に分割
 var params = cid.slice(1).split("&");

// クエリストリング確認
        for (var i = 0; i < params.length; i++) {
            var param = params[i].split("=");
            var key = param[0];
            var value = param[1];

// tagのクエリを削除
if (key === "tag") continue;
// catのクエリを書き戻す
recid += "&";
recid += key + "=" + value;
        }
    }
$(function(){
  $('a.tag-cloud-link').attr('href',function(){return $(this).attr('href')+recid});
});
//// カテゴリクエリを差し込んでタグクエリをリセットするここまで

Cocoon(親テーマ)から、tmp/category-content.phpをコピーしてCocoon Childのフォルダに追加する(Wordpress上のテーマ編集ページには多分新規追加の機能はなかったのでFTPソフトなどを使ってコピーしたファイルをCocoon Child内にtmpフォルダを作成、ファイルをアップロードの手順で行う)

category-content.php内の10行目から始まる(この行数は目安であり、今後のテーマアップデートで変わる可能性があります)部分

//カテゴリIDの取得
$cat_id = get_query_var('cat');
$eye_catch_url = get_the_category_eye_catch_url($cat_id);
$content = get_the_category_content($cat_id);
if ($eye_catch_url || $content): ?>

の末尾の「:」と「?>」の間に以下の内容をコピペします

////タグIDを取得してタグ名に変換
$tag_title = get_query_var('tag_id');
$tag_name = get_term_by('id' , $tag_title , 'post_tag');
$tag_name = $tag_name->name;
////タグIDを取得してタグ名に変換ここまで

同ファイルの末尾に以下をコピペします
(カテゴリ別のタグ表示用記述はfunction.php部分と同じくhacknote様のサイトから)

<div class="wp-block-cocoon-blocks-blank-box-1 blank-box block-box has-background has-border-color has-key-color-background-color has-light-blue-border-color">
	<p class="has-watery-green-color has-text-color"><strong>作品傾向タグ</strong> </p>

<?php
foreach((get_the_category()) as $cat) {
  $cat_id = $cat->cat_ID ;
    break ;
  }
$query = 'cat=' . $cat_id;
my_category_tag_cloud($query);

?>
</div>
		<?php //絞り込みお知らせ記述追加
if($tag_title)echo '<div>「'.$tag_name.'」タグで絞り込み中</div>';
?>

この部分は記事一覧にカテゴリタグの絞り込みを表示するための記述で、弊サイトの表記そのままになってるので、デザインは変えた方がいいかと思います。

そのうち複数タグでのand絞り込みも実装したい。

コメント