Skip to main content

Customizing your Shopify product pages

Bookhead gives you two ways to show rich book data on your Shopify storefront: metafields for theme developers working in Liquid, and a Theme App Extension with drag-and-drop blocks for everyone else.

Metafields for Liquid themes

Bookhead syncs rich book metadata to Shopify as metafields under the book_info namespace. Theme designers can use these in Liquid templates to build custom product pages without parsing the product description.

Access any metafield in Liquid with:

{{ product.metafields.book_info.authors }}

Data mapping: Bookhead to Shopify metafields

Metafield keyShopify typeBookhead sourceDescription
work_idsingle_line_text_fieldWork IDInternal Work ID, used for "Other Editions" grouping
work_titlesingle_line_text_fieldWork → titleCanonical title of the work
authorssingle_line_text_fieldWork → authorsComma-separated author names
subjectssingle_line_text_fieldWork → subjectsComma-separated subject names
edition_idsingle_line_text_fieldEdition → uuidInternal Edition UUID
edition_displaysingle_line_text_fieldEdition (computed)"Publisher • Year • Format" summary string
isbnsingle_line_text_fieldEdition → isbnISBN
publishersingle_line_text_fieldEdition → publisherPublisher name
bindingsingle_line_text_fieldEdition → bindingFormat: Hardcover, Paperback, etc.
pagesnumber_integerEdition → pagesPage count
publication_datesingle_line_text_fieldEdition → publication_datePublication date as stored
languagesingle_line_text_fieldEdition → languageISO language code (e.g., "en")
synopsismulti_line_text_fieldEdition → synopsisBook synopsis/description (max 5000 chars)
dimensionssingle_line_text_fieldEdition → dimensionsPhysical dimensions
weightsingle_line_text_fieldEdition → weightWeight
msrpsingle_line_text_fieldEdition → msrpManufacturer's suggested retail price
conditionsingle_line_text_fieldCopy → book_conditionBook condition display name (New, Fine, Very Good, etc.)
jacket_conditionsingle_line_text_fieldCopy → jacket_conditionDust jacket condition display name
first_editionbooleanCopy → first_editiontrue if this is a first edition
signedbooleanCopy → signedtrue if this copy is signed
notesmulti_line_text_fieldCopy → notesBookseller notes about this copy (max 5000 chars)
collectionssingle_line_text_fieldCopy → BookListsComma-separated BookList names this copy belongs to
staff_pickbooleanWork → reviewstrue if the work has a staff pick review
staff_pick_reviewersingle_line_text_fieldReview → display_reviewerFirst staff pick reviewer's name
staff_pick_textmulti_line_text_fieldReview → textFirst staff pick review text (max 5000 chars)
staff_picks_jsonjsonWork → reviewsAll staff picks as JSON array (when multiple reviews exist)

Example: using metafields in a Liquid theme

{% comment %} Show book details on the product page {% endcomment %}

<h1>{{ product.title }}</h1>
<p class="authors">by {{ product.metafields.book_info.authors }}</p>

{% if product.metafields.book_info.signed == true %}
<span class="badge">Signed Copy</span>
{% endif %}

{% if product.metafields.book_info.first_edition == true %}
<span class="badge">First Edition</span>
{% endif %}

<dl class="book-details">
<dt>Condition</dt>
<dd>{{ product.metafields.book_info.condition }}</dd>

{% if product.metafields.book_info.jacket_condition %}
<dt>Jacket</dt>
<dd>{{ product.metafields.book_info.jacket_condition }}</dd>
{% endif %}

<dt>ISBN</dt>
<dd>{{ product.metafields.book_info.isbn }}</dd>

<dt>Publisher</dt>
<dd>{{ product.metafields.book_info.publisher }}</dd>

{% if product.metafields.book_info.binding %}
<dt>Format</dt>
<dd>{{ product.metafields.book_info.binding }}</dd>
{% endif %}

{% if product.metafields.book_info.pages %}
<dt>Pages</dt>
<dd>{{ product.metafields.book_info.pages }}</dd>
{% endif %}

{% if product.metafields.book_info.publication_date %}
<dt>Published</dt>
<dd>{{ product.metafields.book_info.publication_date }}</dd>
{% endif %}
</dl>

{% if product.metafields.book_info.synopsis %}
<div class="synopsis">
{{ product.metafields.book_info.synopsis }}
</div>
{% endif %}

{% if product.metafields.book_info.notes %}
<div class="bookseller-notes">
<h3>Bookseller's Notes</h3>
{{ product.metafields.book_info.notes }}
</div>
{% endif %}

{% if product.metafields.book_info.staff_pick %}
<div class="staff-pick">
<h3>Staff Pick</h3>
<blockquote>
"{{ product.metafields.book_info.staff_pick_text }}"
<cite>— {{ product.metafields.book_info.staff_pick_reviewer }}</cite>
</blockquote>
</div>
{% endif %}

Theme App Extension: drag-and-drop blocks

The Bookhead app includes a Theme App Extension with ready-to-use blocks that you can add to any product page via the Shopify theme editor — no code required.

To add blocks: go to Online Store → Themes → Customize, navigate to a product page, and click Add block. Bookhead blocks appear under the Apps section.

Available blocks

BlockDescriptionKey settings
Book TitleWork title as a headingHeading level (H1–H3), font size, weight, color
Book AuthorAuthor names with prefixPrefix text ("by "), font size, color
Book EditionPublisher, year, format summaryFont size, color
Book ISBNISBN with labelLabel text, font size, color
Book ConditionBook and jacket conditionShow/hide jacket, label text
Book DescriptionSynopsis with optional headingHeading text, font size
Book BadgesStaff Pick / Signed / First Edition pillsLabel text, colors per badge type
Staff Pick QuoteBlockquote with reviewer attributionAccent color, background, label text
Bookseller NotesBookseller's notes with headingItalic/normal style, heading text
Book InfoAll-in-one card with everything aboveToggle each section on/off

Each block is independently placeable and fully customizable (colors, font sizes, spacing, labels). Place them anywhere in your product page layout — put the title at the top, badges under the price, staff pick quote in the sidebar, etc.

tip

Blocks only render when the product has the corresponding metafield data from Bookhead. If a product doesn't have a staff pick review, the Staff Pick blocks simply won't appear.