Using WordPress? Every integration here is also available as a plugin. Browse the plugin store →

Released component

Persons

Persons publishes a staff directory on WordPress or any site, read live from Entra ID, a Microsoft 365 group or a SharePoint list — no copy to maintain.

The component platform is in pre-launch, so Office 365 Persons Display for WordPress is the route open today — the same Microsoft 365 job, delivered as a WordPress plugin. If the web component is what you need, tell us and we will come back to you.

kestrel-legal.example/people
kestrel legal
Corporate team Entra ID group · circular avatars
  • A. MbekiPartner, Corporate
  • R. KowalskiSenior Associate
  • J. TanAssociate
  • L. OkonkwoTrainee
  • H. BrandtPartner, Disputes
  • S. NakamuraOf Counsel
  • E. FerreiraAssociate
  • D. CoyleParalegal
Email, phone and LinkedIn stay off until you switch them on.

Persons itself, running here on a fictional host — the released bundle from our CDN, loaded the same way your own page would load it. The data behind it is sample data of our own invention; on your site the same component reads your Microsoft 365 tenant.

Putting it on the page

What you paste into the page.

Two lines, and neither of them is a build step. Everything the component shows is resolved from the key at request time, so the markup on the page is the last markup anyone writes.

<script src=https://cdn.wpistatic.com/platform.js async></script>
<wpi-persons embed-key="your-embed-key"></wpi-persons>
One loader for every component — it finds the element and fetches this bundle itself. Your own embed key comes from the builder.
  1. The script tag

    One bundle for one component. It defines the custom element and does nothing else — no framework, no build step, and no change to how the rest of the page is built.

  2. The element

    An ordinary HTML tag, placed wherever the component should appear — including inside a page builder’s raw-HTML block, a shortcode, or a template partial.

  3. The embed key

    The key resolves to one configured instance — the Microsoft 365 source, the arrangement, the theme, and the domains allowed to render it. Change any of those and the page itself never has to be edited again.

What it does

How it works

Persons publishes a staff directory — an employee directory, a team page, a departmental contact list — from people who already exist in Microsoft 365. It reads the members of a group, users in the Entra ID directory matched by a Graph filter, or the rows of a SharePoint list, and renders them as cards or rows. It is a script tag and a custom element, so the same directory renders on WordPress, on Drupal, or on a hand-written page. Card style, photo crop, column count and which fields appear are builder settings. When the source is a SharePoint list, each standard field is mapped to the column that holds it.

Why it exists

A team page goes stale the day somebody joins or leaves, because it is a hand-maintained copy of information that already exists in the directory. The usual fix is a custom post type, or a listing of the website’s own user accounts, and both are the same copy with a nicer editor on top: somebody still has to keep it honest for the life of the site. Reading the directory means the page is right whenever the directory is right, and nobody has to remember it.

Element
<wpi-persons>
Reads from
Entra ID directory users, Microsoft 365 group membership, SharePoint lists
Arrangements
5 in the builder
Graph access
managed or proxy — the tenant chooses

Arrangements in the builder

  • Grid — classic cards
  • Grid — photo with text overlay
  • Grid — circular avatars
  • Grid — compact rows
  • List

Where it runs

Anywhere you can paste two lines of HTML

A custom element needs no build step and no framework, so where your site is built is not a question you have to answer before this one.

  • WordPress
  • Webflow
  • Squarespace
  • Shopify
  • Wix
  • Astro
  • Next.js
  • Drupal
  • SharePoint pages
  • Plain HTML

Named as examples of places HTML can be pasted. No partnership is implied, none of these are customers, and the marks beside them are our own drawings rather than any vendor's logo. WordPress is the one that gets more than an embed — the same Microsoft 365 jobs also ship as plugins with a Gutenberg block.

In detail

Everything Persons does.

12 capabilities, every one of them resolved from the embed key rather than written into the page.

  1. Three sources, all of them read at page load

    The members of a Microsoft 365 group, users in the Entra ID directory narrowed by a Graph filter, or the rows of a SharePoint list you maintain yourself. Whichever you pick, the component fetches it when a visitor loads the page. There is no import step and no staff list retyped into the website.

  2. A SharePoint employee directory, column by column

    Point it at a SharePoint list and map each standard field onto the column that holds it. SharePoint addresses columns by their internal name rather than the label you see, so the builder reads the list’s columns and you pick which one is the name, job title, biography, email, phone, photo, LinkedIn URL and sort order.

  3. One department, or the whole company

    The directory source takes a Graph filter, so narrowing on department or another user property produces a page for one team out of the same tenant that serves the rest. A group source does it by membership instead: whoever is in the group is on the page.

  4. A card grid, or a plain staff list

    Two, three or four columns of cards, or a single column — a staff list, one person per row, rather than a wall of photographs. Column count is a builder setting and holds at that count on every screen, so pick two for a page that has to work on a phone.

  5. Four card styles

    Classic photo-above-text, a full-bleed photo with the text over a gradient, a centred circular avatar, or a compact row with a small avatar beside the text.

  6. Photo shape and fallbacks

    Circle, square or rounded crops, an optional default image for people who have no photo, and drawn initials when there is neither.

  7. Show only what belongs in public

    Photo, job title, biography, email, phone and LinkedIn are separately switchable, and the three contact fields are off by default. Switch email and phone on and the same component is a staff contact list; leave them off and a public team page carries names, titles and photos only. One source, two audiences.

  8. A pager for a long directory

    A page size adds a pager once the directory runs past one screen, up to a hundred people to a page, or shows everybody at once when it is set to zero.

  9. Cap what gets fetched

    A maximum-results limit stops a large directory being pulled in full when only one department belongs on the page.

  10. Domain allowlist, GTM and custom CSS

    The embed renders only on domains you list, a Google Tag Manager container id can be attached, and custom CSS covers anything the settings do not.

  11. A panel per person, without leaving the page

    A card opens a panel over the directory with a larger photo and the biography in full, rather than truncated to fit a card. Escape closes it and focus returns to the card it came from.

  12. It reads, and it never writes

    There is no write path back to Microsoft 365. A job title is corrected in Entra ID or in the SharePoint list, once, and every page carrying the component follows. Nobody needs an account on your website to appear on it, so a new starter is not an account to create and a leaver is not an account to delete.

One of these you can have today.

Office 365 Persons Display for WordPress is on sale in the store now and does this job inside WordPress. The web component is in pre-launch — if that is the delivery you need, tell us and we will come back to you.

Reaching your tenant

Two ways for us to reach Graph. One of them never lets us.

Every tenant runs in one mode or the other, and the choice belongs to your IT rather than to us. It is the reason this works inside organisations that will not delegate Graph access to a vendor.

managed

We hold the credentials

WPIntegrate runs the client-credentials flow for your tenant. Your administrator grants consent once and is not asked again.

proxy

You hold the credentials

You supply a base URL and an API key for your own gateway. We store that key encrypted at rest and never hold a Graph token at all.

Questions

The things people ask before they buy.

If yours is not here, ask it — the answers come back from a person rather than a form.

Where do the people come from?

From Microsoft 365, in one of three ways: the members of a Microsoft 365 group, users in the Entra ID directory matched by a Graph filter, or the rows of a SharePoint list you maintain yourself. There is no fourth way, no import step, and no copy of the directory kept on your website.

Does this work as a WordPress employee directory?

Yes. Paste two lines into the page and the names come from Microsoft 365 rather than from posts somebody has to keep editing. Nothing about the component is WordPress-specific, so the same two lines work on Drupal, on a static site, or inside another CMS.

Is there a WordPress staff directory plugin version?

Yes, and the difference between them is not only the packaging. Office 365 Persons Display is an employee directory WordPress plugin you install and licence; this page describes the web component, which is a script tag and a custom element. The choice that decides it: the plugin renders a search box over your directory, and this component renders none. If visitors have to search the directory themselves, take the plugin. If you want the same directory on a site that is not WordPress, take this.

Is this an Office 365 employee directory?

Yes, under the current names. Office 365 became Microsoft 365, and the directory behind it became Entra ID, formerly Azure AD. The component reads that directory through Microsoft Graph, so an Office 365 employee directory and a Microsoft 365 employee directory are the same page here.

Can visitors search or filter the list?

Not in this component. There is no search box and no filter control on the rendered page. Narrowing happens once, by whoever configures the embed: a Graph filter on the directory source, a group whose membership is the audience, or a SharePoint list that already holds the right people. If a visitor-facing search is a requirement, the WordPress plugin has one and this does not — better to know that now than after the install.

Does everyone need an account on the website to appear?

No. People come from Microsoft 365, so nobody needs a WordPress account, a login on your site, or a profile somebody has to create for them. A directory built from your website’s own user accounts makes every new starter an account to provision and every leaver an account to remove, on a public site. This has neither.

Can we show only one department?

Yes. The directory source accepts a Graph filter, so filtering on department or any other user property produces a page for one team. A Microsoft 365 group does the same by membership: whoever is in the group is on the page.

Will personal contact details be exposed?

Only the ones you switch on. Email, phone and LinkedIn are off by default, so a team page publishes names, job titles, photos and biographies unless you decide otherwise. That default is deliberate. Publishing a directory should not publish everybody’s phone number by accident.

Can it replace a WordPress contact list plugin?

For staff contact details, yes. Switch email and phone on and the same component is a staff contact list. Where a WordPress contact list plugin asks you to type the addresses in and keep them right, these are the addresses Microsoft 365 already holds. The compact card style and the list layout suit that better than large photographs: a row per person, a small avatar, name, job title and how to reach them.

Can we show a plain staff list instead of a grid of cards?

Yes. Layout is grid or list. A staff list is one column, one person per row; the grid is two, three or four columns of cards. Both come from the same source and the same settings, so switching between them is a choice rather than a rebuild.

Are the photos the ones in Microsoft 365?

Where the source is a group or the directory, yes — the photo is the one on the person’s Microsoft 365 profile. Where the source is a SharePoint list, the photo is whatever the column you mapped holds, which is a file you maintain rather than their profile picture. For either, you can supply a default image for people who have none, and initials are drawn when there is neither.

Does it write anything back to the directory?

No. The component reads. Correcting a job title happens in Microsoft 365 or in the SharePoint list, and the page follows. Nothing on your website can change the directory.

Is this a WordPress employee management plugin?

No, and it is worth being plain about that. A WordPress employee management plugin handles records, leave, onboarding and reviews, and none of that is here. This publishes people who already exist in Microsoft 365 onto a web page. The managing happens in Microsoft 365 and in your HR system, and none of it happens on your website.

What does IT have to do before it works?

One thing, once. In managed mode we hold the Azure credentials and a tenant administrator grants consent a single time; in proxy mode you supply a base URL and an API key for your own gateway, and we hold no credential for your tenant. After that the directory is readable and nothing else is asked of IT.