{"id":322062,"date":"2026-06-07T09:39:47","date_gmt":"2026-06-07T09:39:47","guid":{"rendered":"https:\/\/ja.wordpress.org\/plugins\/rss-display\/"},"modified":"2026-06-18T15:58:17","modified_gmt":"2026-06-18T15:58:17","slug":"rssemble-cards-for-rss-feeds","status":"publish","type":"plugin","link":"https:\/\/lin.wordpress.org\/plugins\/rssemble-cards-for-rss-feeds\/","author":23510860,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.2","stable_tag":"1.0.2","tested":"7.0","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Rssemble Cards for RSS Feeds","header_author":"Masaki Mori","header_description":"Display multiple RSS feeds as OGP image card grids. No external service dependencies.","assets_banners_color":"4d4c54","last_updated":"2026-06-18 15:58:17","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/rssemble-cards-for-rss-feeds.pages.dev\/","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":107,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"masakimori","date":"2026-06-07 09:39:11"},"1.0.1":{"tag":"1.0.1","author":"masakimori","date":"2026-06-11 04:44:27"},"1.0.2":{"tag":"1.0.2","author":"masakimori","date":"2026-06-18 15:58:17"}},"upgrade_notice":{"1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":3568276,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3568276,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3568276,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.0.1","1.0.2"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Card grid display on the front end.","2":"Admin settings screen."}},"plugin_section":[],"plugin_tags":[14240,252,6040,26918,850],"plugin_category":[],"plugin_contributors":[266075],"plugin_business_model":[],"class_list":["post-322062","plugin","type-plugin","status-publish","hentry","plugin_tags-cards","plugin_tags-feed","plugin_tags-grid","plugin_tags-ogp","plugin_tags-rss","plugin_contributors-masakimori","plugin_committers-masakimori"],"banners":{"banner":"https:\/\/ps.w.org\/rssemble-cards-for-rss-feeds\/assets\/banner-772x250.png?rev=3568276","banner_2x":"https:\/\/ps.w.org\/rssemble-cards-for-rss-feeds\/assets\/banner-1544x500.png?rev=3568276","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/rssemble-cards-for-rss-feeds\/assets\/icon-256x256.png?rev=3568276","icon_2x":"https:\/\/ps.w.org\/rssemble-cards-for-rss-feeds\/assets\/icon-256x256.png?rev=3568276","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Rssemble Cards for RSS Feeds fetches multiple RSS feeds and displays them as image card grids using OGP images. It runs entirely on WordPress built-in features (SimplePie, transients, DOMDocument) \u2014 no external services required.<\/p>\n\n<p>Key features:<\/p>\n\n<ul>\n<li>Aggregates multiple RSS feeds with URL-based deduplication (newest date wins)<\/li>\n<li>Automatic OGP image retrieval (priority: media:content \u2192 enclosure \u2192 og:image \u2192 default image)<\/li>\n<li>Parallel OGP fetching via curl_multi (respects WP proxy settings and SSL verification)<\/li>\n<li>8 layout types: grid, list, list_vertical, text, text_line, image_only, carousel, popup_grid<\/li>\n<li>Responsive layout (3 columns on desktop, 2 on tablet, 1 on mobile \u2014 configurable)<\/li>\n<li>FSE theme color variable support (--wp--preset--color--*) with fallback<\/li>\n<li>Hover zoom + shadow effect on cards<\/li>\n<li>Transient-based caching (no WP-Cron required)<\/li>\n<li>Configurable RSS cache duration (12 hours \/ 1 day \/ 1 week \/ 1 month)<\/li>\n<li>OGP image URL cached for 1 month (includes negative cache for failed fetches)<\/li>\n<li>Stale cache fallback when a feed fetch fails<\/li>\n<li>Admin UI with live preview (desktop \/ tablet \/ mobile width switching)<\/li>\n<li>Compatible with object cache (Redis, Memcached) and Cloudflare<\/li>\n<\/ul>\n\n<h3>Usage<\/h3>\n\n<p>Basic:<\/p>\n\n<pre><code>[rssecafo]\n<\/code><\/pre>\n\n<p>With parameters:<\/p>\n\n<pre><code>[rssecafo columns=\"4\" count=\"8\"]\n[rssecafo columns=\"2\" count=\"6\" feed=\"https:\/\/example.com\/feed\"]\n[rssecafo orderby=\"random\" target=\"_self\"]\n<\/code><\/pre>\n\n<p>Parameter reference:<\/p>\n\n<ul>\n<li>columns    : Number of columns (2 \/ 3 \/ 4). Default: admin setting.<\/li>\n<li>count      : Number of items to display. Default: admin setting.<\/li>\n<li>feed       : Comma-separated feed URL(s). Default: all registered feeds.<\/li>\n<li>orderby    : Sort order (date \/ random). Default: date.<\/li>\n<li>target     : Link target (_blank \/ _self). Default: admin setting.<\/li>\n<li>type       : Display type (grid \/ list \/ list_vertical \/ text \/ text_line \/ image_only \/ carousel \/ popup_grid).<\/li>\n<li>date       : Show date (1 \/ 0). Default: 1.<\/li>\n<li>site       : Show site name (1 \/ 0). Default: 0.<\/li>\n<li>desc       : Show description (1 \/ 0). Default: 0.<\/li>\n<li>bold       : Bold title (1 \/ 0). Default: 0.<\/li>\n<li>responsive : Responsive columns (1 \/ 0). Default: 1.<\/li>\n<li>title_lines: Maximum title lines (1 \/ 2 \/ 3). Default: admin setting.<\/li>\n<li>img        : Override default image URL.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>rssemble-cards-for-rss-feeds<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install via <strong>Plugins &gt; Add New &gt; Upload Plugin<\/strong>.<\/li>\n<li>Activate the plugin from the <strong>Plugins<\/strong> screen.<\/li>\n<li>Go to <strong>Settings &gt; Rssemble Cards<\/strong> and configure your feed URLs.<\/li>\n<li>Add the shortcode to any post, page, or widget.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"no%20image%20is%20displayed\"><h3>No image is displayed<\/h3><\/dt>\n<dd><p>If the RSS feed contains no image and the article's og:image cannot be fetched, the default image configured in the admin settings (or the bundled placeholder) is shown.<\/p><\/dd>\n<dt id=\"how%20do%20i%20clear%20the%20cache%20immediately%3F\"><h3>How do I clear the cache immediately?<\/h3><\/dt>\n<dd><p>Go to <strong>Settings &gt; Rssemble Cards<\/strong> and click <strong>Refresh Now<\/strong>. This clears the RSS cache; OGP image cache (1-month fixed) is not affected.<\/p><\/dd>\n<dt id=\"does%20it%20use%20wp-cron%3F\"><h3>Does it use WP-Cron?<\/h3><\/dt>\n<dd><p>No. Feeds are fetched on demand when the shortcode runs and the cache is missing or expired.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Fixed: Admin feed URL input now rejects non-http\/https schemes (mirrors the shortcode SSRF guard).<\/li>\n<li>Fixed: Carousel and popup_grid JavaScript event listeners no longer accumulate on repeated admin preview refreshes (dataset init guard added).<\/li>\n<li>Fixed: Admin preview carousel\/popup now initializes correctly on first load (moved init call into $.ajax callback).<\/li>\n<li>Fixed: OGP fetcher <code>to_absolute_url()<\/code> now normalizes <code>..\/<\/code> segments in relative paths without over-popping past the root, preventing malformed image URLs.<\/li>\n<li>Fixed: popup_grid modal overlay (<code>position:fixed<\/code>) now renders outside the <code>container-type<\/code> wrapper to correctly cover the full viewport.<\/li>\n<li>Fixed: carousel\/popup_grid global event listeners (<code>window resize<\/code>, <code>document keydown<\/code>) are now properly torn down when nodes are removed from the DOM (AbortController + MutationObserver).<\/li>\n<li>Improved: Responsive layout now uses CSS Container Queries (<code>@container<\/code>) instead of <code>@media<\/code>, so the admin preview device-width switcher correctly triggers layout changes. A <code>@supports not (container-type: inline-size)<\/code> fallback ensures older browsers retain responsive behavior.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Fixed: Shortcode name in readme (was <code>[rss_display]<\/code>, now correctly <code>[rssecafo]<\/code>).<\/li>\n<li>Improved: Admin help text and Usage tab now clarify the difference between admin-panel feed registration and the <code>feed=<\/code> shortcode attribute.<\/li>\n<li>Code: Removed dead <code>data-i18n<\/code> attributes on child elements inside i18n-translated parents (docs page).<\/li>\n<li>Code: Admin notice markup refactored to use shared CSS class instead of inline styles.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Display multiple RSS feeds as OGP image card grids. No external service dependencies.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/lin.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/322062","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lin.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/lin.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/lin.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=322062"}],"author":[{"embeddable":true,"href":"https:\/\/lin.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/masakimori"}],"wp:attachment":[{"href":"https:\/\/lin.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=322062"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/lin.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=322062"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/lin.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=322062"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/lin.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=322062"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/lin.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=322062"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/lin.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=322062"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}