BlueBook Feed Sync

Plugin Banner

BlueBook Feed Sync

by rstake

Download
Description

BlueBook Feed Sync is a professional WordPress plugin that displays your social page feed with multiple layouts, full customization, multi-feed management, and an interactive lightbox. Easy setup, fully customizable, and lightweight. Multiple layouts, interactive lightbox, video support, and multi-feed management.

Multi-Feed Manager

Create unlimited feeds, each with their own settings. Perfect for sites that need different feeds on different pages.

  • Feed selector dropdown to switch between feeds
  • Create, duplicate, rename, and delete feeds
  • New feeds automatically inherit connection settings from the primary feed
  • Per-feed shortcodes with unique ID
  • Override any setting directly in the shortcode

Layouts

  • List — Single-column vertical feed (max-width 960px)
  • Masonry — Pinterest-style multi-column grid
  • Carousel — Multi-card horizontal slider with snap-based swipe navigation, dot indicators, and arrow buttons
  • Boxed — Clean CSS Grid layout with subtle borders

Header Styles

Visual Header with 4 layout presets: Classic, Compact, Banner, and Clean.

Text Header with Facebook icon and custom text.

Both header types support custom backgrounds (theme, solid color, gradient, transparent), page name override, show bio toggle, and bio/description override.

Lightbox

All posts open in a split-layout lightbox with full-size image or inline video, post text, author info, engagement stats, thumbnail strip for multi-photo galleries, arrow and swipe navigation, and keyboard support. Infinite scroll — when you reach the last loaded post, the next batch loads automatically so you can keep browsing without leaving the lightbox. Text-only posts display in a clean full-width layout instead of a split view.

Video Support

  • YouTube — Auto-detected from shared links with privacy-enhanced embedding
  • Facebook Videos — Thumbnail with play button, embedded via Facebook plugin

Color System

Three built-in schemes (Inherit, Light, Dark) plus a full custom palette with 9 individually configurable colors.

Fast for every visitor

The feed is refreshed in the background a few minutes before its cache expires, so no visitor ever waits for Facebook. “Refresh now” and a status line on the Connect tab show what is going on, and the plugin tells you if WP-Cron is not running on your host.

Images on your own site

Switch on “Store image copies on this site” and post photos, video thumbnails, avatars and the cover photo are downloaded by your server in the background, resized to two widths and served from your uploads folder with srcset. Your visitors make no request to Facebook when the page loads, and the feed keeps its pictures during a Facebook outage. A weekly clean-up keeps the folder tidy.

Privacy & Consent

Let the feed follow your cookie banner (CookieYes, Complianz, Cookiebot or the WP Consent API): videos — and images, unless you store copies on your site — wait for the visitor’s yes and show a short notice with a button instead. Or ask in the feed itself, on every site. Notice and button texts are yours to write. The YouTube player script is loaded only when a video is played.

Content Filters

Show only posts containing certain words or #hashtags, hide posts containing others, hide whole kinds of posts (shared, video, text-only, link), or hide single posts by pasting their Facebook link. When filters hide posts, the plugin fetches a few more so you still get the number of posts you configured.

Your Card, Your Way

Switch the page avatar, page name, date, likes/shares/comments, “View on Facebook” and “Share” on or off per feed and per block. #Hashtags link to Facebook. Load the next posts with a button or while scrolling. Available as a shortcode, a Gutenberg block, a WPBakery Page Builder element and an Elementor widget.

Third-Party Services

This plugin connects to external services to retrieve and display social media content. No data is sent without your explicit configuration.

Facebook Graph API

Used to fetch page posts, page info (name, bio, avatar, cover photo), and to verify your access token.

Data sent: your Facebook Page ID and Page Access Token. Requests are made server-side when the feed cache expires or when you click “Verify Connection” in the admin panel.

Facebook CDN (Image Hosting)

Profile pictures, cover photos, and post images are loaded directly from Facebook’s image servers (scontent.xx.fbcdn.net) when a page containing the feed is rendered. This means Meta can see the visitor’s IP address as soon as the page loads, before any interaction. With the feed’s “Store image copies on this site” option on, these images are instead downloaded by your web server and served from your site, so visitors make no request to Meta when the page loads; the “Privacy & Consent” setting can additionally hold back any third-party image or video until the visitor agrees.

Facebook Video Embed

When a visitor clicks play on a Facebook video, the video is embedded via an iframe from Facebook’s servers.

YouTube

When a visitor plays a YouTube video shared in a post, the plugin loads the YouTube iframe API at that moment so the video can play inline. When a post contains a YouTube video, its thumbnail image is fetched from YouTube’s servers. The feed’s “Privacy & Consent” setting can hold back third-party images and videos until the visitor agrees.

The YouTube iframe API script (https://www.youtube.com/iframe_api) is loaded the first time a YouTube video is played. Thumbnail images are fetched from https://img.youtube.com/. Video embeds use the privacy-enhanced domain https://www.youtube-nocookie.com/.

Open Graph Image Recovery

When a shared post has no image from the Graph API, the plugin makes a single server-side HTTP request to the post’s permalink or link target URL to extract the Open Graph (og:image) meta tag. This request is made from your web server, not from the visitor’s browser. The recovered image URL is cached for one hour.

  • This may connect to any website linked in a shared post (e.g., facebook.com, youtube.com, or any external URL shared on the page)
  • Data sent: a standard HTTP GET request with a User-Agent header
  • No visitor data is transmitted — the request originates from the server only
  • Privacy policies of the target websites apply to their handling of these requests
  1. Download bluebook-feed-sync.zip.
  2. In WordPress admin, go to Plugins > Add New > Upload Plugin.
  3. Upload the zip file and click Install Now.
  4. Activate the plugin.
  5. Go to BlueBook Feed in the admin menu to configure your connection.
How do I get a Facebook Access Token?

You need to create a Meta (Facebook) App at developers.facebook.com, then use the Graph API Explorer to generate a Page Access Token. See the full guide in the plugin’s admin page or the included README.md.

Can I display multiple feeds on the same site?

Yes. Use the Multi-Feed Manager to create additional feeds, each with their own settings. Display them using the shortcode with an ID parameter, e.g. [bbfsync_feed id="2"].

Can I override settings in the shortcode?

Yes. Any setting key can be used as a shortcode attribute, e.g. [bbfsync_feed layout="carousel" posts_desktop="6" color_scheme="dark"].

How does caching work?

The plugin caches API responses to minimize Facebook API calls; the minimum cache duration is 15 minutes. A background job refreshes each feed a few minutes before its cache expires, so visitors are not kept waiting, and keeps a backup copy for Facebook outages. You can clear the cache or refresh at once from the Connect tab (under “Advanced”). With “Store image copies on this site” on, the images are kept on your server as well.

Can I extend the plugin from my theme or another plugin?

Yes. As of 3.10.0 the plugin exposes 9 documented WordPress filter and action hooks covering Graph API field selection, post data and HTML rendering, cache duration, and lifecycle events. Full documentation with copy-paste examples lives in docs/hooks.md inside the plugin folder. Examples include: filtering posts by date before caching, adding badges to posts containing specific hashtags, busting your page cache when the feed refreshes, and overriding the Graph API field set. All hooks are stable within the 3.x major version.

The most recent releases are listed here. The complete history is in changelog.txt in the plugin folder.

3.16.0

  • New: Text header layout “Inline” — icon and title on one line, the way a simple feed title usually looks. The title is the Header Text, or the page name when Header Text is empty; the bio, when shown, goes underneath. New feeds start inline; feeds that existed before this update are kept on the previous “Stacked” layout (icon row on top, page name and bio in a block below), so nothing changes on a live site until you choose Inline under Style Header. “Show Name on Mobile” no longer applies to the inline title, which is the header itself.
  • New: Text header alignment — Left (as before), Center or Right, under Style Header. Applies to the icon/title row and, in the stacked layout, to the page name and bio block.
  • New: Text header icon size — Default (24 px, as before) or a custom pixel size, under Style Header.
  • New: Text header icon library — besides the three Facebook marks, fourteen BlueBook line icons (camera, people, thumbs up, speech bubble, calendar, ticket, news list, document, video, YouTube, Vimeo, star, megaphone, RSS). The admin picker now shows the icons themselves. Existing headers keep their Facebook icon unchanged.
  • New: Card style for the post cards (Layout tab, every layout) — “Outline” (thin border, no shadow: the look until now and the default), “Elevated” (no border, a soft layered shadow in three strengths, a 1 px lift on hover unless the visitor prefers reduced motion) and “Flat” (no border, no shadow). Plus a card corner radius (default 8 px). The card background still follows the colour scheme on the Style tab.
  • Fix: The text header now honours “Name Size”, “Name Colour”, “Bio Size” and “Bio Colour” (Style Typography). Before, those four settings only applied to the visual header, so a text header kept the theme’s dark title however the colour was set.

3.15.2

  • Fix: On tablets the video player in the lightbox fills the viewer’s height instead of sitting in a frame with a black margin all round.
  • Fix: “Clear Cache” and saving settings now take effect at once on hosts with a persistent object cache (Redis, Memcached). The plugin keeps a list of what it has cached and deletes each entry through WordPress, which reaches the object cache; before, only the database rows were deleted and visitors kept seeing the old posts until the cache duration ran out.
  • Fix: “Load More” now renders the next posts with the same shortcode or block overrides as the page (layout, lightbox, columns and so on). Before, the next posts came with the feed’s saved settings, so a carousel set up in a shortcode got ordinary cards after “Load More”. The overrides travel with a signature, so visitors cannot change settings through the request.
  • Fix: Carousel dots are now buttons labelled “Slide 2 of 5” with the current slide marked, instead of unnamed buttons a screen reader read as “button, button, button”.
  • Fix: Lightbox accessibility. While the viewer is open the rest of the page is marked inert, so screen readers and the Tab key stay inside the dialog (the keyboard trap remains as a fallback for older browsers). The large image now has an alt text taken from the post text, or “Photo from ” / “Video from ” when the post has none. Gallery thumbnails are buttons labelled “Image 2 of 5”, reachable with Tab and activated with Enter or Space, with the current one marked.
  • Fix: A translation of the plugin (a language pack from translate.wordpress.org) did not apply to the feed labels on sites that had saved the Components tab before the translation existed: the English default texts had been stored as if they were the administrator’s own wording, so a Norwegian site kept “6 dager ago”, “View on Facebook · Share” and “shared a post”. A stored label that still equals its English default now follows the translation, exactly as on a fresh install. Labels you have changed or emptied are kept as they are.

3.15.1

  • Fix: On desktop screens the lightbox no longer shows a video in a near-square black area with thick bars above and below. For a landscape video post the viewer is now 16:9 and the lightbox takes its height from the video, so the thumbnail and the player fill it edge to edge; on a low screen the player shrinks and keeps 16:9. Portrait videos, photos and text-only posts are unchanged.
  • Fix: In the lightbox, YouTube videos now show YouTube’s large 1280×720 thumbnail instead of the small 480×360 one, which was upscaled and carried its own black bars inside the picture. Videos without a large thumbnail keep the small one.

3.15.0

  • New: Post card parts (Components tab). The page avatar, page name, date, likes/shares/comments, “View on Facebook” and “Share” can each be switched off per feed and per block; parts that are off are left out of the page. #Hashtags in post text now link to the hashtag on Facebook (can be switched off).
  • New: Load more while scrolling (Style tab Load More Button). The next posts load by themselves when the visitor reaches the end of the feed, up to three times, after which the button takes over. After every “Load More”, screen readers hear how many posts arrived instead of every new post being read out.
  • New: WPBakery Page Builder element and Elementor widget “BlueBook Feed” with feed, layout, posts, columns and colour scheme controls. Nothing changes on sites without those builders.
  • Fix: In the lightbox, a video’s thumbnail now fills the viewer instead of sitting small in a black area, the YouTube player sits in a centred 16:9 frame like the Facebook player, and portrait Facebook videos are recognised before their thumbnail has loaded.
  • New: Content filters (Layout tab). Show only posts containing certain words or #hashtags, hide posts containing others, hide whole kinds of posts (shared, video, text-only, link) and hide single posts by pasting their Facebook link. When filters hide posts, the plugin fetches up to three further pages so the configured number of posts is still shown, and “Load More” continues where it left off. The Layout tab shows how many posts the last fetch hid. Developers: filter bbfsync_filter_max_pages.
  • New: Privacy & Consent (Components tab). “Follow the site’s cookie banner” waits for the marketing consent in CookieYes, Complianz, Cookiebot or the WP Consent API before loading images and videos from Facebook and YouTube, showing a short notice with a button where the visitor has not agreed; “Always ask in the feed first” shows that notice regardless of any banner. Notice and button texts are editable. With image copies stored on the site, only video playback asks.
  • Change: The YouTube player script is now loaded the first time a YouTube video is played instead of on every page that shows a feed.
  • New: Image copies on your own site. With “Store image copies on this site” on (Connect Advanced; on for new feeds, off for existing ones until you switch it on), post photos, video thumbnails, avatars and the cover photo are downloaded by the server in the background, resized to two widths and served from the uploads folder with srcset. Visitors make no request to Facebook when the page loads, and the feed keeps its pictures during a Facebook outage — Facebook’s own image links expire after a few days, which until now left the backup copy with broken images. A weekly clean-up removes copies not used for 60 days and keeps a feed under 150 MB. Developers: filter bbfsync_image_widths.
  • New: Background refresh. A WP-Cron job refreshes every feed a few minutes before its cache expires, with the same code the page uses, so visitors no longer wait for Facebook after the cache has run out. A “Refresh now” button on the Connect tab (Advanced) fetches at once, and the tab tells you when the next refresh is due or if WP-Cron is not running on your host. A failed background refresh never replaces what visitors are currently served. Developers: filter bbfsync_background_refresh (false switches it off), action bbfsync_after_refresh.
  • Fix: A shared link whose website blocks Facebook’s link scraper was shown with the website’s error page as its preview (“403 Forbidden”, “Please be advised that LiteSpeed Technologies Inc. is not a web hosting company…”), the card linked to Facebook’s redirect page and its domain label said “facebook.com”. The plugin now follows Facebook’s link wrapper to the real page, fetches the preview from there (asking once more as an ordinary request when the site refuses Facebook’s scraper), never uses an HTTP error page as a preview, and labels the card with the real domain.
  • Fix: On sites with a page cache (LiteSpeed Cache, WP Rocket, WP Super Cache, Cloudflare and similar), “Load More” stopped working for visitors once the cached page was older than the security token printed into it (12–24 hours) and showed “Error – Try Again” until the cache was purged. The token is now only required for logged-in users; for visitors the request is public and read-only, as it always was.
  • Fix: Posts older than a week showed the date in UTC instead of the site’s timezone, so a post published shortly after midnight (before about 02:00 in Norway) was dated the day before.
  • Fix: When a “Load More” request failed (a Facebook error, or the plugin’s pause after an outage), the button said “No more posts” and disappeared, as if the feed had ended. It now shows the “Error” text and stays, so the visitor can try again. Administrators get Facebook’s message in the browser console.
  • Fix: Photos in multi-photo posts are now printed with their real width and height, like single photos have been since 3.13.4, so the page does not shift while they load.
  • Maintenance: Removed two leftover calls to the Facebook JavaScript SDK (not loaded since 3.9.23) and a stylesheet rule for a button class that no longer exists. No visible change.
  • Fix: A web address at the end of a sentence in a post took the full stop, comma or closing parenthesis into the link, which could lead to a “page not found”. The punctuation now stays outside the link.
  • Fix: On phones, a YouTube video (or a landscape Facebook video) playing in the lightbox was shown in a box taller than the area holding it, so the bottom of the player — progress bar and fullscreen button — was cut off, with large black bars above and below the picture. The player is now a 16:9 frame centred in the area, and the plugin’s own Close, Previous/Next and mute buttons sit in the black bands above and below it instead of on top of the player’s controls.
  • Fix: A “Load More” request with an invalid page cursor made the server ask Facebook up to ten times (every field set on both endpoints) before giving up, and anyone could send such a request. “Load More” now reuses the exact request that worked for the first page, so it makes one call, and an invalid cursor is reported as such instead of as a permission error.

3.14.1

  • Fix: A percent sign in the “time ago” text (Components Post Labels, or the time_ago_format shortcode attribute) — for example “%s ago (100%)” — caused a fatal error on PHP 8 on every page showing a post less than a week old. Such texts are now simply shown as written; ordinary texts like “%s ago” give exactly the same result as before.
  • Accessibility: With the default button style, the lightbox’s Close, Previous and Next buttons were invisible and had no focus ring for keyboard users unless the mouse pointer happened to be over the lightbox. When the keyboard is used they are now shown, and the focused button gets a ring. Nothing changes for mouse and touch.
  • Accessibility: After moving to another post inside the lightbox, closing it lost the keyboard focus instead of returning it to the post that was opened. Focus now goes back to that post.
  • Accessibility: On WordPress versions older than 7.1, post cards could not be reached with the Tab key on the first page load (posts added by “Load More” could). WordPress 7.1 and newer were not affected.

3.14.0

  • New: The Connect tab now shows the real connection status — when Facebook last answered successfully, or why it is failing (token rejected, missing permission, wrong Page ID, rate limit, network error) together with Facebook’s own message. Before, it only said “credentials configured”.
  • New: When Facebook rejects the Page Access Token (expired or revoked), the site administrator gets one email explaining what to do, at most once per day per feed, and the plugin’s other settings tabs show a notice. Developers can change or disable the recipient with the bbfsync_token_alert_recipient filter.
  • Fix: If your server could not reach Facebook (timeout, DNS or network failure), every uncached page view repeated up to ten 15-second attempts before showing the saved posts. A network failure now stops after the first attempt, and the plugin waits a few minutes before calling Facebook again; visitors see the saved posts immediately in the meantime.
  • Fix: A broken response from Facebook (an error page instead of data) was stored as an empty feed and written over the backup copy. It is now treated as a failure, and an empty answer never replaces a backup that contains posts.
  • Fix: “Posts on mobile” had no effect — every device showed the larger of the desktop and mobile numbers. Phones (up to 768px wide) now show the mobile number; “Load More” reveals the rest. If your mobile number is lower than your desktop number, phones will show fewer posts after this update, as the setting always described.
  • Fix: Switching off “Image & Video Viewer” did not stop posts from opening in the lightbox. With the viewer off, photos now link to the post on Facebook, text-only posts expand in place, and videos play inline (Facebook videos open on Facebook on touch devices).
  • Fix: Clicking the 2nd, 3rd… photo of a multi-photo post always opened the lightbox on the first photo. It now opens on the photo you clicked.
  • Fix: The carousel layout only worked with the default 3 / 2 / 1 columns; any other column setting made the slides drift out of step. Card width now follows the column settings.
  • Fix: “Load More” on feed #2 and higher used feed #1’s cache slot.
  • Developer: new action bbfsync_api_fetch_failed and filter bbfsync_failure_cooldown; the bbfsync_cache_duration filter now also applies to the page-info request, as documented. See docs/hooks.md.
Back to top