サイト内検索
Cocoonフォーラム
書き込みの前に以下の3点をご確認ください。
何を書き込んだら良いか分からない場合は、以下のテンプレートをコピペしてご利用ください。
不具合・カスタマイズ対象ページのURL:
相談内容:
不具合の発生手順:
解決のために試したこと:
※文字だけでは正しく伝わらない可能性があるため、スクショ画像の添付もお願いします。
※高速化設定をしている場合は無効にしてください。
環境情報:※↑こちらに「Cocoon設定 → テーマ情報」にある「環境情報」を貼り付けてください。
環境情報の取得方法はこちら。
→ https://wp-cocoon.com/theme-report/
高速化設定を無効にするにはこちら。
→ https://wp-cocoon.com/theme-trouble/
フォーラム利用ガイドリンク
- フォーラムガイドライン
- よくある質問と答え(FAQ)
- サポート対象外のケース
- 原因不明の不具合用トラブルシューティング
- トピックにHTMLを貼り付ける方法(推奨ツール:notepad.pw)
- 真っ白画面でのエラーメッセージの確認方法
- ブラウザ環境チェックツール
- Cocoonカスタマイズ依頼
フォーラム質問後、問題等が解決した場合は結果を書き込んでいただけると幸いです。同様の問題で調べている方には、結果が一番気になる部分となります。
トピックスターター 2025年12月4日 15:23
お世話になっております。
サイトにcocoonの「RSS記事一覧を表示するショートコード」を貼っているのですが、wordpressを6.9にアップデートした後から記事の更新がされなくなりました。
具体的には、
・TOPページなどにRSS記事一覧を表示するショートコードを貼り付け
・6.9にアップデートするまでは正常に外部RSSを取得し、記事一覧を表示
・6.9にアップデートしてからは記事が更新されず、アップデート前に取得できていた記事が最新の状態で止まったまま
アップデート前までは正常に動いていたため、おそらくこれが原因ではないかと思います。
全くの無効ではなく、記事一覧は表示されているのですが更新がされない状態です。
(私の場合はアップデート前から使っていたため上記現象ですが、今からショートコードを新たに使われる場合は、白紙?の状態などになるのかもしれません)
お手すきの際にご確認いただけますでしょうか。よろしくお願いいたします。
2025年12月4日 20:51
この辺りのことは、疎いのですけれど・・・。
とりあえず、以下の環境で確認しました。
WordPress 6.9
Cocoon 2.8.8.2
確認したのは、以下です。
https://news.yahoo.co.jp/rss/topics/top-picks.xml
上記が以下の時に確認しました。
CocoonのRSSのショートコードで、3件だけ表示させてみると、以下のような感じに。
これは、もっと前にテストしていたものが、どうにも残っているようで。
とりあえず、WordPress側のキャッシュの更新間隔を1秒にしてみて、以下(fetch_feed())の値を確認しました。
(直前の$feed_contentsのif文は、コメント化しました)
長いですから、titleとpubDateだけ抽出すると、以下のような感じで、RSSと一致しない状態でした。
'安倍氏銃撃 山上被告が初めて謝罪' (length=46)
'Thu, 04 Dec 2025 07:50:10 GMT' (length=29)'ダイハツ 6車種23万台リコール' (length=40)
'Thu, 04 Dec 2025 08:14:36 GMT' (length=29)'日本人iPhone離れ進む? 要因分析' (length=41)
'Thu, 04 Dec 2025 06:17:35 GMT' (length=29)'ごみの中に158万円 分別中に発見' (length=43)
'Thu, 04 Dec 2025 08:32:51 GMT' (length=29)'今年の車 スバル・フォレスター' (length=43)
'Thu, 04 Dec 2025 09:02:27 GMT' (length=29)'W杯抽選 日本の対戦相手はどこに' (length=44)
'Thu, 04 Dec 2025 08:07:44 GMT' (length=29)'紅白 ダイアンが副音声で司会' (length=40)
'Thu, 04 Dec 2025 09:00:15 GMT' (length=29)
ちなみに、同じことを「WordPress 6.8.3」ですると、以下のような感じで、RSSと一致していると思います。
(Cocoonは同じ、2.8.8.2)
(Cocoonは同じ、2.8.8.2)
'12月でもクマ警戒を 被害相次ぐ' (length=42)
'Thu, 04 Dec 2025 10:24:35 GMT' (length=29)'5日朝厳しい冷え込み 東京3℃予想' (length=45)
'Thu, 04 Dec 2025 09:19:27 GMT' (length=29)'高校生の扶養控除 縮小を検討' (length=40)
'Thu, 04 Dec 2025 10:25:00 GMT' (length=29)'ガス漏れで22カ所以上で火災 山口' (length=45)
'Thu, 04 Dec 2025 09:57:21 GMT' (length=29)'箱ワナの扉閉める 妨害行為相次ぐ' (length=46)
'Thu, 04 Dec 2025 09:20:25 GMT' (length=29)'駿河屋サイト 3万件超の漏えいか' (length=44)
'Thu, 04 Dec 2025 09:42:19 GMT' (length=29)'閉園の動物園 ライオンが双子出産' (length=46)
'Thu, 04 Dec 2025 10:52:55 GMT' (length=29)'小宮山悟監督が力投 早慶OB戦' (length=39)
'Thu, 04 Dec 2025 11:15:09 GMT' (length=29)
「WordPress 6.9」側で、以下を追加して、WordPress側の内部キャッシュを無効にしてみしたのですが。
(ソートも無効にしてしまいましたが・・・)
(ソートも無効にしてしまいましたが・・・)
add_action('wp_feed_options', function($feed) {
$feed->enable_cache(false);
$feed->enable_order_by_date(false);
});
すると、取得した内容が、RSSと一致するんですよね。
(「WordPress 6.8.3」とも一致する)
WordPressの関数fetch_feed()で取得した内容が、上記の状態ですから。
(Cocoonのバージョンが同じで、WordPressのバージョン違いで、内容が違いますし)
WordPress側の不具合かなと、思うのですけれど。
わいひら reacted
2025年12月5日 00:33
WordPress 6.9でRSS関連について変更がされているようです。
●発生のアルゴリズム
以下の流れなのでは?
トランジェント管理(set_transient)
$transient_id にRSSのHTMLを保存。
設定した時間(例:1分)で期限切れになる。
期限切れになると fetch_feed() が呼ばれる
このとき $feed_contents は存在しないため、RSSを再取得しようとする。
しかしfetch_feed()内部では SimplePieがキャッシュしている。
デフォルトでは 12時間キャッシュ。
そのため、実際のHTTPリクエストは行われず、SimplePie が保持している古いデータ が返る。
結果として、トランジェントは更新されても、表示されるRSS内容は古いままになる。
結果、rssショートコードで指定したオプションcache_minuteが反映されない。
●Cocoon側での対策案
function get_rss_feed_tag( $atts ) {
include_once(ABSPATH . WPINC . '/feed.php');
extract(shortcode_atts(
array(
'url' => 'https://ja.wordpress.org/feed/', //取得するRSSフィードURL
'count' => '5', //取得する数
'img' => NO_IMAGE_RSS, //画像が取得できなかった場合のイメージ
'target' => '_blank', //ブラウザの開き方(target属性)
'cache_minute' => '60', //キャッシュ時間(分)
'desc' => '1', //説明文表示 1 or 0
'date' => '1', //日付表示 1 or 0
'type' => '', //表示タイプ
'bold' => 0, //タイトルを太字にするか
'arrow' => 0, //矢印を出すか
'class' => null, //拡張クラス
),
$atts,
'rss'
));
$feed_url = $url;
$feed_count = $count;
$img_url = $img;
$feed_content = '';
$feed_contents = '';
// ★キャッシュ時間を整数化してトランジェントキーに含める
$cache_minute_int = intval($cache_minute);
$transient_id = 'ree_feed_'.md5($feed_url.'_'.$count.'_'.$img_url.'_'.$target.'_'.$desc.'_'.$date.'_'.$type.'_'.$bold.'_'.$arrow.'_'.$class.'_'.$cache_minute_int);
$feed_contents = get_transient( $transient_id );
//キャッシュが存在しない場合URLから取得
if (!$feed_contents) {
// ★fetch_feed の内部キャッシュ時間をショートコード設定に同期
$feed_cache_lifetime = 60 * $cache_minute_int;
$filter_function_hook_id = function( $seconds ) use ( $feed_cache_lifetime ) {
return $feed_cache_lifetime;
};
add_filter( 'wp_feed_cache_transient_lifetime', $filter_function_hook_id, 10, 2 );
$rss = fetch_feed( $feed_url );
remove_filter( 'wp_feed_cache_transient_lifetime', $filter_function_hook_id, 10, 2 );
if ( !is_wp_error( $rss ) ) {
$maxitems = $rss->get_item_quantity( $feed_count );
$rss_items = $rss->get_items( 0, $maxitems );
foreach ( $rss_items as $item ) :
$first_img = '';
if ( preg_match( '/<img.+?src=[\'"]([^\'"]+?)[\'"].*?>/msi', $item->get_content(), $matches )) $first_img = $matches[1];
if ( !empty( $first_img ) ) :
$feed_img = esc_attr( $first_img );
else:
$feed_img = $img_url;
endif;
$feed_url = $item->get_permalink();
$feed_title = $item->get_title() ?? '';
$feed_title = str_replace(["\r\n", "\r", "\n"], '', $feed_title);
$feed_date = $item->get_date(get_site_date_format());
$feed_text = get_content_excerpt(strip_tags($item->get_content()), get_entry_card_excerpt_max_length());
$feed_content .= '<a href="' . esc_url($feed_url) . '" title="' . esc_attr($feed_title) . '" class="rss-entry-card-link widget-entry-card-link a-wrap" target="'.esc_attr($target).'"'.get_rel_by_target($target).'>';
$feed_content .= '<div class="rss-entry-card widget-entry-card e-card cf">';
$feed_content .= '<figure class="rss-entry-card-thumb widget-entry-card-thumb card-thumb">';
$feed_content .= '<img src="' . esc_url($feed_img) . '" class="rss-entry-card-thumb-image widget-entry-card-thumb-image card-thumb-image" alt="">';
$feed_content .= '</figure>';
$feed_content .= '<div class="rss-entry-card-content widget-entry-card-content card-content">';
$feed_content .= '<div class="rss-entry-card-title widget-entry-card-title card-title">' . esc_html($feed_title) . '</div>';
if ($desc) {
$feed_content .= '<div class="rss-entry-card-snippet widget-entry-card-snippet card-snippet">' . esc_html($feed_text) . '</div>';
}
if ($date) {
$feed_content .= '<div class="rss-entry-card-date widget-entry-card-date">
<span class="rss-entry-card-post-date widget-entry-card-post-date post-date">' . esc_html($feed_date) . '</span>
</div>';
}
$feed_content .= '</div>';
$feed_content .= '</div>';
$feed_content .= '</a>';
endforeach;
} else {
$feed_content = '<p>RSSフィードを取得できません</p>';
}
$atts = array(
'type' => $type,
'bold' => $bold,
'arrow' => $arrow,
'class' => $class,
);
$card_class = get_additional_widget_entry_cards_classes($atts);
$feed_contents = '<div class="rss-entry-cards widget-entry-cards'.$card_class.' no-icon">' . $feed_content . '</div>';
// ★set_transient の期限に整数化したキャッシュ時間を使用
set_transient($transient_id, $feed_contents, 60 * $cache_minute_int);
}
return apply_filters( 'get_rss_feed_tag', $feed_contents);
}
わいひら reacted
2025年12月7日 14:29
2025年12月18日 20:46
Cocoonのtransientを使用するという形の方がシンプルに思ったので、そのように、修正させていただきました。
https://github.com/xserver-inc/cocoon/commit/1a0a50e3988b633b009b5eb7a8c36c4b9a5c921e
修正版はこちら。
------------------------------------------------
https://github.com/xserver-inc/cocoon
開発中の最新ファイルをダウンロードする場合は、上記ページのダウンロードボタンからzipファイルをダウンロードしてください。
WordPressでの手動アップデート方法はこちら
https://wp-cocoon.com/manual-update-of-cocoon-theme/
------------------------------------------------
問題の解決に至った場合には、トピック冒頭の「解決済み」をクリックしていただけますと幸いです。
また、有用な回答があった場合は返信右下にある「いいね!」もご活用ください。回答者の励みになります。
(CC BY-ND 2.1)準じていれば(リンクを貼っていただければ)転載も自由です。カスタマイズ記事を書く際にコード等をコピペ利用していただいて構いません。
フォーラムの使い方がよくわからない場合は、テストトピックで自由にテストしていただいて構いません。
最近の書き込みはこちら。
詳細なカスタマイズ依頼をするならこちら。




