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 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
| Tag | Use for |
|---|---|
| JetEngine Field | Any text, number, date, select, or textarea field |
| JetEngine URL | URL or media fields where you need the link |
| JetEngine Image | Media/image fields (binds to image controls) |
Source Option
All three tags have a Source setting:
| Source | What it reads |
|---|---|
| Post | The field value on the current post |
| Post Author | The 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.