Let your team manage uploads

Give employees access to the tools they need.

Assign the Restaurant Menu Uploader role under Users. This role grants access to menu uploads and the dashboard, so staff can replace menus without managing the site's settings.

Choose the right shortcode

One creates a clickable link. The other returns only the file's URL.

Shortcode Result and when to use it
nsc_eprm_menu_link A clickable link with text such as “Lunch menu”. Use this to let visitors open your menu from a page or post. It creates the HTML link for you; linktext sets its visible text.
nsc_eprm_menu_file_url The file's URL as plain text. Use this when a custom integration needs the address to build its own link or button. It adds no HTML link or label, so linktext has no effect.

For a menu link on a page, choose nsc_eprm_menu_link. Both shortcodes use the current file for the selected menu type and return nothing when that menu has no uploaded file.

Clickable link: nsc_eprm_menu_link

Add a WordPress Shortcode block to your page and paste one of these examples. Visitors see the link text, such as “Lunch menu”, and can click it to open the file.

Lunch menu

[nsc_eprm_menu_link restaurant_menu_type="lunch" linktext="Lunch menu"]

General menu

[nsc_eprm_menu_link restaurant_menu_type="general" linktext="General menu"]

Options for nsc_eprm_menu_link
Option What it does
restaurant_menu_type Selects lunch, general, or a type added by the premium add-on.
linktext Sets the visible link text. Leave it empty to use the original filename without its extension.
p="true" Wraps the link in a paragraph. The default is false.
nofollow="true" Adds rel="nofollow" to the link. The default is false.

To prevent search engines from indexing menu files, enable Prevent SEO Indexing in Menu settings. A nofollow link alone does not prevent indexing.

Plain URL: nsc_eprm_menu_file_url

Use this when you need the menu's address as text. Your integration is responsible for turning that address into a clickable link or button.

Get only the URL with a shortcode

[nsc_eprm_menu_file_url restaurant_menu_type="lunch" cachebuster=true]

Example output for a lunch PDF using default filenames:

{{menu-example-file-url}}

The actual URL depends on the filename setting and your uploaded file's extension. cachebuster=true adds a changing ?cb=… value when menu indexing is enabled, to request a fresh copy.

The destination must support shortcodes. A field that accepts a URL does not necessarily process shortcodes. If it does not, use the actual file URL there. Pasting this shortcode into page content produces the URL as text, without creating a clickable HTML link.

REST API

Connect your menus to another website or application.

GETPublic endpointRead-onlyNo authentication

Retrieve all configured menu types, including those added by the premium add-on. No login, API key, nonce, or parameters are required. The endpoint has no upload, update, or delete actions.

Endpoint for this website

{{menu-types-api-url}}

Open the API response (opens in a new tab)

Try a request

curl "{{menu-types-api-url}}"

What you get back

A successful request returns HTTP 200 and a JSON array. Select entries by menutype.

Field Type Description
menutype string Menu identifier, such as lunch or general.
menutypename string The menu's display name.
available boolean Whether an uploaded file exists for this menu.
downloadurl string Public file URL, or "" when the menu is unavailable.
Example JSON response 200 OK

Two menu types

[
  {
    "menutype": "lunch",
    "menutypename": "Lunch",
    "available": true,
    "downloadurl": "https://example.com/easy-pdf-restaurant-menu/menu-files/menu-lunch.pdf"
  },
  {
    "menutype": "general",
    "menutypename": "General",
    "available": false,
    "downloadurl": ""
  }
]

Show available menus. Display a link only when available is true and downloadurl is nonempty. Use the returned URL to account for the filename setting and file extension.

Menus without files stay in the response with available: false. If no menu types are configured, the response is [].

Need a hand?

Start with these common questions.

Why isn't my menu link showing?

Upload a file for the menu type named in your shortcode. For example, a general shortcode needs a General menu upload. The link is hidden while that menu has no file.

Check your uploads →
Why does the API return 404?

Save Settings → Permalinks and check your web server's rewrite rules.

Alternative REST URL

{{menu-types-api-fallback-url}}

This URL uses WordPress's rest_route parameter and includes the correct site path.

What happened to the custom menu block?

Custom Gutenberg menu blocks have been removed. Replace an old menu block with a WordPress Shortcode block using an example above. Previously saved HTML may still display, but it no longer receives menu availability checks.

Get a shortcode →