Easily extend your Shopify store with your own fields like checkboxes, text fields, dates, selection lists and much more. Upload images and PDF files and cross-reference your objects to create anything you need to build your business



Accentuate Custom Fields integrates seamlessly with Shopify giving you a simple yet powerful interface to define custom fields for nearly any Shopify object and to edit values in the right context.

Building on Shopify's powerful metafield concept, Accentuate provides you with unprecedented options for enriching and personalizing your Shopify content.

Using Liquid together with Shopify Metafields, you can easily integrate the custom fields into your design template
Which custom field types can I define?
Accentuate provides support for an array of basic data types, such as text (simple and HTML), numeric input, checkboxes, selection lists, date selection (with support for various date formats). You can define a slider control to help you pick a specific numeric value from a defined range and you can upload images and PDF files directly to our secure Amazon server.

Accentuate also supports cross referencing between various Shopify objects of your choosing, e.g. linking blog posts to products, products to other products (think related products), collections to pages etc.
Where do I enter values for my fields?
Every object type has its own details page in Shopify, where you'll find a button labelled "Custom Fields" under the "More actions" menu item. This will take you to a page showing you the exact fields, you have defined for the type. Enter the values and click Save. And you're done
Can I bulk edit custom field values?
For bulk editing purposes, you can use the export/import feature.

Use of other metafield tools for custom fields created with Accentuate, including Shopify's built-in editor for metafields, is strongly discouraged
Where are my custom fields stored? Are they secure?
All custom field definitions as well as the values you enter are stored as metafields within your Shopify store. This means that you never rely on any third-party system but can trust Shopify to keep your data safe. Metafields are an integral part of the Shopify platform and provide secure storage for your data.

Images and PDF files for custom fields are stored on a secure Amazon S3 server and served via a global CloudFront CDN
How do I show my custom fields on my store pages?
Using Liquid together with Shopify Metafields, you can easily integrate the values into your templates. Please see below for specific examples covering the supported field types
I'm not so skilled in Liquid - how can I get help?
For skilled help to set up your custom fields, please check out the small task service HeyCarson. There you'll find a bunch of Shopify Experts, that will get you sorted out in no time. For more complex tasks, you can also consider PRC Web Development - one of the Shopify Experts skilled in the use of Accentuate
We're on Shopify Plus - do we need to pay for multiple installations?
If you are a Shopify Plus customer and have a development store as one of your 3 stores, send us the name of your development store before installing Accentuate. We will make sure that specific store doesn't get charged
The app installation requests write access to my store?
To be able to store metafields for a Shopify object such as a product or a page, Accentuate needs to have write access to that object. Rest assured, that Accentuate does not modify or delete anything in your store other than the Shopify metafields we use as the foundation for your custom fields
What happens if I uninstall Accentuate?
If you choose to uninstall Accentuate after having used it, all of your custom field values, images and files will still be accessible on your store front but you cannot edit them from within the Shopify admin.

Use of other metafield tools for custom fields created with Accentuate, including Shopify's built-in editor for metafields, is strongly discouraged. If you no longer wish to use Accentuate, please delete the Accentuate custom fields before switching over to another solution
Wouldn't it be cool if ....?
We love feedback and ideas for new features
Using Accentuate Custom Fields in Liquid
Most of the examples below use the "product" scope. To use metafields for other object types, just replace "product" with your required scope for the template such as "collection", "customer", "page", "shop" etc.

By default, all custom fields are defined using the namespace "accentuate". You can override this on a field-by-field basis by specifying another namespace, which will then be used when storing custom field values. Please take care when choosing a namespace, so it doesn't collide with other apps' namespaces
Custom fields for the "shop" object are global and therefore available throughout your Liquid templates. You can use shop custom fields to hold content relevant to your store irrespective of the context of the current visitor's page. For example header/footer content and links, that you normally would code in a page or directly in your design's layout file.
A note about empty values
As a general rule: If a value of a custom field is empty, its corresponding metafield does not exist. A test for that particular key will return false (or "nil" in Liquid terms), which gives us a nice clean syntax for checking if a given field (a "key" in metafield terms) has a value
{% if product.metafields.accentuate.title %}
  <h1>{{ product.metafields.accentuate.title }}</h1>
{% endif %}
Checkboxes
A checkbox normally has two states - checked or unchecked. In our case, it is a little different - the value of a checked checkbox is represented as a string value of "true". An unchecked checkbox, however, does not contain "false" - it simply doesn't exist. Accordingly, we can test for it being checked or not this way
{% if product.metafields.accentuate.backorder %}
  <p>{{ product.title }} can be backordered</p>
{% else %}
  <p>{{ product.title }} can NOT be backordered</p>
{% endif %}
Another example
 <input type="checkbox" {% if product.metafields.accentuate.backorder %} checked {% endif %}>
Numbers and Ranges
A custom field of type Number or Range is stored as a numeric value and can be subject to numeric tests and filters in Liquid
{% if product.metafields.accentuate.stock < 5 %} 
<p>We are low on stock, but we if we buy more, 
      we have {{ product.metafields.accentuate.stock| plus: 100 }}</p>
{% endif %}
Dates
A custom field of type Date can be subject to date filters in Liquid
{{ product.metafields.accentuate.publishdate | date: "%a, %b %d, %y" }}
Text and HTML text
The value of text based custom fields are represented as you may expect - as metafields with string values matching the value of their respective custom fields
<h3>{{ product.metafields.accentuate.subtitle }}</h3>
Again, you can test for an empty value via the absence of the metafield
{% if product.metafields.accentuate.subtitle %}
  <h3>{{ product.metafields.accentuate.subtitle }}</h3>
{% endif %}
Selections
A selection list, where you have opted for a single selection only, is represented as a metafield with its string value matching the selected value
<p>You have selected the value: {{ product.metafields.accentuate.selection }}</p>
Basically, the same thing applies for a selection list, where you have opted for multiple selections, but since we can have multiple value selected at any given time, each value is listed with the "pipe" symbol (|) as a separator token. You can use Liquid's 'split' filter on the metafield to separate the values - like this:
{% assign selected_values = product.metafields.accentuate.selection | split: '|'  %}
{% for selected_value in selected_values %}
   <p>{{ selected_value }}</p>
{% endfor %}
Images and Files
Images and files are automatically uploaded to a secure Amazon S3 bucket and the corresponding URL is stored in the metafield, ready to use:
<img src="{{ product.metafields.accentuate.my_extra_image }}"/>
The URL in the metafield will - for file types where this is possible - contain the image dimensions as query parameters, specified as width x height e.g. "?800x600" . If the dimensions for the image are needed in Liquid, you can use Liquid's 'split' filter on the metafield like this:
{% assign dimensions = product.metafields.accentuate.my_extra_image | split: '?' | last | split: 'x' %}
<p>Size: {{ dimensions.first }} x {{ dimensions.last }}</p>
Images and files are served to your visitors through a CDN (via domain cdn.accentuate.io). This optimizes delivery to your visitor's browser significantly, but also caches files on so-called edge locations globally. When you update an image or a file but keep the filename unchanged, it may take up to 5 minutes before the file is updated in the CDN cache and the updated image or file is visible to all visitors. If an immediate update is required, just change the filename before uploading
Colors
A Color type gives you a convenient control to select a color and store the result as a string in hex RGB format such as #000000, #e9e9e9, #ffffff etc. Note that you can use Liquid color filters to change or extract properties from these color strings - more info here
<button style="background-color: {{ product.metafields.accentuate.my_color }}">Click</button>
Reference Types
A custom field defined as a reference type will contain the referenced Shopify object's handle as its value. You can use this handle to obtain the actual Shopify object via a Liquid global object depending on the type (for more on this, see the link to the Liquid Cheat Sheet below)
{{ blogs[product.metafields.accentuate.related_blog].title }}

{{ page[product.metafields.accentuate.related_page].title }}

{{ collections[product.metafields.accentuate.related_collection].title }}

{{ all_products[product.metafields.accentuate.related_product].title }}

{{ linklists[product.metafields.accentuate.related_linklist].links }}
If you have opted for multiple selections for your reference type, each object's handle is listed with the "pipe" symbol (|) as a separator token. You can use Liquid's 'split' filter on the metafield to separate the handles - like this:
{% assign selected_handles = product.metafields.accentuate.selection | split: '|'  %}
{% for selected_handle in selected_handles %}
   <p><a href="{{ all_products[selected_handle].url }}">{{ all_products[selected_handle].title }}</a></p>
{% endfor %}
Be aware, that Shopify imposes a restriction on how many calls to "all_products" you can make on any single Liquid page. Currently, this limit is set to 20 unique handles per page.

Using reference types, we can also get the metafields from the referenced objects using the handle. This is just as easy as getting the url or title as shown above.
{{ all_products[product.metafields.accentuate.related_product].metafields.accentuate.isbn }}
Using namespaces
As an alternative to multiple value selection (or for types where this is not an option), you can define a set of custom fields having a distinct namespace. You can then loop the fields within that namespace to create e.g. a list of related products. Note, when you loop the fields in this manner, every field will be a two-dimensional array with the key as the first element and the value the second (and last) element
<h3>Related products</h3>
{% for field in product.metafields.related_products %}
   {% assign ref_handle = field.last %}
   <p><a href="{{ all_products[ref_handle].url }}">{{ all_products[ref_handle].title }}</a></p>
{% endfor %}
This example creates a gallery of images, where custom fields share a distinct namespace
<h3>Image Gallery</h3>
{% for field in product.metafields.my_image_gallery %}
  <img src="{{ field.last }}"/>
{% endfor %}
Listing all custom fields
If you are in an investigative mood, you can list all metafields and their associated values in one go. Go to your theme editor, create an alternate template for your object type (here: product) called "fields" (as an example) and paste the below code as content.

You can now view your custom fields' values for a product by appending "?view=fields" to the url (or &view=fields, if the url already has a ? in it, like variants will have)

Remember: empty values will not have an associated metafield and will not show in this list
<h3>List of custom fields for {{ product.title }}</h3>
<ul>
   {% for field in product.metafields.accentuate %}
   <li>{{ field.first }}: {{ field.last }}</li>
   {% endfor %}
</ul>
How to use your custom field labels in Liquid
The labels used in the definitions of your custom fields are used for editing purposes only and are not carried through to the individual metafield values so you can use them directly via Liquid.

You can, however, use a filter on the output of the key name, remove any underscores (or replace with spaces) and optionally capitalize the text
<h3>List of custom fields for {{ product.title }}</h3>
<ul>
   {% for field in product.metafields.accentuate %}
   <li>{{ field.first | replace: '_', ' ' | capitalize }}: {{ field.last }}</li>
   {% endfor %}
</ul>
Using custom fields for orders
It is possible to have custom fields values for both customers and products automatically attached to an order when it is placed by a customer or created manually via Shopify's admin interface.

This integration runs automatically when any custom fields for an order's product(s) and/or customer have the checkbox "Apply field value to orders" selected (available for selected field types only). The field's label and associated value will be applied to new orders where the product(s) and/or customer in question have an associated custom field value.

Technically, product field values are applied as "line item properties" and customer field values are applied as "note attributes". Both integrate nicely with other Shopify apps such as Order Printer etc.

After applying the custom fields' values, the order itself is tagged with "#accentuated" for two purposes - one is to show you as a shop owner that the integration has taken place, the other is for subsequent updates to the order to not reapply the values. If you do want the values reapplied to the order, just remove the #accentuated tag and save the order.

Please take note, if you originally installed Accentuate prior to May 2017 - for this to work for draft orders created manually via Shopify's admin interface, you will need to uninstall and reinstall the application to give Accentuate the correct permissions. Rest assured, this will not affect your custom fields or any associated values
Importing and Exporting Custom Field Values
Exporting
It is possible to export your individual products, pages, orders, customers etc. together with the values for your defined custom fields. Values are exported in CSV format ready to open in your favorite text editor or spreadsheet program.

The first line (or "row" if you like) is a required header line with two fixed values "_id" and "_info" followed by one or more custom field names (with any user-defined namespace).

The actual value for an ID depends on the object type - skus are used for products and variants, email addresses for customers, order numbers for orders and finally handles for the remaining objects - pages, blogs, articles and collections.

The "_info" column is information associated with the instance's ID - like the product title or the customer's name. Note, this is for information only and changing this value won't have any effect on any later import.

Third column and onward contain the custom field value associated with the instance ID. All values are separated with semicolons ( ; ). If a value itself contains semicolons ( ; ) or double quotes ( " ), the value will be surrounded with double quotes and any contained double quoted will be "escaped" as two double quotes, e.g. the value Hi "there" becomes "Hi ""there"""

As an example, exporting two products "sku-1" and "sku-2":
_id;_info;custom_field_1;custom_field_2;custom_field_3
sku-1;This is product for sku-1;value-1;value-2;value-3
sku-2;This is product for sku-2;value-1;value-2;value-3
Once your browser has started the download, you can safely leave the page. You are, however, encouraged not to start any additional exports or imports until the export has finished
Importing
Importing custom field values rely on the exact same format as the export, so you may use an exported file directly as the source for import. When editing values for import, please take care to adhere to the format as described above.

Except for the required _id and _info columns, you may remove any columns as you please, but, if present, the header value must match a defined field name for the type.

When providing values, be sure to use the correct value for the field's type - color, separate multiple selection values with pipe symbols, use "true" for checkboxes etc. Also be sure to embed semicolons and double quotes as described above for the export.

You cannot use the import feature for "image/pdf" or type custom fields. Although you can export image fields and see the associated URLs, you cannot add new or change existing values via an import. It is, however, possible to delete an image by clearing the field's value before import.

If in doubt before import - get in touch.
Import jobs run in the background. While an import job is active, the icon next to "Import values" will change to a spinning "gear" icon. You can safely leave the page, but you are encouraged not to start any additional exports or imports until the import has finished. Due to Shopify API usage limits, the execution time will average 1.5 seconds per individual (changed or new) field value
Feel free to write or call us.
We'd love to hear from you
Silkeborg, Denmark
Phone: +45 28 90 20 21
E-mail: hello@thorup.io
Made on
Tilda