- 2009-02-17 (火) 15:30
- WP Core Hacks | wordpress
先日の投稿でバージョンアップでコアの変更が飛んだ話をしたばかりですが、プラグインだと変更しにくいものがあるのは確かなので、コアハックは続けていこうと思います(この投稿の内容は WordPress 2.7 で確認しています)。
今日は RSS の出力を変更する、です。
gmail を使っていて、WordPress でブログを書いたりサイトを運営したりしている人に朗報です。gmail のラボ機能にある random signature をご存知でしょうか。名前のとおり署名部分にランダムな1文を入れてくれる機能です。ラボ機能についてはGmailに13の新機能が追加!すべての機能を解説! | Google Mania – グーグルの便利な使い方あたりを参考にどうぞ。
で、この random signature ですが、そもそも簡易な1文を追加するお遊びの要素が強く、RSS 中の title 要素の中を出力してくれるだけなんですね。なので、たいていの RSS 出力を処理してくれます。ただ、名言を出力するというデフォルトの使い方では、自分で文章を選べませんし、せっかくのインターネット時代にパソコン通信的な使い方をしていたのでは面白くありません。せっかくだから自分の記事とそのリンクも貼りたいですよね。
というわけで(前置き長っ!)、本日は WordPress の RSS 出力をいじくって、記事タイトルとリンクの両方を gmail の新規メールに差し込んでみましょう、という試みです。
まず注意しないといけないことは、WordPress は RSS,RSS2,ATOM などのフォーマットでフィードを出力することができるので、どれを使っていて、どれが使われていないのか、を把握しないといけない、ということです。既に誰かが自サイトのフィードを購読しているのに、その出力をいじくってしまっては迷惑ですよね。気をつけてください。(自サイトがどのフィードを出力しているか、が把握できない人は対処しないほうがいいかもしれません。。。)
いじくるファイルは、フィードの種類に合わせて、wp-includes 中の、feed-rss.php , feed-rss2.php ,feed-rdf.php , feed-atom.php のいずれかです。今回は一番手軽な RSS をいじることにするので、feed-rss.php を修正します。バックアップは自己責任でちゃんと取ってください。
<?php
/**
* RSS 0.92 Feed Template for displaying RSS 0.92 Posts feed.
*
* @package WordPress
*/
header('Content-Type: text/xml; charset=' . get_option('blog_charset'), true);
$more = 1;
?>
<?php echo '<?xml version="1.0" encoding="'.get_option('blog_charset').'"?'.'>'; ?>
<?php the_generator( 'comment' ); ?>
<rss version="0.92">
<channel>
<title><?php bloginfo_rss('name'); wp_title_rss(); ?></title>
<link><?php bloginfo_rss('url') ?></link>
<description><?php bloginfo_rss('description') ?></description>
<lastBuildDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_lastpostmodified('GMT'), false); ?></lastBuildDate>
<docs>http://backend.userland.com/rss092</docs>
<language><?php echo get_option('rss_language'); ?></language>
<?php do_action('rss_head'); ?>
<?php while (have_posts()) : the_post(); ?>
<item>
<title><?php the_title_rss() ?> [ <?php the_permalink_rss() ?> ]</title>
<?php if (get_option('rss_use_excerpt')) { ?>
<description><![CDATA[<?php the_excerpt_rss() ?>]]></description>
<?php } else { // use content ?>
<description><?php the_content_rss('', 0, '', get_option('rss_excerpt_length')) ?></description>
<?php } ?>
<link><?php the_permalink_rss() ?></link>
<?php do_action('rss_item'); ?>
</item>
<?php endwhile; ?>
</channel>
</rss>
赤字の部分を削除して、青字の部分を書き足すだけです。簡単!これで、http://自サイト/?feed=rss みたいにすると、各エントリが、”タイトル [ URL ]”って感じになるはずです。
きちんと確認できたわけではありませんが、random signature は読み込めるファイルサイズに制限があるようで、概要や本文などが含まれているデータ量の大きいフィードだと、ランダムにできないようです。これに対処するため、赤字部分(見てのとおり概要か全文を出力している部分)を取ってしまいます。また、フィードの性格からすると、link 要素をリンクとして出力してくれてもよさそうですが、残念ながら random signature は link 要素を出力してくれないので、title 要素の中に URL を入れてしまいます。これによりURLが出力できるわけですね。 link 要素自体は削除してしまってよさそうですが、将来的な変更に備えてとりあえず残しておきます。
修正した RSS が狙い通りに出力されることを確認したら、gmail に設定してください。メールを作成のリンクをクリックするたびに、署名としてタイトルとリンクが出力されれば完成です。(gmailの設定で言語を英語にし、labo タブで random signature を enable にして保存、その後言語を日本語に戻して、全般タブの署名のところにURLを入れればOKです。)
最後に今回の件で苦労した部分、気がついた部分をまとめておきます。なんかおかしいなと思ったら読んでみてください。
- Firefox で RSS を確認しているとキャッシュが効きすぎるようです。Safari では即時反映されますが、Firefox でのRSS確認は時間がかかります。通常のリロードや Shift キーを押しながらのリロードでも更新されないのには参りました。
- gmail で RSS がキャッシュされます。更新頻度がものすごく悪いようなので、gmail への設定は RSS の出力がうまく出来ていることを確認してからやるのがよいようです。
- 本文にも書きましたが、RSS のサイズが大きいとランダム化されないようです。概要も本文もなしにしてサイズを削り、この対処を行うフィードは、random signature 用と割り切ったほうがよいようです。
- タイトル部が長いのもまずいようです(メール的にも)。もし長いタイトルを頻繁に投稿するようであれば、substring 関数などで文字を削るといいでしょう。
- もし特定のカテゴリだけを出力したい場合は、http://自サイトURL/?feed=rss&cat=1 のように、カテゴリIDを追加指定してあげればOKです。
- なんらかの不具合で、Append a random signature from feed: のチェックが勝手に外れてしまうことがあるようです。出力されないと思ったら設定を再度見直してみてください。
それでは楽しい WordPress ライフ、もとい random signature ライフを!
追記:2009年02月17日(火)投稿から約5分後w
Twitter で、クイズ研 の中の人から、クイズ研API を教えていただきました。random signature でクイズが配信されてます。また、google 側の制限として、タイトル 96 文字以内、 item は 10 個まで、らしいと教えていただきました!ありがとうございます!>twk さん
- Newer: 企業サイトを研究するのに使ったサイトのまとめ+おまけ
- Older: [WPPH01]新しいフィルタフックw next_posts_link_attributes / previous_posts_link_attributes
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://officel.biz/wordpress/wpch-vol04-rss-gmail-random-signature.htm/trackback
- Listed below are links to weblogs that reference
- [WPCH vol.04] RSSをハック。ちょっとした工夫で gmail の random signature に対応 from Office L