WordPressが出力するFeedのタイトルにカテゴリーごと、タグごとに違う定型文を追記する

WordPressが出力するFeedのタイトルにカテゴリーごと、タグごとに違う定型文を追記する

「頭痛で頭が痛い」を許容できるか…

出力されるFeed(フィード)にサムネイル画像を追記する方法は、ググればわんさかと出てくるが、タイトル部分にカテゴリー、もしくはタグに準じた定型文を追記する方法は、検索の仕方が悪いのか情報を見つけられなかったため、なんとか自力で解決した話。

ま、このvestallでは使ってないけどw

例えば、サイトがスマホアプリに特化した情報を扱うのであれば、掲載している情報はスマホアプリの事であるというのは自明の事であり、記事のタイトルにいちいち「スマートフォン」や「スマホ」「アプリ」という言葉を入れるのは、「頭痛で頭が痛い」と同じくらい滑稽な事だと思う。

これは、雑誌の編集者やライターをやってきた経験なども影響しており、記事に付けたタイトル、見出しで謳っている事、さらにはリード文で述べている事を無意味にダブらせるのは、駄文の第一歩という意識が染みついているせい。そのためか、このvestallでも記事タイトルは一部をの除いて文字数が少ない傾向にあると思う。SEOの事を考えると、もう少し情報が多い方がいいのかもしれないが。

但し、WordPress関連の記事だけは、説明調でくどくどとしたタイトルになっているw まぁ、WordPress関連の記事の場合、同じようにつまずいた人たちの役に立ちたいと思って、検索で引っ掛かりやすくなる事を(一応)考慮してタイトルと付けている。それ以外の記事については、検索云々よりも自己満足を優先している。

繰り返すが、スマホアプリの情報に特化したサイトで、わざわざ「スマホ」や「アプリ」という言葉を入れた記事のタイトルを記するのは、「頭痛で頭が痛い」と同じくらい滑稽な事という認識からすれば、検索結果のため、アクセス向上を目指す相互RSS用のフィードのため、さらにはSEOのためといって、説明調のくどくどとした記事タイトルを作成するのは、やはり抵抗がある。

ところがネットにおいては、記事タイトルだけが一人歩きするという現実がある。既に言及してるように、検索の事がまず思い浮かぶ。さらに、相互RSSの仕組みを利用してアクセス向上を狙った場合も、記事タイトルは重要になってくる。サイトにアクセスした事がなく、そのサイトがどういった作法やバックボーンを持っているのか知らない人たちにとっては、記事タイトルが判断の基準になるからだ。予備知識のない人たちにアピールするためには、アクセスしてもらえれば自明の事でも、敢えて記載しておく必要が出てくる。

検索結果については、ページのディスクリプション(説明文)も表示されるため、その部分で情報を補う事もできるが、そのディスクリプションを読まない人たちも一定数いるらしく、そのディスクリプションさえも表示されない相互RSSの形態に至っては、フィードに掲載されるタイトルが何よりも重要となる現実を直視すると、アクセスしてもらってナンボの作成者としては、ユーザーに寄り添う方が健全だ(尚、SEOについては、あるがままに)。

そんなわけで、検索結果の方には若干寄り添いつつも、記事タイトルは言葉をできるだけ重複させないポリシーは継続したまま、相互RSSを見据えたところでは、「言葉の重複上等、くどくと説明してやんよ」と、定型文+記事タイトルの形式で出力されるように手を入れた。

なげ~前置きw

作成の手順をざっくりと説明

functions.phpの修正

原本となるfunctions.phpのバックアップをし、以下の文言をfunctions.phpに追記する。
以下、スマホアプリの情報に特化したサイトという想定。

// フィードの記事タイトルに定型文を追記する
function txt_added_title($title) {
  if(in_category('news')) {
    $title = '【スマホ】最新アプリ情報をお届け◆' . $title;
  } elseif(in_category('trial')) {
    if(has_tag('iphone')) {
      $title = '【スマホアプリのご紹介】iPhone専用アプリを使ってみた!◆' . $title;
    } elseif(has_tag('android')) {
      $title = '【スマホアプリのご紹介】Android専用アプリを使ってみた!◆' . $title;
    } else {
      $title = '【スマホアプリのご紹介】このアプリを使ってみた!◆' . $title;
    }
  } else {
    $title = $title;
  }
  return $title;
}
add_filter('the_title_rss', 'txt_added_title');

2行目と最終行に出てくる「txt_added_title」は任意の同じ文字列にする。

  if(in_category('news')) {
    $title = '【スマホ】最新アプリ情報をお届け◆' . $title;
  } elseif・・・(以下略)

上記は、カテゴリーのスラッグが《news》だったら、記事タイトルの頭に「【スマホ】最新アプリ情報をお届け◆」の文字列を追記する、という意味。

追記する文字列は何でも結構だが、カテゴリーのスラッグが《news》の場合は、カテゴリー名は「NEWS」もしくは「ニュース」となっていることだろう。よって、それに準じた文字列を。

次の部分は、カテゴリーのスラッグ《trial》のなかで、iPhone、Androidどちらか専用のアプリについては「タグ」で分類し、それぞれに追記される定型文、及び両方のOSに対応しているアプリの定型文を追記する、という想定。

  } elseif(in_category('trial')) {
    if(has_tag('iphone')) {
      $title = '【スマホアプリのご紹介】iPhone専用アプリを使ってみた!◆' . $title;
    } elseif(has_tag('android')) {
      $title = '【スマホアプリのご紹介】Android専用アプリを使ってみた!◆' . $title;
    } else {
      $title = '【スマホアプリのご紹介】このアプリを使ってみた!◆' . $title;
    }
  } else・・・(以下略)

内容を順番に見ていく。

  1. カテゴリーのスラッグが《trial》の記事について
  2. タグのスラッグが《iphone》の場合
    「【スマホアプリのご紹介】iPhone専用アプリを使ってみた!◆」という文字列を追記
  3. タグのスラッグが《android》の場合
    「【スマホアプリのご紹介】Android専用アプリを使ってみた!◆」という文字列を追記
  4. タグのスラッグに《iphone》も《android》も含まれていない場合
    「【スマホアプリのご紹介】このアプリを使ってみた!◆」という文字列を追記

という処理をしている。

そしてその次は、これまでの条件に当てはまらない記事については、記事を作成したままの無加工のタイトルを出力する設定となる。

  } else {
    $title = $title;
  }

最後の3行については、〆の呪文と思ってもらえればOK。

  return $title;
}
add_filter('the_title_rss', 'txt_added_title');

もちろん、例として挙げた定型文に類する文言を、記事のタイトルに都度都度含ませて記事を作成している方にとっては、こういった小細工は必要ない。

作業全般に関わる参考サイト

最初、条件分岐に「in_category」や「has_tag」ではなく、「is_category」や「is_tag」を使っていて、狙いどおりの結果にならずかなり試行錯誤した。なんのことはない、根本から間違っていたという話であるw