【当サイトはアフィリエイト広告を利用しています】

RSS Footer終了、他プラグインへの移行も面倒なので自作することにした

2015年7月30日

何も考えずにアップデートするな、ってことか

Paseando por la playa
Paseando por la playa / Dani_vr

先日、WordPressの管理画面でプラグイン更新通知が来てました。その中に「RSS Footer」も含まれていたのです。

「RSS Footer」は、RSSフィードで配信される自分のブログ記事の文末にオリジナルの署名などを追加してくれるプラグイン。記事盗用の防止になると聞いたので利用していました。完全に記事盗用を防げるかどうかは知りませんが、対策を何もやらないより1つくらいやっといたほうがいいだろうってことで。

その「RSS Footer」、最新版にアップデート可能と通知が来てたので、なあ〜んも考えずにアップデートしちゃいました。

アップデート後、管理画面に幾つか警告メッセージが出始めた。なんじゃこりゃ。

RSS Footer has been discontinued and isn’t actively maintained. Please install Yoast SEO as that’s both well maintained and more secure. Import your settings from this plugin, and then disable this plugin entirely.

「RSS Footer」はもう終了しちゃって今後は更新されないので、「Yoast SEO」というプラグインに切り替えてね、インストールしたら「RSS Footer」の設定をインポートして、それ済んだら停止させてね、みたいなことが書かれてます。

調べてみると、最新版にアップデートしていなければ従来通り「RSS Footer」の機能を使えたらしいのですが、最新版にアップデートしちゃった瞬間その機能は死亡。もう使えない。

玉手箱を開けたらジジイになってしまった浦島太郎、こんな感じだったのでしょうか。唖然としましたよ。調べず勢いでアップデートした私も悪いんだけど。

ネットで探せば「RSS Footer」の1つ前のバージョンが発見できるかもしれないけれど、探すのも面倒くさい。警告メッセージに書かれている「Yoast SEO」とやらに移行する方法を探ることにしました。

RSS Footerの機能は引き継いでくれるけれど……

まず「Yoast SEO」というプラグイン自体を知らなかったので、信用できるかどうかを調べてみたところ、有名なプラグインだったようです。これまた有名なプラグイン「All in One SEO Pack」と同様の機能を持っているのだとか。

ひとまずインストールしてみることにしました。警告メッセージの中にプラグインのリンクがあったのでクリックすると、「WordPress SEO by Yoast」というプラグインがインストールされます。

インストール後に有効化し、設定画面「Tools」から「Import and Export」という画面に進み、「RSS Footer からインポート」を指定完了。これで今まで「RSS Footer」でやってくれてたことを引き継いでくれるようです。

これで一件落着かと思ったら、まだ管理画面に警告メッセージが出てる。

読むと「All in One SEO Packと機能がカブってるので、あっちを停止させてくれ」みたいなことが書かれてます。

ああそうですか、ってことで何も考えず「All in One SEO Pack」を停止

これでOKなのかと思ったら、当然ながらOKなわけがない

まず、Google Analyticsで計測しているアクセス数がゼロになりました。「All in One SEO Pack」でAnalyticsのコードを登録していたので、停止させたらそりゃ動かないのよ。

数時間後にようやく気付き、アクセス数がずっとゼロになってるので、

うちのブログ吹き飛んだのか!

とビックリ仰天しましたわ。

他にもMacのブログ執筆アプリ「MarsEdit」との連携がおかしなことになってたり。

MarsEdit 4

MarsEdit 4
価格: 無料 (2018.1.20時点)
カテゴリ: 仕事効率化, ソーシャルネットワーキング
ダウンロード

連携させるために「All in One SEO for MarsEdit」というプラグインを使用しているのですが、停止させちゃったらこっちのプラグインも意味がなくなってしまいます。

さらに、今までいろんな記事を見て「All in One SEO Pack」に様々な設定をしてきました。この設定全てがボタン1つでポンと新プラグイン「WordPress SEO by Yoast」に引き継がれたらハッピーエンドなんですけど、やはり話はそう上手くいかない。

1つ1つの設定を手動で新プラグインに移行するのは超メンドクサイ。ということで「WordPress SEO by Yoast」の使用は早々にあきらめ、停止。「All in One SEO Pack」を再び有効化させたのでありました。アクセス計測も元に戻った。

一応補足しておきますが、「WordPress SEO by Yoast」がダメダメなプラグインだと言ってるわけではありませんよ。「All in One SEO Pack」で設定していた内容を手動で移行させたり少々カスタマイズが発生することを考えると、労力を捻出する時間や根気が今の私にはないので断念した、というだけの話です。

プラグイン自体は双方とも同等の機能を有しているそうです。詳しく比較はしてないので悪しからず。

RSS Footerの機能を自作する

「All in One SEO Pack」を復活させたことで各種SEOの設定は元に戻ったのですが、終了してしまった「RSS Footer」の機能はありません。消えたまんま。

じゃあどうすんの? って話ですが、

http://wispyon.com/rss-thumbnail-related/

困った時のゆめぴょんさん(@yume_pyon)ですよ。RSS Footerと同じ機能を自作するコードを公開されてます。ありがたし!

ゆめぴょんさんが公開されているサンプルコードで、

1.アイキャッチ画像(リンク付き)
2.記事の抜粋文(「続きを読む」のリンク付き)
3.同じカテゴリの人気記事5つ
4.違うカテゴリの人気記事5つ
5.ブログ記事の著作権情報(リンク付き)

上記5つの機能を実装できるのですが、私は関連記事を同一カテゴリーのみ表示させることにしたので、

1.アイキャッチ画像(リンク付き)
2.記事の抜粋文(「続きを読む」のリンク付き)
3.同じカテゴリの人気記事5つ
4.違うカテゴリの人気記事5つ
5.ブログ記事の著作権情報(リンク付き)

と、4つの機能を実装することにしました。

RSS Footerもどき、サンプルコード

コードはWordPressテンプレートファイルの「functions.php」に追加します。カスタマイズ前にバックアップをお忘れなく。

「functions.php」のカスタマイズが不安、どこに追加すればいいのか分からない、という場合は、

hackNY spring 2013 hackathon / hackNY
functions.phpに機能追加する時、コード挿入の目安となる位置

WordPress全体の様々な機能を記述できるテンプレートファイル「functions.php」。このファイルに新機能を追加する際、コードを挿入する目安となる場所について解説してみます。

上のエントリーも書いてます。合わせてどうぞ。

ではサンプルコードを。ゆめぴょんさんのコードをほぼ拝借してます。

function rss_excerpt($content) {
  global $post;
  $cate = get_the_category($post->ID);
  $cat_id = $cate[0]->term_id;
  for($i=1; $i<count($cate); $i++) {
    $cat_id .= ",{$cate[$i]->term_id}";
  }
  if(function_exists('wpp_get_mostpopular')) {
    ob_start();
    wpp_get_mostpopular(
      'range=daily&
      order_by=views&
      limit=5&
      pid=' . $post->ID . '&
      cat=' . $cat_id . '&
      post_html="<li>{title}</li>"&
      wpp_start="<ul>"&
      wpp_end="</ul>"' );
    $pop_rss = ob_get_clean();
  }
  $url=get_permalink($post->ID);
  if(has_post_thumbnail($post->ID)) {
    $content = '<div><a href="' . $url . '" target="_blank">' 
    . get_the_post_thumbnail($post->ID) . '</a> </div><br>' 
    . $content . '<a href="' . $url 
    . '" target="_blank"> ・・・続きを読む</a><br><br>★いま読まれている関連エントリー' 
    . $pop_rss . '<br>『<a href="' . $url . '" target="_blank">' 
    . get_the_title($post->ID) 
    . '</a>』はブログ『<a href="http://★★★★★/" target="_blank">◆◆◆◆◆</a>』に掲載された記事です。';
  }
  return $content;
}
add_filter('the_excerpt_rss', 'rss_excerpt');

23行目〜29行目は見やすくするため改行しています。実際は1行で書いても問題ありません。

29行目の「★★★★★」はご自身のURLに(私の場合は「rikumalog.com」)、また「◆◆◆◆◆」はブログ名に(私の場合は「りくまろぐ」)、それぞれ変更してください。

11行目でパラメータ「range」を「daily」にしているので、ランキング抽出範囲は「1日(24時間)」。直近24時間でアクセス数が多い同一カテゴリー記事を抽出することができます。

13行目で「limit=5」と指定してますが、「5」の部分を変更すれば表示件数が変わります。「10」にすれば関連記事が10件表示。

ゆめぴょんさんの記事内でも補足されてますが、アイキャッチ画像と抜粋文がないブログ記事の場合、おそらく挙動が異なってきます。私のブログは全ての記事でアイキャッチ画像と抜粋文を登録しているので正常に動作しました。

アイキャッチ画像がない記事の場合、22行目の「if」命令によりアイキャッチ画像が登録されていない記事は処理の対象外と判定されるため、フッターのメッセージはRSSフィードに表示されません。

回避するには「アイキャッチ画像を登録する」か、「サンプルコードを改変する」か。具体的には22行目(if文)と30行目(”}”のところ)を削除すればOKのはずですが、あまりオススメしません。素直にアイキャッチ画像を登録したほうが無難です。

抜粋文を登録していない場合は、1行目の「$content」という変数が空っぽになってるはずなので、25行目先頭の「$content」も同じく空っぽ。つまりアイキャッチ画像下に何も表示されず「・・・続きを読む」というリンクだけが表示されるのではないかと想像します(テストしてないので、あくまで想像です。スミマセン)。

というわけで、iPhoneのRSSリーダーアプリ「Sylfeed」にて上手く出力されてるか確認してみました。

Sylfeed

Sylfeed
価格: ¥240 (2015.7.29時点)
カテゴリ: ニュース, ソーシャルネットワーキング
ダウンロード

りくまろぐ RSS

↑ 記事タイトル、アイキャッチ画像(リンク付き)、抜粋文、「続きを読む」のリンク。

さらにその下は、

りくまろぐ RSSフィード

↑ 同一カテゴリーの関連エントリー5つ、そして今まで「RSS Footer」が出力していた最後のメッセージ文。すべてRSSフィードに上手く出力されました。

りくま ( @Rikuma_ )的まとめ

今まではRSSフィードの最後に盗用防止を兼ねたメッセージ文のみを表示させていましたが、今回のカスタマイズで関連記事も表示できるようになったので、むしろ機能強化ができて良かったのかもしれません。

とは言いつつ、WordPress自体のアップデートもそうですが、プラグインのアップデートも安易にやっちゃうと怖いですね。以前「WordPress Popular Posts」を今回同様に何も考えずアップデートしたら、パラメータが変更・廃止される仕様変更が発生していて上手く動作しなくなり大慌てした苦い記憶が蘇りました。

それほど複雑ではない機能ならプラグインに頼らず自作コードに変更しちゃうのが後々ラクなのかもしれません。ゆめぴょんさん、ありがとうございました。

-WordPress
-