You can add a restaurant menu to WordPress in three ways: with a menu plugin, as a PDF in the File block, or as menu code in a Custom HTML block. Which ones you can use depends on which WordPress you have. On a self-hosted site, an Administrator or Editor can paste code that includes scripts. On WordPress.com, scripts and frames need a paid plan with hosting features turned on.
This guide shows you how to tell which WordPress you have, compares the three ways in a table, and walks through each one step by step.
How to tell which WordPress you have
Maybe someone built your site years ago and nobody remembers what it runs on. That matters here, because the two kinds of WordPress have different rules for menu code. Both run the same WordPress software. The difference is hosting: WordPress.com includes managed hosting, and a self-hosted site runs the software on a hosting company you choose and pay for yourself.
These checks will tell you which one you have:
| Check | WordPress.com | Self-hosted WordPress |
|---|---|---|
| Where you log in | At wordpress.com | On your own site, such as yoursite.com/wp-admin |
| The Site Profiler | Shows WordPress.com next to Provider | Shows the name of your hosting company |
| The site's address | Ends in .wordpress.com or .wpcomstaging.com, unless a paid plan uses your own domain | Your own domain |
The login and Site Profiler checks come from WordPress.com's own comparison page. The address check comes from its page on site addresses: a WordPress.com site without a paid plan lives at its free .wordpress.com address. If you're still unsure, ask whoever set the site up. If it turns out to run on another builder, we have guides for Squarespace and Wix too.
The three ways to add a menu, compared
Each way suits a different situation. A plugin keeps the menu inside your WordPress dashboard. A PDF reuses the file you already send to the printer. A Custom HTML block holds code from a menu service or from the person who runs your site.
| Menu plugin | PDF in the File block | Custom HTML block | |
|---|---|---|---|
| What guests see | What the plugin builds | The PDF on the page, with a download button | What the code shows |
| Self-hosted: who can add it | Administrators (Super Admins on Multisite) | Administrators, Editors and Authors | Administrators and Editors (Super Admins on Multisite) |
| WordPress.com | Plugins need a paid plan | PDF is an accepted file type | Scripts and iframes need a paid plan with hosting features |
| When a price changes | Edit it in the plugin | Export a new PDF and replace the file | Depends on who provides the code |
| Suits | A menu typed into WordPress | A menu you already have as a PDF | A menu service that gives you a snippet |
Way 1: add a menu with a plugin
If you want to type dishes and prices into the same dashboard you use for the rest of your site, a menu plugin does that. Plugins are extra pieces of software that add features to WordPress, and you find them in the WordPress.org plugin directory.
What restaurant menu plugins include
A search of the directory for "restaurant menu" returns hundreds of plugins, and their listings describe different mixes of features. Some build and display a menu. Others also describe online food ordering, table reservations or QR codes. Read each listing to see what it includes, and choose by what your restaurant needs.
Before you install one, look at two things. In your dashboard, each plugin under Plugins > Add New carries a note that reads "Compatible with your version of WordPress" or "Untested with your version of WordPress". In the directory, each plugin's page has a Support tab where you can read what other people have asked about it.
How to install a plugin on self-hosted WordPress
- In your dashboard, go to Plugins > Add New.
- Use the search form to search by keyword, such as "restaurant menu".
- Click a plugin's title or More Details to read about it.
- Click Install Now, then Activate.
On a single site, only Administrators can install plugins, and on a Multisite network only Super Admins can (Roles and Capabilities). After that, the plugin's own documentation shows you how to add dishes and place the menu on a page.
Plugins on WordPress.com
Every paid WordPress.com plan can install plugins, and a free site has to upgrade first. Installing a plugin also activates your plan's hosting features, which matters for the Custom HTML block below.
Way 2: show a PDF menu with the File block
You already have a PDF. Your designer made it, or you export one for the printer every season. The File block puts that PDF on your menu page without any extra software. By default, Administrators, Editors and Authors can upload a file with it.
How to add the PDF
- Open your menu page in the editor. Add a File block with the Block Inserter (+), or type
/filein a new paragraph and press Enter. - Upload the PDF, or choose it from the Media Library.
- Open the block settings in the sidebar. If you can't see the sidebar, click the cog icon next to Publish or Update.
- Under PDF settings, turn on Show inline embed.
- Use the height in pixels setting to give the menu room on the page.
- Leave Show download button turned on.
On WordPress.com the steps are the same. PDF is an accepted file type there, listed with the other documents.
What guests see on a phone
WordPress.com's guide to the File block says PDF embeds display on a computer, and that most phone and tablet browsers won't display embedded PDFs. That's why the download button matters. A guest reading on a phone still has a way to open the file.
When a price changes
Every price change means a new PDF. Export the menu again, select the File block, and use Replace in the toolbar to upload the new version. For more on how a PDF compares with a menu written into the page itself, see our guide to PDF menus and online menus.
Way 3: paste menu code into a Custom HTML block
A menu service, or the person who looks after your website, sends you a few lines of code and asks you to paste them on the menu page. The Custom HTML block is where that code goes. It's built into WordPress, so you don't need a plugin to use it.
How to add the block
- Open your menu page in the editor. If you're replacing an old PDF link or menu photos, remove them first.
- Add a Custom HTML block with the Block Inserter, or type
/htmlin a new paragraph and press Enter. - Click Edit HTML to open the code editor.
- Paste the code into the HTML panel exactly as you received it. A preview of the result shows to the right of the code.
- Click Update, then save the page.
Starting in WordPress 7.0, the block has separate panels for HTML, CSS and JavaScript. The CSS and JavaScript panels only appear for people with permission to add unfiltered code, which is the next section.
Self-hosted WordPress: who can add scripts
WordPress controls who can paste scripts with a permission called unfiltered_html. On a single site, Administrators and Editors have it. On a Multisite network, only Super Admins have it.
Someone without it, such as an Author or a Contributor, can still add a Custom HTML block. When they save, WordPress strips tags such as <script> and <iframe> from the block, and the CSS and JavaScript panels don't appear. If your menu code vanished when you saved, check your role first. An Administrator can paste the code for you.
WordPress.com: paid plans and hosting features
WordPress.com filters certain HTML tags for security. To use script, iframe, embed, form, style and a few others, you need a paid plan with hosting features activated. You need both: the paid plan, and hosting features turned on.
To activate hosting features on a Personal, Premium or Business plan, install any plugin from Plugins with the Install and activate button, or upload a third-party theme. Commerce plan sites are activated automatically. Once that's done, paste your code into the Custom HTML block again and save.
On a free plan, the Custom HTML block doesn't accept these tags. WordPress.com's help page lists your plan as the first thing to check when code disappears after you save. Some older guides name the Business plan. WordPress.com's current pages on adding code and plugins put it this way: plugins come with every paid plan, and a plugin-enabled plan has no limits on the code you can add once hosting features are activated.
The Embed block works on every WordPress.com plan and supports many popular services without custom code. WordPress.com says a service the Embed block doesn't list likely needs an iframe or a script, which brings you back to the paid-plan rule above.
Your domain and search credit
Without a paid plan, a WordPress.com site lives at its .wordpress.com address, and every domain on the site redirects to that address. With a paid plan, you can set your own domain as the site's primary address.
On a .wordpress.com address, any search credit your menu page earns goes to that address. A custom domain puts it on your restaurant's own name. Our guide to restaurant menu SEO explains how search engines read a menu page.
Where MenuFramer fits
MenuFramer is one service that gives you code for this block: you keep your WordPress site, paste one snippet into your menu page, and that page becomes a photo-first menu with search and dietary filters. On the Business plan, the "Menu + a page per dish" embed writes the menu into your page as real text and gives every dish its own address on your domain, which makes the menu eligible to be found in search (embed steps, plans). On a self-hosted single site, an Administrator or Editor can paste it into a Custom HTML block, and if you're on WordPress.com, contact us and we'll check your setup with you. If a web person runs your site, our page for developers is written for them.
Check your menu page on a phone
Before you share the page, look at it on a phone. In the editor, select the View button in the top toolbar and choose Mobile to narrow the editing canvas to a phone's width. These are preset widths in the editor, so also choose Preview in new tab to see the page itself, then open the published page on your own phone.
Then go through these:
- Read a few dish names and prices without zooming in.
- Scroll from the first section to the last.
- If you used a PDF, tap the download button and check the file opens.
- If you used a Custom HTML block, check the menu appears where the code sits.
- Remove any old PDF link or menu photo, so guests find one menu.
- Point your Google Business Profile's menu link at this page.
If someone else runs your site, send them this checklist along with the code. Ask them to check the page on a phone too.
Frequently asked questions
Why did my embed code disappear when I saved?
On self-hosted WordPress, check whether your account has the unfiltered_html permission. Without it, WordPress removes script and iframe tags when you save. Administrators and Editors have it on a single site, and only Super Admins have it on Multisite. On WordPress.com, the code needs a paid plan with hosting features activated, and then you paste it again and save.
Do I need a plugin to add a menu to WordPress?
No. The File block and the Custom HTML block are both built into WordPress, so you can show a PDF or paste menu code without a plugin. A plugin suits you if you want to type dishes and prices into WordPress itself. On WordPress.com, installing a plugin needs a paid plan.
Does the free WordPress.com plan allow embeds?
The Embed block works on every WordPress.com plan and supports many popular services without custom code. Script and iframe tags in a Custom HTML block need a paid plan with hosting features activated. On a free plan, the block doesn't accept those tags.
Can I use my own domain for my menu page on WordPress.com?
Yes, with a paid plan you can set your own domain as the site's primary address. Without a paid plan, every domain on the site redirects to the free .wordpress.com address. Your own domain is what puts any search credit for the menu page on your restaurant's name.
How do I update a PDF menu on WordPress?
Export the new PDF from wherever you make your menu. Then select the File block on your menu page, choose Replace in the toolbar, and upload the new file. Save the page and check it on your phone.
Sources
- Custom HTML, WordPress.org, checked October 2026
- Roles and Capabilities, WordPress.org, checked October 2026
- File block, WordPress.org, checked October 2026
- Manage Plugins, WordPress.org, checked October 2026
- Plugin directory search results for "restaurant menu", WordPress.org, checked October 2026
- How to use the View feature, WordPress.org, checked October 2026
- WordPress.com vs. WordPress.org: What's the difference?, WordPress.com, checked October 2026
- Add code to your site, WordPress.com, checked October 2026
- Add custom HTML, WordPress.com, checked October 2026
- Activate your WordPress.com plan, WordPress.com, checked October 2026
- Choose a WordPress.com plan, WordPress.com, checked October 2026
- Share or embed downloadable files, WordPress.com, checked October 2026
- Accepted file types, WordPress.com, checked October 2026
- Change your site's primary address, WordPress.com, checked October 2026




