{"id":319112,"date":"2026-06-15T11:50:19","date_gmt":"2026-06-15T11:50:19","guid":{"rendered":"https:\/\/de.wordpress.org\/plugins\/instapi-insta-feed-widget-block\/"},"modified":"2026-09-18T15:43:44","modified_gmt":"2026-09-18T15:43:44","slug":"quqii-social-media-feed-grid","status":"publish","type":"plugin","link":"https:\/\/gl.wordpress.org\/plugins\/quqii-social-media-feed-grid\/","author":23502810,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.9","stable_tag":"1.2.9","tested":"7.1.1","requires":"6.0","requires_php":"8.0","requires_plugins":null,"header_name":"quqii \u2013 Social Media Feed Grid","header_author":"quqii","header_description":"Display Instagram feeds as a responsive grid via shortcode or Gutenberg block. Connects to feed.quqii.net (https:\/\/feed.quqii.net) to retrieve and cache publicly available social media (Instagram) profile data. An API token is required.","assets_banners_color":"eea2bc","last_updated":"2026-09-18 15:43:44","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/feed.quqii.net","header_author_uri":"https:\/\/quqii.com","rating":5,"author_block_rating":0,"active_installs":30,"downloads":571,"num_ratings":1,"support_threads":1,"support_threads_resolved":1,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"quqii","date":"2026-06-15 11:50:00","revision":3573048},"1.1.0":{"tag":"1.1.0","author":"quqii","date":"2026-08-31 11:25:12","revision":3673976},"1.2.0":{"tag":"1.2.0","author":"quqii","date":"2026-09-04 10:23:00","revision":3681028},"1.2.1":{"tag":"1.2.1","author":"quqii","date":"2026-09-04 10:44:12","revision":3681047},"1.2.2":{"tag":"1.2.2","author":"quqii","date":"2026-09-04 11:44:39","revision":3681138},"1.2.2.1":{"tag":"1.2.2.1","author":"quqii","date":"2026-09-06 11:18:14","revision":3683354},"1.2.4":{"tag":"1.2.4","author":"quqii","date":"2026-09-18 07:22:40","revision":3701480},"1.2.5":{"tag":"1.2.5","author":"quqii","date":"2026-09-18 07:32:06","revision":3701502},"1.2.6":{"tag":"1.2.6","author":"quqii","date":"2026-09-18 09:40:22","revision":3701699},"1.2.7":{"tag":"1.2.7","author":"quqii","date":"2026-09-18 10:25:04","revision":3701781},"1.2.8":{"tag":"1.2.8","author":"quqii","date":"2026-09-18 12:39:47","revision":3701982},"1.2.9":{"tag":"1.2.9","author":"quqii","date":"2026-09-18 15:43:44","revision":3702255}},"upgrade_notice":{"1.2.9":"<p>Follower counts are now shown abbreviated (e.g. &quot;27.9K&quot;) next to the profile name, and can be turned off entirely under Settings, per shortcode, or per block. No action needed.<\/p>","1.2.8":"<p>Fixes another way a quirky WordPress feature (the Customizer&#039;s live preview this time) could burn your monthly quota while you&#039;re just editing your site. No action needed.<\/p>","1.2.7":"<p>API requests now include the page they were made from, so your quqii dashboard can show exactly which page a feed is live on. No new visitor data, no action needed.<\/p>","1.2.6":"<p>Example handle is now &quot;quqii.official&quot;, a real account we control, so an unedited shortcode shows a working demo feed instead of an error. No action needed.<\/p>","1.2.5":"<p>Replaces the &quot;natgeo&quot; example account from 1.2.3 with a non-real placeholder, so an unedited shortcode shows a clear message instead of silently displaying National Geographic&#039;s feed. No action needed.<\/p>","1.2.4":"<p>Stops page-builder live previews (e.g. Elementor&#039;s Shortcode widget) from sending your half-typed Instagram username to the API and using up quota while you&#039;re still editing. No action needed.<\/p>","1.2.3":"<p>Fixes feeds stuck on the placeholder username &quot;username&quot; from old copy-pasted examples, with a clear message instead of a silent failure. No action needed.<\/p>","1.2.2.1":"<p>Usernames and Instagram links are now sanitised more thoroughly, fixing feeds that failed to load when the input carried an invisible character or leftover HTML encoding (seen with Elementor). No action needed.<\/p>","1.2.2":"<p>If a caching plugin is showing an old, stale version of your feed, a new setting under quqii Feed \u2192 Settings lets you exclude those pages from full-page caching. Off by default \u2014 nothing changes unless you turn it on.<\/p>","1.2.1":"<p>Sites already connected before 1.2.0 (or connected with a pasted-in token) now get their own name and Disconnect button in your dashboard automatically. No action needed.<\/p>","1.2.0":"<p>Connecting your site is now just an email address away \u2014 no token to copy. Nothing changes for existing installs; your current connection keeps working exactly as before.<\/p>","1.1.0":"<p>Adds a customisable caption overlay, per-shortcode setting overrides, and several display fixes. No action required \u2014 existing shortcodes and blocks keep working unchanged.<\/p>","1.0.0":"<p>Initial release.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3573048,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3573048,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon-512x512.png":{"filename":"icon-512x512.png","revision":3573048,"resolution":"512x512","location":"assets","locale":"","width":512,"height":512}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3573048,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3573048,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"quqii-feed\/feed":{"name":"quqii-feed\/feed","title":"quqii Feed"}},"tagged_versions":["1.0.0","1.1.0","1.2.0","1.2.1","1.2.2","1.2.2.1","1.2.4","1.2.5","1.2.6","1.2.7","1.2.8","1.2.9"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Plugin settings with usage statistics","2":"Gutenberg block in the editor","3":"Feed output in the frontend","4":"Platform backend"}},"plugin_section":[],"plugin_tags":[252,6040,148076,311,174],"plugin_category":[56],"plugin_contributors":[264453],"plugin_business_model":[],"class_list":["post-319112","plugin","type-plugin","status-publish","hentry","plugin_tags-feed","plugin_tags-grid","plugin_tags-gutenberg","plugin_tags-instagram","plugin_tags-social","plugin_category-social-and-sharing","plugin_contributors-quqii","plugin_committers-quqii"],"banners":{"banner":"https:\/\/ps.w.org\/quqii-social-media-feed-grid\/assets\/banner-772x250.png?rev=3573048","banner_2x":"https:\/\/ps.w.org\/quqii-social-media-feed-grid\/assets\/banner-1544x500.png?rev=3573048","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/quqii-social-media-feed-grid\/assets\/icon-128x128.png?rev=3573048","icon_2x":"https:\/\/ps.w.org\/quqii-social-media-feed-grid\/assets\/icon-256x256.png?rev=3573048","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>quqii Social Media Feed Grid displays Instagram profile feeds on your WordPress website. It connects to the feed.quqii.net API which retrieves, caches and serves publicly available Instagram data at lightning speed. No direct Instagram API access required.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>Gutenberg block with inspector controls<\/li>\n<li>Shortcode for classic editor and page builders<\/li>\n<li>Automatic caching (5 minutes locally, server-side based on posting frequency)<\/li>\n<li>Images and videos in 4:5 format<\/li>\n<li>Follower count and likes display<\/li>\n<li>Optional post captions \u2014 shown below the image or as a full-image overlay with a customisable color and opacity, revealed by tapping an info icon<\/li>\n<li>Per-shortcode overrides for the global display settings (e.g. hide the Instagram link or like count for a single feed)<\/li>\n<li>Responsive grid spacing that respects visitors' text-size preferences and automatically tightens up on mobile<\/li>\n<li>Fully customisable via CSS classes<\/li>\n<\/ul>\n\n<h4>Shortcode Reference<\/h4>\n\n<p><strong>Full feed:<\/strong>\n    [quqii-feed instagram=\"quqii.official\"]<\/p>\n\n<p><strong>Profile header only:<\/strong>\n    [quqii-feed instagram=\"quqii.official\" display=\"profile\"]<\/p>\n\n<p><strong>Image\/video grid only:<\/strong>\n    [quqii-feed instagram=\"quqii.official\" display=\"grid\"]<\/p>\n\n<p><strong>Follower count inline:<\/strong>\n    [quqii-feed instagram=\"quqii.official\" display=\"followers\"]<\/p>\n\n<p><strong>With custom column count and CSS class:<\/strong>\n    [quqii-feed instagram=\"quqii.official\" columns=\"4\" class=\"my-style\"]<\/p>\n\n<p><strong>Override a display setting for one feed only:<\/strong>\n    [quqii-feed instagram=\"quqii.official\" linktoinstagram=\"0\" showlikes=\"0\" followercount=\"0\"]<\/p>\n\n<p><strong>Show post captions as a tap-to-reveal overlay:<\/strong>\n    [quqii-feed instagram=\"quqii.official\" caption=\"1\" captionpos=\"overlay\"]<\/p>\n\n<h4>Requirements<\/h4>\n\n<p>An API token is required. Free account at <a href=\"https:\/\/feed.quqii.net\">feed.quqii.net<\/a>.<\/p>\n\n<h3>External Services<\/h3>\n\n<p>This plugin connects to the feed.quqii.net API to retrieve Instagram profile data.<\/p>\n\n<ul>\n<li><strong>Service:<\/strong> feed.quqii.net<\/li>\n<li><strong>Purpose:<\/strong> Fetching, caching and serving publicly available Instagram profile data (profile info, post images, videos).<\/li>\n<li><strong>Data sent:<\/strong> Your API token, the Instagram username(s) you configure, and the URL of the page the feed is displayed on (shown back to you in your own quqii dashboard, so you can check a feed is live where you expect it \u2014 not shared with anyone else).<\/li>\n<li><strong>When:<\/strong> On every page load that uses the <code>[quqii-feed]<\/code> shortcode or block (with a 5-minute local cache).<\/li>\n<li><strong>Privacy Policy:<\/strong> https:\/\/feed.quqii.net\/privacy.php<\/li>\n<li><strong>Terms of Service:<\/strong> https:\/\/feed.quqii.net\/terms.php<\/li>\n<\/ul>\n\n<p>By using this plugin, you agree to the Terms of Service. An account and API token at <a href=\"https:\/\/feed.quqii.net\">feed.quqii.net<\/a> is required.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install the plugin ZIP in the WordPress admin under <em>Plugins \u2192 Add New \u2192 Upload Plugin<\/em>.<\/li>\n<li>Activate the plugin.<\/li>\n<li>Go to <em>quqii Feed<\/em> in the WordPress admin menu, enter your API token and verify it.<\/li>\n<li>Add the shortcode or block to any page.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"where%20do%20i%20find%20my%20api%20token%3F\"><h3>Where do I find my API token?<\/h3><\/dt>\n<dd><p>In the dashboard at <a href=\"https:\/\/feed.quqii.net\/dashboard.php\">feed.quqii.net\/dashboard.php<\/a>.<\/p><\/dd>\n<dt id=\"how%20often%20is%20the%20data%20updated%3F\"><h3>How often is the data updated?<\/h3><\/dt>\n<dd><p>The interval is based on the posting frequency of the account (automatic mode) or can be set manually in the quqii Feed dashboard.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20work%20with%20page%20builders%3F\"><h3>Does the plugin work with page builders?<\/h3><\/dt>\n<dd><p>Yes. The shortcode <code>[quqii-feed instagram=\"quqii.official\"]<\/code> works in Elementor, Divi, WPBakery and all other page builders that support shortcodes.<\/p><\/dd>\n<dt id=\"can%20i%20customise%20the%20styling%3F\"><h3>Can I customise the styling?<\/h3><\/dt>\n<dd><p>Yes. All CSS classes start with <code>quqii-feed-<\/code> and can be overridden in your theme stylesheet. Use the <code>class<\/code> attribute in the shortcode to add additional classes.<\/p><\/dd>\n<dt id=\"my%20feed%20isn%27t%20showing%20new%20posts%20%E2%80%94%20is%20a%20caching%20plugin%20to%20blame%3F\"><h3>My feed isn't showing new posts \u2014 is a caching plugin to blame?<\/h3><\/dt>\n<dd><p>It can be. If a caching plugin (WP Rocket, WP Super Cache, W3 Total Cache, and similar) serves a page from its cache, the feed on it won't check for new posts until that cache expires or is cleared. Under <em>Settings<\/em> on the quqii Feed page, turn on \"Keep feed pages out of full-page caching\" and those pages will always be rendered fresh \u2014 this is off by default, since it also means the <em>rest<\/em> of that page (not just the feed) skips full-page caching, which can matter for a busy page like a homepage. This doesn't help with caching that happens <em>before<\/em> WordPress even runs \u2014 a reverse proxy like Varnish, a Cloudflare page rule, or a full-page cache configured at the hosting\/server level. If your host uses one of those, ask them to exclude the pages that show your feed.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.9<\/h4>\n\n<ul>\n<li>New: a \"Show follower count\" setting \u2014 global default under quqii Feed \u2192 Settings, with per-shortcode (<code>followercount=\"0\"<\/code>) and per-block (in the block's sidebar) overrides, same pattern as \"Show likes\". On by default, matching the previous always-on behaviour.<\/li>\n<li>Changed: the follower count next to the profile name is now abbreviated the way Instagram's own UI does it (\"27.9K\", \"1.2M\") instead of the full number with thousands separators. The full number is unchanged for the dedicated <code>display=\"followers\"<\/code> mode.<\/li>\n<\/ul>\n\n<h4>1.2.8<\/h4>\n\n<ul>\n<li>Fixed: the WordPress Customizer's own live preview reloads the previewed page as a real front-end request while you're editing anything in Appearance &gt; Customize \u2014 a different mechanism from the page-builder previews 1.2.4 already handled, so it slipped through that guard and could burn quota on keystrokes typed elsewhere in the Customizer. Now excluded the same way.<\/li>\n<\/ul>\n\n<h4>1.2.7<\/h4>\n\n<ul>\n<li>New: each API request now includes the page it was made from. No new data is collected from your visitors \u2014 it's the same page URL WordPress already knows it's rendering \u2014 but it lets us show you, in your quqii dashboard, exactly which of your pages a feed is actually live on.<\/li>\n<\/ul>\n\n<h4>1.2.6<\/h4>\n\n<ul>\n<li>Changed: the ready-to-copy shortcode examples (here and on the settings page) now use \"quqii.official\" \u2014 a real account we control \u2014 instead of the non-existent \"your_instagram_username\" placeholder from 1.2.5, so pasting one as-is shows our own demo feed instead of an error. The Instagram-username field in the block editor still shows \"your_instagram_username\" as its hint text, since that field describes what to type rather than being something you'd copy-paste whole.<\/li>\n<\/ul>\n\n<h4>1.2.5<\/h4>\n\n<ul>\n<li>Fixed: the example handle in our documentation was changed to \"natgeo\" (a real, working account) in 1.2.3 to replace the old \"username\" placeholder \u2014 but that meant a shortcode left unedited would silently display National Geographic's own feed instead of erroring, which was arguably more confusing than the problem it replaced. Examples now use \"your_instagram_username\", which isn't a real account, so an unedited copy fails with a clear message again instead of silently showing the wrong feed.<\/li>\n<\/ul>\n\n<h4>1.2.4<\/h4>\n\n<ul>\n<li>Fixed: some page builders (Elementor's Shortcode widget among them) re-render a feed's shortcode live, through their own preview mechanism, on every edit \u2014 including while you're still mid-keystroke typing the Instagram username. Each half-typed value was being sent to the API as if it were a real request, which could use up part of your monthly quota on something that was never meant to be fetched. Editor and builder previews no longer contact the API at all.<\/li>\n<\/ul>\n\n<h4>1.2.3<\/h4>\n\n<ul>\n<li>Fixed: our own documentation used to show \"username\" as the example handle in every shortcode \u2014 copying an example without editing it meant literally requesting that. It's now detected immediately, with a message telling you to enter your real Instagram username, instead of quietly failing. Example shortcodes now use a real handle so this shouldn't come up for new copy-paste in the first place.<\/li>\n<\/ul>\n\n<h4>1.2.2.1<\/h4>\n\n<ul>\n<li>Fixed: a username or Instagram link could quietly fail to load if it carried a zero-width or otherwise invisible character (some page builders, including Elementor, can introduce these), or if it arrived with HTML entities still in it. Sanitisation is now considerably more thorough, with a final check against the same rules the API itself uses.<\/li>\n<\/ul>\n\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>New: a \"Keep feed pages out of full-page caching\" setting, for sites where a caching plugin (WP Rocket, WP Super Cache, W3 Total Cache, and others) was holding onto an old, stale copy of the page instead of checking for new posts. Off by default, since it also takes the rest of that page out of caching \u2014 turn it on only where a live feed matters more than that page's load time.<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>New: sites that connected before 1.2.0 \u2014 or that still have a token pasted in by hand \u2014 now show up as a proper connected website in your dashboard too, with their own name and their own Disconnect button. This happens quietly in the background after updating; there's nothing to click.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>New: connecting your site is now as easy as entering your email address \u2014 no more hunting down an API token to copy and paste. Don't have a quqii account yet? It's created for you the moment you click the link in your inbox.<\/li>\n<li>New: every website you connect gets its own token, so your dashboard shows exactly what's connected, and you can disconnect one site without touching the others.<\/li>\n<li>Improved: before anything connects, you're shown which website is asking and get to confirm it yourself.<\/li>\n<li>Improved: when a feed can't load, it now tells you why \u2014 account not connected, Instagram account unavailable, monthly limit reached \u2014 instead of one generic error for every cause.<\/li>\n<li>Fixed: pasting a full Instagram link instead of just the username could quietly fail to load if the link was capitalized or picked up an invisible space during copy-paste.<\/li>\n<li>Fixed: the feed's styling could be missing entirely when used inside a page builder like Elementor, or in content that loads in after the page, such as a popup.<\/li>\n<li>Fixed: regenerating your API token no longer disconnects the websites you've already connected.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>New: post captions can now be shown as a full-image overlay, with a customisable color and opacity, revealed by tapping an info icon (works on mobile \u2014 no hover required)<\/li>\n<li>New: the global display settings (Link to Instagram, Show likes) now apply to every shortcode and block by default, and can be overridden per shortcode with the new <code>linktoinstagram<\/code> and <code>showlikes<\/code> parameters<\/li>\n<li>New: the \"Show likes\" heart icon and the video play button have been redesigned for better visibility<\/li>\n<li>Improved: grid spacing now scales with the visitor's text-size setting and automatically tightens up on mobile screens<\/li>\n<li>Improved: the bottom icon row (info, likes, Instagram link) is now consistently aligned and inset from the edge<\/li>\n<li>Fixed: the Gutenberg block now shows a \"feed is being prepared\" message the first time a profile is loaded, matching the shortcode's existing behaviour<\/li>\n<li>Fixed: icon sizing and color could be affected by some themes' global SVG styles<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<\/ul>","raw_excerpt":"Display Instagram feeds as a responsive grid on your WordPress website \u2014 via shortcode or Gutenberg block.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/gl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/319112","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/gl.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/gl.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=319112"}],"author":[{"embeddable":true,"href":"https:\/\/gl.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/quqii"}],"wp:attachment":[{"href":"https:\/\/gl.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=319112"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/gl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=319112"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/gl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=319112"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/gl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=319112"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/gl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=319112"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/gl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=319112"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}