The Heading control adds a static text label inside the Elementor controls panel. It is not a content widget. It prints nothing on the front end, and it does not drop an editable element onto the page. All it does is show a short line of text inside your custom widget’s settings, so whoever is editing the widget knows what the controls around it are for.
Think of it as a section label, or a quick note to the editor. When you build a custom widget with the Widget Builder, you end up stacking a lot of controls: text fields, switchers, color pickers, sliders. A Heading control breaks that pile into labeled groups so the panel stays readable, both for a client and for you six months later when you have forgotten how the widget was wired up.
Screenshot: the Heading control settings panel showing Label, Name, Show Label, Label Block, Separator, Conditions, and Control Classes. Upload heading-control-settings.png here.
Why would someone use it in a custom widget? #
A custom widget can grow into a long list of controls fast. With no structure, the editor just sees one unbroken column of fields and has to guess what goes with what. The Heading control fixes that.
- Label a group of settings so related controls read as one unit, like a “Button Styles” line sitting above the button color, size, and radius fields.
- Add a short instruction that tells the editor how to fill in the controls below it.
- Keep client builds tidy when you ship white-labeled widgets, since a clearly labeled panel means fewer support questions later.
Where This Option Appears #
- Inside the Widget Builder, on the Content tab, when you add a new control to your custom widget.
- It shows up only in the Elementor controls panel (the left-side settings area) of that widget, where it displays the label text you set.
- It outputs nothing on the published page. It is a label for the editor, not page content.
Available Settings #
The Heading control keeps things simple. Here is every field in the panel, in the order you see it.
Label #
The text that appears above the field in the controls panel. This is the heading itself, something like “Layout Options” or “Button Settings.” The helper note under it reads: The label that appears above of the field.
Name #
The internal identifier for the control. It has to be unique within the widget and can only contain letters, numbers, and underscores (_). The Heading prints no value, but it still needs a name so it stays distinct from your other controls.
Common Settings #
- Show Label — toggles whether the label text is displayed. Switch it off and the heading stays in your build but hides its text.
- Label Block — when on, the label sits on its own full-width line instead of inline. For a heading you almost always want this on.
- Separator — sets the position of the separator line: None, Before, After, or Default. Handy for drawing a divider between one group of controls and the next.
- Conditions — add a condition so the heading only appears when another control has a certain value. Useful when the label belongs to settings you reveal conditionally.
- Control Classes — add custom CSS classes to the control wrapper in the panel if you want to style the heading.
There is no default value field here, and no style tab that touches the front end. The Heading control is descriptive, nothing more.
Generated Shortcode #
None. Controls like Text or Number store a value you can pull into your markup, but the Heading does not store anything, so there is no shortcode to generate. You will not reference it in the HTML, CSS, or JS panels. It is there to label the controls around it.
How to Use It: A Practical Example #
Say you are building a custom “Promo Card” widget with a title, a body text, a button, and an icon. Out of the box the controls panel is a flat list of eight or nine fields. Here is how the Heading control cleans that up:
- Open your widget in the Widget Builder and go to the Content tab.
- Add a Heading control. Set its Label to Content and give it a unique Name like content_heading. Place it above your title and body text fields.
- Add a second Heading with the Label Button, sitting above the button label and link fields.
- Add a third Heading with the Label Icon, above your Icons control.
- Set the Separator to Before on each one so a clean line splits every group.
The editor now sees three labeled sections instead of one long column. Nothing changed on the front end, but the widget is a lot less confusing to work with.
Common Use Cases #
- Labeling control groups (Content, Style, Button, Layout) inside a busy custom widget.
- Adding a short instruction above a tricky field, like “Paste the full embed code below.”
- Separating optional settings from required ones so editors fill in the essentials first.
- Documenting a client widget so the handoff needs less explanation.
- Flagging a beta or experimental group of controls in a widget you are still building.
- Tidying up widgets that mix a bunch of Repeater and toggle controls.
Helpful Tips #
- Keep Labels short. A couple of words reads better as a panel heading than a full sentence.
- Use the Separator to back up the grouping, but not on every single heading or the panel starts to look noisy.
- Give every Heading a clear, unique Name so your control list stays easy to manage. One thing that trips people up: reuse a name by accident and the panel can behave oddly, so double-check it.
- Pair Heading controls with the Tabs control when a widget has a lot of groups, so the panel stays compact.
- Remember it is editor-facing only. If you need text to show up on the actual page, reach for a value-producing control like Text or WYSIWYG instead.
The Heading control is a small part of the Widget Builder, but it pays off every time someone opens your widget to edit it. Use it to turn a long list of settings into a panel that explains itself.
