Generating author bylines in Ghost without inviting new staff members

Generating author bylines in Ghost without inviting new staff members
Photo by Ernie A. Stephens / Unsplash
🤫
This is a quick guide to silently adding contributors to your Ghost site—no invitation emails needed—so that you can generate bylines on contributors' work

Most Ghost themes use the staff user's metadata to generate bylines on their stories, and every staff user on your site gets an author archive page too.

Ghost has great tools for building and managing a team of writers to contribute to your publication, but sometimes onboarding a writer this way doesn't make sense. Ghost Admin's workflow assumes you will onboard all writers:

  • you send the writer an invitation to join your team
  • they accept the invitation
  • they login to file their copy.

Sometimes, people just submit their work via email and leave you to manage the rest. One-off writers don't want to be onboarded on your CMS—but they do expect their byline! So, how do you onboard someone silently, and generate their byline and author page?

Using the Universal Import (at /ghost/#/settings/migration), you can upload placeholder authors via JSON. The import doesn’t generate emails and the account doesn’t need to be accepted by anyone so you can use anything that validates as an email address here.

You can then edit the email, slug, name and role for one of these placeholders from inside admin (/ghost/#/settings/staff) each time you want to issue an author account to a real person.

This process gracefully upgrades. If your one-off writer needs a staff account, edit their metadata to use their current email address. They’ll need to do a password reset from /ghost/#/signin to start using the login.

The JSON can be empty apart from the authors, and it will then just add to the rest of your content and settings without breaking anything. The example below is what I use regularly. Save this as authors.json and use it to refill your placeholders whenever you need:

{
  "meta": {
    "exported_on": 1676913455963,
    "version": "2.0.0"
  },
  "data": {
    "users": [
      {
        "email": "contributorone@example.com",
        "slug": "contributor-one",
        "name": "Contributor One",
        "roles": [
          "Contributor"
        ]
      },
      {
        "email": "contributortwo@example.com",
        "slug": "contributor-two",
        "name": "Contributor Two",
        "roles": [
          "Contributor"
        ]
      },
      {
        "email": "contributorthree@example.com",
        "slug": "contributor-three",
        "name": "Contributor Three",
        "roles": [
          "Contributor"
        ]
      },
      {
        "email": "contributorfour@example.com",
        "slug": "contributor-four",
        "name": "Contributor Four",
        "roles": [
          "Contributor"
        ]
      }
    ]
  }
}```