Dynamic ContentJetEngine Custom Fields

JetEngine Custom Fields

How to use JetEngine meta fields in Protuno's dynamic tags and Twig expressions to surface custom field data anywhere in a Proton widget.

JetEngine by Crocoblock is a popular custom fields and content modelling plugin. Protuno integrates with it via three dynamic tags and through the standard post.meta() Twig expression, letting you surface JetEngine field values in any Proton widget without writing PHP.

JetEngine integration requires JetEngine to be installed and active. Dynamic tags appear in Elementor only when JetEngine is active.

JetEngine Dynamic Tags

Dynamic tags bind JetEngine field values to Elementor widget controls, text, images, URLs, without writing code. In the Elementor panel, look for the dynamic tag icon (lightning bolt) on a field, click it, and choose from the JetEngine group.

The 3 JetEngine Dynamic Tags

TagUse for
JetEngine FieldAny text, number, date, select, or textarea field
JetEngine URLURL or media fields where you need the link
JetEngine ImageMedia/image fields (binds to image controls)

Source Option

All three tags have a Source setting:

SourceWhat it reads
PostThe field value on the current post
Post AuthorThe field value on the current post's author (user meta)

Field Picker

When JetEngine exposes its registered fields via its API, the tag shows a dropdown populated with your field names. When the API is not available, the tag shows a text input, enter the meta key manually.


JetEngine Fields In Twig

Inside a Proton widget's HTML panel, access JetEngine field values using post.meta():

{{ post.meta('field_key') }}

Use the meta key, the field name you defined in JetEngine's meta box builder, not the label.

Text And Number Fields

<p>{{ post.meta('years_of_experience') }} years of experience</p>
<span>{{ post.meta('job_title') }}</span>
<a href="{{ post.meta('portfolio_url') }}">View Portfolio</a>

Conditional Output

{% if post.meta('is_featured') %}
  <span class="badge">Featured</span>
{% endif %}

{% if post.meta('deadline') %}
  <p class="text-label">Deadline: {{ post.meta('deadline') }}</p>
{% endif %}

Author Meta Fields

For fields attached to users via JetEngine:

{{ post.author.meta('expertise_area') }}
{{ post.author.meta('social_twitter') }}

Image Fields

JetEngine image/media fields typically return the attachment ID or URL. Use accordingly:

{# If the field returns an attachment ID #}
{% set photo_id = post.meta('team_photo') %}
{% if photo_id %}
  <img src="{{ photo_id|wp_image_src('medium') }}" alt="{{ post.meta('team_member_name') }}">
{% endif %}

{# If the field returns a direct URL #}
<img src="{{ post.meta('logo_url') }}" alt="Company Logo">

For reliable image binding in Elementor widget image controls, use the JetEngine Image dynamic tag instead.

Repeater Fields

JetEngine repeater fields return arrays. Iterate over them in Twig:

{% for item in post.meta('service_features') %}
  <li>{{ item.feature_name }}</li>
{% endfor %}

Combining JetEngine With get_posts Loops

JetEngine data works inside get_posts loops. Each iteration gives you the loop post's meta:

{% for post in get_posts({
  post_type: 'team_member',
  posts_per_page: 12,
  orderby: 'menu_order',
  order: 'ASC'
}) %}
  <div class="team-card">
    <img 
      src="{{ post.thumbnail.src('medium') }}" 
      alt="{{ post.title }}"
    >
    <h3>{{ post.title }}</h3>
    <p class="text-label">{{ post.meta('job_title') }}</p>
    <p>{{ post.meta('bio_short') }}</p>
    {% if post.meta('linkedin_url') %}
      <a href="{{ post.meta('linkedin_url') }}">LinkedIn</a>
    {% endif %}
  </div>
{% endfor %}

This works with any JetEngine custom post type, the post_type parameter matches your registered CPT slug.


Frequently Asked Questions

Can I filter get_posts by a JetEngine meta field? Yes. JetEngine stores its field values as standard WordPress post meta, so all standard WP_Query meta filtering works:

{% for post in get_posts({
  post_type: 'listing',
  posts_per_page: 10,
  meta_key: 'availability',
  meta_value: 'available'
}) %}

The field picker shows a text input instead of a dropdown. JetEngine's field-select API is not available in your current setup. Enter the meta key manually, it is the Field Key you defined in JetEngine's meta box builder (shown when you edit a meta box field in JetEngine → Meta Boxes).

Can I access JetEngine Relations or Options fields? JetEngine Relations return post IDs or objects that require PHP traversal. For simple text/image/URL fields, post.meta() works directly. For complex relational structures, the dynamic tag approach is more reliable.