RSSにタグが表示される件。カテゴリーだけ表示したい
うちのWordpressのタグには記事のキーワードを入れています。特にタグでの分類とか考えているわけではなく、記事ごとの<META>タグにするためね。先日ふとRSSフィードを確認したら、<META>タグ用に5~6ガツガツいれたキーワードが表示されている。 なにこれ超恥ずかしいんですけど!
焦って検索してもタグをフィードに入れたくないと考えているブログは少ないらしく、解決策を見つけるのに苦労しました。
だって、RSSならカテゴリーだけでよくないですか? タグいらなくないですか?
よくわからんです……。
functions.phpでthe_category_rssにadd_filterする
さくっと下記のコードをfunctions.phpにいれましょう。//RSSからタグ削除
add_filter('the_category_rss', 'remove_rss_categories', 10, 2);
function remove_rss_categories( $the_list, $type ) {
if ( empty($type) )
$type = get_default_feed();
$categories = get_the_tags();
$cat_names = array();
$filter = 'rss';
if ( 'atom' == $type )
$filter = 'raw';
if ( !empty($categories) ) foreach ( (array) $categories as $category ) {
$cat_names[] = sanitize_term_field('name', $category->name, $category->term_id, 'post_tag', $filter);
}
$cat_names = array_unique($cat_names);
foreach ($cat_names as $cat_name) {
if ( 'rdf' == $type )
$the_list = str_replace("\t\t<dc:subject><![CDATA[$cat_name]]></dc:subject>\n", '', $the_list);
elseif ( 'atom' == $type )
$the_list = str_replace(sprintf( '<category scheme="%1$s" term="%2$s" />', esc_attr( apply_filters( 'get_bloginfo_rss', get_bloginfo( 'url' ) ) ), esc_attr( $cat_name ) ), '', $the_list);
else
$the_list = str_replace("\t\t<category><![CDATA[" . @html_entity_decode( $cat_name, ENT_COMPAT, get_option('blog_charset') ) . "]]></category>\n", '', $the_list);
}
return $the_list;
}
http://wordpress.stackexchange.com/questions/5503/how-to-not-treat-categories-as-tags-in-feeds/5510ここで「カテゴリーだけ全部抜く」っていうまったく逆のことやってたので、それのタグバージョンに書き換えてみました。
なにやってるかというと、RSSのタグとカテゴリーを記述している部分から、get_the_tags();で取ってきたタグをループで回して全部取り除いてます。
超力技ですね! もっといい方法あったらいいのに!
あーちなみにこの方法ならrdfだろうがatomだろうが問答無用で修正してくれます。管理人が使ってるからそんな問題ないと思いますが、使うなら一応自己責任でお願いしますね。
RSSフィードのdescriptionに画像を含める
勉強のためによそのRSSチェックしてみたら、アイキャッチ画像がdescriptionに入ってるのが普通と気づいてしまいました。こっちもついでになんとかしましょう。うちはdescriptionにはHTMLタグを全部抜いた抜粋文を表示していたんですが、とりあえずアイキャッチが有ったら抜粋文の前に画像を差し込むことに。 こっちもfunctions.phpにちょろっと書いておしまいです。
// display featured post thumbnails in RSS feeds
function WPGood_rss_thumbs( $content ) {
global $post;
if( has_post_thumbnail( $post->ID ) ) {
$large_image_url = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'medium' );
$content = '<p><img width="' . $large_image_url[1] . '" height="' . $large_image_url[2] . '" alt="Thumbnail" src="' . $large_image_url[0] . '" /></p>' . $content;
}
return $content;
}
add_filter( 'the_excerpt_rss', 'WPGood_rss_thumbs' );
add_filter( 'the_content_feed', 'WPGood_rss_thumbs' );
http://wordpress.stackexchange.com/questions/159397/how-to-add-image-to-wordpress-rss-feed-with-no-plug-in/213231ここを参考にしたけど、get_the_post_thumbnail();使ってるせいでsrcsetとか無駄なものがいっぱい入るから、wp_get_attachment_image_srcでさくっと画像のURLとかサイズとか必要なものだけ取ってくるようにしてみました。
多分みなさんfunctions.phpで他にも抜粋とか弄ったりしているだろうから、最後の方に書くといいですよ。
RSSに入る予定の抜粋文に、<p>タグで包んだ<img>タグを入れてます。サイズとかも自動で取ってきてますよ。
ちなみにこれをしてもフィードには即反映はされないので、http://○○/feed/?0123とかしてキャッシュを無視して閲覧しましょう。直近の記事を更新してもOK。
W3C Validatorでフィードをチェックする
フィードなんて自分より他人に使ってもらうためのものだから、ちゃんと出来てるか不安ですよねー。なので最後にフィードの書式が合っているか一応確認。W3Cの公式チェッカーがあるから、これに通れば多分OKだと思います。
https://validator.w3.org/feed/