2010/8/8

WordPressでthe_contentとthe_excerptにadd_filterしたんだけれども

長らく、WordPressをアップグレードするたびにfeed-rss2.phpにFlickrの画像の読み込みコードを追記し直すという作業に四苦八苦しておったのですが、このたびadd_filterでthe_contentとthe_excerptに追加しちゃえば良いということに気付きました。ですが、これがクセモノでした。

function getFlickrContent($content) {
$id = get_the_id();
$flickr = get_post_meta($id,’Flickr’,TRUE);
if ((!empty($flickr)) && (!is_home())) {
echo ‘<p><img src="’.$flickr.’_b.jpg" /></p>’;
}
return $content;
}
add_action(‘the_content’, ‘getFlickrContent’);

function getFlickrExcerpt($excerpt) {
$id = get_the_id();
$flickr = get_post_meta($id,’Flickr’,TRUE);
if ((!empty($flickr)) && (is_home())) {
echo ‘<a href="’;
the_permalink();
echo ‘"><img src="’.$flickr.’_t.jpg" class="imagel" /></a>’;
}
return $excerpt;
}
add_action(‘the_excerpt’, ‘getFlickrExcerpt’);

何が問題かというと、それぞれ元のデータから、$contentと$excerptが生成されるんじゃなくて、まず$contentがあって、それを整形して$excerptが生成されるという段階を踏んでいるようなんですね。というわけで、普通にやるとthe_excerptにはFlickrの大きい画像と小さい画像、両方読み込まれてしまうと。そこで、今回のデザインではトップページでしかthe_excerptを使っていないので、トップページであるかどうかを判別する処理を付け加えて解消。 the_content_feedも$contentをベースに生成されてるっぽいので、上の書き方でthe_contentと同じアクションがthe_content_feedに追加されます。なんかもう少し普遍的な方法もありそうですが。。。

とりあえずこれで今後は躊躇せずWordPressのアップグレードが行えるので一安心です。

ひとり仕事: フリーランスという働き方
(2012-10-5)
売り上げランキング: 14,705
100円
WordPressデザインレシピ集
狩野 祐東
技術評論社
売り上げランキング: 197,569
WordPress 高速化&スマート運用必携ガイド
こもりまさあき 岡本渉
エムディエヌコーポレーション
売り上げランキング: 435,263