> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ghost.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Author

> Use: `{{#is "author"}}{{/is}}` to detect this context

***

Authors in Ghost each get their own page which outputs a list of posts that were published by that author. You’re in the `author` context when viewing the page thats lists all posts written by that user, as well as subsequent pages of posts. The `author` context is only set on the list of posts, and not on the individual post itself.

## Routes

The default URL for author pages is `/author/:slug/`. The `author` context is also set on subsequent pages of the post list, which live at `/author/:slug/page/:num/`. The `slug` part of the URL is based on the name of the author and can be configured in admin. To change the author URL structure, use [routing](/themes/#routing).

## Templates

The default template for an author page is `index.hbs` or you can use an `author.hbs` file in your theme to customise the author pages.

To provide a custom template for a *specific* author, name the file using `author-:slug.hbs`, file with the `:slug` matching the user’s slug. For example, if you have an author ‘John’ with the url `/author/john/`, adding a template called `author-john.hbs` will cause that template to be used for John’s list of posts instead of `author.hbs`, or `index.hbs`.

These templates exist in a hierarchy. Ghost looks for a template which matches the slug (`author-:slug.hbs`) first, then looks for `author.hbs` and finally uses `index.hbs` if neither is available.

## Data

When in the `author` context, a template gets access to 3 objects: the author object which matches the route, an array of post objects and a pagination object. As with all contexts, all of the `@site` global data is also available.

### Author object

When outputting the author attributes, use a block expression (`{{#author}}{{/author}}`) to drop into the author scope and access all of the attributes. See a full list of attributes below:

### Author object attributes

* **id** — unique database identifier for the author
* **bio** — short biography or description of the author
* **location** — author’s location
* **url** — public URL of the author page
* **slug** - Unique URL-friendly identifier for the author. Used in routing.
* **name** - Full display name of the author.
* **profile\_image** - URL of the author's profile avatar image.
* **cover\_image** - URL of the author's cover/banner image.
* **website** - Personal website or portfolio link.
* **facebook** - Facebook username (without full URL).
* **twitter** - Twitter/X handle.
* **threads** - Threads profile username.
* **bluesky** - Bluesky handle.
* **mastodon** - Mastodon handle or full URL.
* **tiktok** - TikTok username.
* **youtube** - YouTube channel handle.
* **instagram** - Instagram username.
* **linkedin** - LinkedIn username.
* **meta\_title** -  SEO title metadata for the author page.
* **meta\_description** -  SEO description metadata for the author page.

### Post list

Each of the posts can be looped through using `{{#foreach posts}}{{/foreach}}`. The template code inside the block will be rendered for each post, and have access to all of the post object attributes.

### Pagination

The best way to output pagination is to use the pagination helper — the pagination object provided is the same everywhere.

## Helpers

The `{{#author}}{{/author}}` block expression is useful for accessing all of the author attributes. Once inside the author you can access the attributes and use helpers like `{{img_url}}` and `{{url}}` to output the author’s details.

Using `{{#foreach posts}}{{/foreach}}` is the best way to loop through your posts and output each one. If you’re using the Members feature, consider the [content visibility](/themes/members/#content-visibility) of your posts.

If your theme does have a `tag.hbs` and `author.hbs` file all outputting similar post lists to `index.hbs` you may wish to use a partial to define your post list item, e.g. `{{> "loop"}}`.

```html theme={"dark"}
<!-- author.hbs -->

<!-- Everything inside the #author tags pulls data from the author -->
{{#author}}
  <header>
  	{{#if profile_image}}
    	<img src="{{img_url profile_image}}" alt="{{name}}'s Picture" />
    {{/if}}
  </header>

  <section class="author-profile">
  	<h1 class="author-title">{{name}}</h1>
    {{#if bio}}<h2 class="author-bio">{{bio}}</h2>{{/if}}

    <div class="author-meta">
      {{plural ../pagination.total empty='No posts' singular='% post' plural='% posts'}}
     </div>
  </section>
{{/author}}

<main role="main">
    <!-- includes the post loop - partials/loop.hbs -->
    {{> "loop"}}
</main>

<!-- Previous/next page links - displayed on every page -->
{{pagination}}
```
