Foyer – Digital Signage for WordPress


Create slideshows and show them off on any networked display. Hardware not included 🙂

Check out this demo sign:


  • Set up slides, channels (slideshows) and displays.
  • Choose slide duration and transition effect.
  • Set or change the channel on a display.
  • Schedule a temporary channel on a display.

Features for theaters, music venues, festivals

Foyer comes with build in support for the Theater for WordPress plugin. With Theater & Foyer you can easily publish your events on your website, and showcase them on your onsite displays.

Slide formats

  • Default: Displays a background only.
  • External web page: Displays a web page to your liking.
  • Event: Displays the image, title and details of a selected event (requires Theater for WordPress).
  • PDF: Creates a slide for each page in an uploaded PDF, displaying that page contained within the slide.

Slide backgrounds

  • Image: Displays an image, covering the entire slide background.
  • Video: Displays a YouTube video, or a specified fragment, as slide background.

More features, slide formats and slide backgrounds are coming soon.
Eg. a WordPress Post slide, a Title & Text slide, a widgets bar for displaying Time and Weather.

Feature suggestions wanted!

Since this plugin is quite new, I’m curious..

  • how do you plan to use it?
  • in what environment (theater foyer, school canteen, hotel lobby, private office, shop window, ..)?
  • what features are you looking for and are currently missing?

Send me an email to let me know!


Donations are very welcome and help me dedicate more time to developing this plugin.

  • Bitcoin: 1LWZ4RRjpA34GqS5dVAw1fbrFweW97WZVG or..
  • ETH (or tokens): 0xfd8ab9b18960ffc72ad2ef110c50afd2985cca7d or..
  • Donate through PayPal.


Install and activate the plugin via the WordPress Plugins admin screen.

  1. Go to PluginsAdd new.
  2. Search for ‘Foyer’.
  3. Click Install now.
  4. Don’t forget to Activate Plugin.

There are currently no settings. Just go ahead and add slides, channels and displays.


Installation Instructions

Install and activate the plugin via the WordPress Plugins admin screen.

  1. Go to PluginsAdd new.
  2. Search for ‘Foyer’.
  3. Click Install now.
  4. Don’t forget to Activate Plugin.

There are currently no settings. Just go ahead and add slides, channels and displays.

How do I set up my slideshow on my digital sign?
  1. In WordPress go to Slides and add some.
  2. Go to Channels, add one, and add some of your slides.
  3. Go to Displays, add one, and subscribe it to your channel.
  4. Preview the display, note the URL (something like, and load this page in the web browser of your digital sign.

Your digital sign will now display the channel it is subscribed to. If you change the channel for this display in WordPress, the digital sign will change with it. You can even schedule channels on displays.

Set up a display for each digital sign for maximum remote flexibility.

What hardware should I use for my digital sign?

Generally speaking you need a computer with a web browser and internet connection, and a display linked to that computer. A Smart TV with built in web browser might work, but maybe not as reliable.

I recommend using a (mini-)computer with the Chrome browser in kiosk mode, and a Full HD (1920 x 1080) display.

When setting up multiple digital signs with their own content, each display needs its own (mini-)computer.

Can I use a Raspberry Pi mini-computer for my digital sign?

Absolutely! Be aware that transitions and video playback on the Pi will be very choppy though, if they work at all. Use the ‘No transition’ setting for channels, don’t add videos, and your Raspberry Pi digital sign will be fine.

I can recommend installing the paid version of Raspberry Digital Signage as operating system on the SD card of a Raspberry Pi 3 Model B. Just power up your Pi, enter the URL of your Foyer display when asked, and you’ll have an instant digital sign each time you power up.

Landscape or portrait?

You choose! Install your digital sign the way you prefer. Foyer will follow. Slide templates are designed to work in both landscape and portrait mode. Only the background image will be cropped differently, of course.

Can I change the looks of slides?

Yes, this is possible if you know how to write CSS. Just include some CSS in the theme of your website that targets the slide HTML. If you don’t have access to the theme you can use a custom CSS plugin to add some CSS.

Can I change the template of a slide format?

Yes, this is possible if you know how to write WordPress templates. Create a foyer/slides/ directory in your theme. Next locate the template of the slide format you want to change in the public/templates/slides/ directory in the Foyer plugin directory. Copy the template file to your foyer/slides/ directory, without changing the filename. You should find the template in your theme now overrules the template included with the plugin. Note that this plugin is still in its early stages of development. You might have to copy the latest version of the template file and reapply your changes when major changes to the plugin are released.

Can I add my own slide formats?

Yes, this is possible if you know how to write WordPress templates, and how to register PHP functions to WordPress plugin hooks. Have a look at how the plugin adds slide formats itself, in includes/class-foyer.php. More documentation for developers is coming soon.

The top/bottom or left/right part of my image is missing, why?

All images are displayed in a way that they fully cover the display. So if your display has a landscape orientation, and you upload an image with portrait orientation, the image will still cover the entire width of the display, which is great. But of course the top and bottom part of that image will not be visible. The greater the difference between the display orientation and the uploaded image orientation, the greater the top/bottom part or left/right part that will be invisble.

The plugin always displays the center-middle part of each image. So if the important part of your image is in the top part of the image, that might not be visible. You might have to crop that image before uploading and adding to a slide.

If you want to have full control you can always create and upload images that have the exact same orientation and proportions as your display. For most displays this is 1920×1080 pixels (landscape) or 1080×1920 (portrait). That way the images will be 100% visible.

My changes are not directly visible on my displays, what’s happening?

Changes to displays, channels and slides are never instantly visible on your digital signs. Each digital sign tries to contact your website every 5 minutes to see if you made any changes. If so and you changed the channel for a display, the new channel will be shown right after the slide that is currently being displayed. For any other changes, like adding slides, the new slides will be shown right after a full cycle of the slides that are currently being displayed.


Read all 2 reviews

Contributors & Developers

“Foyer – Digital Signage for WordPress” is open source software. The following people have contributed to this plugin.




Release Date: February 14, 2018

Introduces a brand new way to build slides: choose a format, then a background. Now you can build event slides with video backgrounds. Or, coming up in a future release :-), WordPress Post slides on a background color.


Release Date: November 25, 2017

Introduces the External web page slide format. Displays a web page to your liking. This could be anything! A dashboard, a social media wall, a live feed, teletext!, .. anything that has its own URL.


  • Made the PDF slide format processing work for WordPress < 4.7 (1.3.1).
  • Added notifications to the PDF slide format admin screen, displayed when PDF processing is not supported (no Imagick/Ghostscript installed), and when PDF file previews won’t work (WordPress < 4.7) (1.3.1).
  • Removed the PDF slide format admin screen notifications added in 1.3.1, below the Upload PDF File button, as they proved to be unreliable. Instead added an admin notification, displayed only when PDF processing actually fails after saving a PDF slide (1.3.2).
  • Displays now only use channels that are published, and channels now only use slides that are published (so no draft or private or trashed slides) (1.3.2).
  • The Channel columns in the Display admin table now contain ‘None’ if no channel is set (1.3.2).
  • Major internal changes that no one should notice: Refactored all non-object classes to use static methods, and switched from using a central Foyer_Loader class to registering actions and filters directly from Foyer, Foyer_Admin and Foyer_Public classes (1.3.2).
  • Added a foyer-reset-display detection to JS, in anticipation of the 1.4.0 release that will need to be able to trigger it (1.3.3).

Bug fixes:

  • Fixed an issue where the uploaded image on an event slide was never displayed (1.3.1).
  • Fixed an issue introduced in 1.2.6 where the scheduled channel date time pickers no longer worked (1.3.1).
  • Fixed an issue introduced in 1.2.6 where the media library lightbox texts were no longer set (1.3.1).
  • Fixed an issue where the ‘External web page’ slide format displayed a border around the web page, depending on the theme and browser used (1.3.2).
  • Fixed an issue where the Landscape / Portrait buttons were not styled correctly, depending on the theme used (1.3.2).
  • Fixed a long unnoticed JS error that occurred while attempting loading new display data when no slide group was empty yet (1.3.3).


Release Date: April 12, 2017

Introduces the Video slide format. Displays a specified fragment of a YouTube video.


  • Added a ‘No transition’ option to channels, eg. for displaying on Raspberry Pi mini-computers (1.2.4).
  • Added longer slide durations, up to 120 seconds (1.2.4).
  • Added a foyer/public/enqueue_styles and a foyer/public/enqueue_scripts action, for theme developers (1.2.5).
  • Made it possible to enqueue Foyer scripts outside of the Foyer plugin (1.2.6).

Bug fixes:

  • The video start time was off during the very first loop through video slides (1.2.1).
  • Fresh channel content was loaded every 30 seconds when viewing a display, changed this to every 5 minutes as intended (1.2.1).
  • Removed all JS console logging that was used during development (1.2.1).
  • The ‘Not a valid YouTube video URL’ notification was visible when starting a new video slide (1.2.1).
  • The video preview in the admin would not work when editing an existing video slide (1.2.2).
  • Improved handling of changed start and end fields in the video slide admin when no valid video URL is entered (1.2.2).
  • Improved the video preview in the video slide admin by pausing the preview when the video URL field is changed and not valid (1.2.2).
  • Some WordPress JavaScript admin functionality was prevented from working correctly, eg. the Media modal / image selector lightbox (1.2.3).
  • The list of available channels was limited to only 5 when editing a display (1.2.3).
  • PHP logged an Undefined index PHP Notice (1.2.3).
  • The first slide of a channel could not be removed (1.2.4).
  • Fixed an issue where some HTML code was visible on Production slides (1.2.6).
  • Changed the name of the Production slide format to Event, same terminology as in Theater for WordPress (1.2.6).


Release Date: March 28, 2017

Added a PDF slide format. Creates a slide for each page in an uploaded PDF.

Bug fixes:

  • When adding slides to a channel, the list of possible slides was limited to 5 items (1.1.0).
  • Fatal error on install/upgrade on older PHP versions (< 5.5): Can’t use function return value in write context (1.1.1).
  • All slide of a channel were removed after re-ordering the slides (1.1.2).
  • Javascript error occured when a slide’s freshly selected image didn’t have a generated preview image (eg. PDFs on hosting not capable of converting PDFs) (1.1.2).
  • Adding an image to a slide was only possible when the image was already in the media library (1.1.3).


Release Date: March 20, 2017

First public release!

Bug fixes:

  • Improved code security: Sanitized and validated all user input, and escaped and sanitized the output of the plugin (1.0.1).