ブログで記事を書くと必然的にRSSも更新されます。これはもちろんWordPressでも同じことなのは御存知の通り。WordPressの場合はRSSの内容が[設定]-[表示設定]の「RSS/Atom フィードでの各投稿の表示」で「全文」か「抜粋」を選択することができます。

この設定の「全文」を選択するとHTMLタグを含んだ記事の内容の全てがRSSのcontent:encoded要素に表示されます。これに対し「抜粋」を選択するとHTMLを除いた記事の先頭部分のみが表示されます。

WordPressにはMoreタグというものが用意されていて、そのタグを記事中に埋め込むと記事の一覧ではそのMoreタグ以後が「続きを読む…」などのリンクになります。つまりもっと読みたい人はこのリンクをクリックして内容を読んでください。というような使い方をするのですが、このMoreタグをRSSでも使用することができないのかを下記にちょっと調べてみました。

実際にRSSで表示しているPHPファイルは「/wp-includes/feed-rss2.php」ファイルになります。このファイルの48行目から52行目付近に下記のようなソースがあります。

<?php if ( strlen( $post->post_content ) > 0 ) : ?>
<content:encoded><![CDATA[<?php the_content() ?>]]></content:encoded>
<?php else : ?>
<content:encoded><![CDATA[<?php the_excerpt_rss() ?>]]></content:encoded>
<?php endif; ?>

これは1行目で設定の「RSS/Atom フィードでの各投稿の表示」を確認しているもので「全文」の場合は2行目を。「抜粋」の場合は4行目を行うようになります。

HTMLを含んだ全文を表示し、Moreタグ以後は表示させないようにするためには「全文」の設定を行いWordPressで用意されているthe_content()関数をフックしてフィルタ等でその表示方法を変更すれば良し!と思ってプラグインなどを作ってみました。Moreタグ以後を表示しない用にするプラグインを作ることはできたのですが、ここで大きな落とし穴がありました。

このthe_content()関数はRSS以外に記事の表示ページでも利用していて、プラグインでMoreタグ以後を表示しないようにしてしまうとブログ本文も表示されなくなってしまうのです(x_x)

だったらfeed-rss2.phpファイルそのものを変更すればいいのかもしれませんが、できるだけWordPress本体のソースの改変はバージョンアップなどのことを考えると避けたい方法です。もしかしたらテーマで何かしらの対応ができるのかもしれませんが、それらは後々検討してみたいと思います。

ブログ本文とRSSの関数は分けてほしいな・・・。

基本からしっかりわかる WordPress 2.7 カスタマイズブック (Web Designing BOOKS)
大藤 幹
毎日コミュニケーションズ
売り上げランキング: 30550