Tiger Dynamic Button

Tiger Dynamic Button exists because a real-world “button” inside a loop is rarely just a link to the current post. It has to become a mailto link on a staff-directory card, an edit link for a logged-in author, a copy-to-clipboard trigger for a coupon code, or a smooth-scroll jump to a review section — all […]

5 min read Updated July 23, 2026
Tiger Dynamic Button — features & options

Tiger Dynamic Button exists because a real-world “button” inside a loop is rarely just a link to the current post. It has to become a mailto link on a staff-directory card, an edit link for a logged-in author, a copy-to-clipboard trigger for a coupon code, or a smooth-scroll jump to a review section — all from the same Elementor widget, without touching PHP. Where a plain Elementor Button only accepts a static URL, Tiger Dynamic Button is built with is_dynamic_content() returning true so it re-resolves its text and link separately for every post in an Archive/Loop Grid, and it ships more than a dozen link “sources” that cover the situations designers normally have to hack together with shortcodes.

Setting up the button

Everything starts in the Button Settings section. Style Preset picks one of three ready-made looks — Solid Primary, Outline, or Ghost / Text Only — which map to CSS classes shipped in tiger-core.css rather than an inline style block, so the presets render correctly even before any Style-tab colors are set.

Next, Text Source decides where the label comes from: Custom Text (a plain field with dynamic-tag support), Dynamic: Post Title (pulls get_the_title() for the current loop post), or Dynamic: Custom Field, which reads the Text Field Key — the meta key of an ACF, Meta Box, or plain custom field. Whenever the title or field source resolves to an empty string, the widget falls back to whatever is typed into Fallback Text instead of rendering an empty button.

The real depth is in Link / Action Source, grouped into five categories: Dynamic URLs (Current Post URL, Custom Field URL, Author Archive, Term Archive using the first available taxonomy term, Post-Type Archive, Previous Post, Next Post, Home Page), Account/Admin (Edit Post and Delete Post, both permission-checked with current_user_can() so a visitor never sees a live delete link), Contact/File (Email via mailto, Phone via tel, and File/Download which resolves an attachment ID or URL field and can add the HTML5 download attribute through Force Download), genuine client-side Interactions — Copy to Clipboard, Smooth Scroll to Section, and Go Back using browser history — and finally Custom URL or No Link. Depending on which source is picked, contextual controls appear: Field Key for meta-driven URLs/emails/phones/files, Value as a static fallback for email, phone, copy text or a CSS-selector scroll target, and Taxonomy to pin the term-archive lookup to a specific taxonomy instead of auto-detecting the first one.

Non-obvious behavior worth knowing

Two switches exist purely for loop reliability. Fallback to Post URL redirects to the current post’s permalink if a field/term/author/archive/prev/next source resolves empty — useful when only some posts in an archive have the custom field filled in. Hide if No URL goes further and removes the entire button from the DOM rather than rendering a dead link, which matters for “Previous Post” buttons on the first post in a series. The widget also changes its own HTML tag at render time: a resolved URL renders an <a>, a client action (copy/scroll/back) renders a real <button type="button">, and everything else falls back to a non-interactive <span> — so keyboard and screen-reader users never hit a fake link. Copy/scroll/back are wired through a single delegated click-listener script that prints once per page load regardless of how many button instances exist, keeping loop-heavy archive pages lightweight.

The Before & After section lets each side of the label be None, Text, or Icon independently, each with its own size, color, and background controls under Style → Icon Style — handy for arrow-suffixed “Read More” buttons or icon-prefixed CTAs. The Style tab’s Normal/Hover tabs only cover text and background color plus a shared Typography and Border group; there’s no dedicated box-shadow or transform group, so extra hover animation needs a custom CSS class.

When to use it vs. related widgets

Reach for Tiger Dynamic Button when the element’s whole job is to be clickable. If you only need a “Read More” link appended after trimmed text, Tiger Post Excerpt already has its own built-in Read More Link switch and doesn’t need a separate button widget. If the destination is simply the post’s own permalink wrapping a title, Tiger Dynamic Title’s Link control (Post link or Custom Link) is lighter weight than adding a button underneath it, and Tiger Featured Image similarly has its own Link to Post toggle. Choose Tiger Dynamic Button instead for a non-title, non-image CTA that must resolve mailto/tel/file links, run a client-side action, or fall back gracefully in a mixed-content archive loop — none of the other dynamic widgets attempt any of that.

Practical tips

  • For a “Call Us” or “Email Sales” button that should work across every post type without a meta field, leave Field Key blank and put the number or address directly in Value — the field key always takes priority when both are filled, which surprises people who set both.
  • Use Term Archive (first term) with an explicit Taxonomy value rather than leaving it on auto-detect whenever a post type has more than one taxonomy (e.g. category and a custom “region” taxonomy) — auto-detect just grabs whichever taxonomy WordPress returns first, which is not always the one you want.
  • Pair Previous Post/Next Post with Hide if No URL switched on; without it, the first and last posts in a series render a dead, unstyled span-turned-button that confuses visitors.
  • For downloadable PDFs stored in a file/attachment field, turn on both Force Download and rely on the automatic Open in New Tab behavior the file source already forces — you don’t need to enable New Tab manually for file links, it’s hardcoded true in the render logic.

Frequently asked questions

The Field Key always takes priority. The widget only falls back to the static Value control when the Field Key is left empty or its meta value resolves to an empty string, so if you fill in both, whatever is stored in that post’s custom field is used and the static Value is ignored.

No. The Edit Post and Delete Post link sources are wrapped in current_user_can( ‘edit_post’ ) and current_user_can( ‘delete_post’ ) checks in the widget’s render() method, so the URL only resolves for a logged-in user who actually has permission on that post; everyone else gets an empty URL, and if Hide if No URL is enabled the button disappears entirely for them.

Still stuck?

We’re here to help

Can’t find what you’re looking for, or hit something that looks like a bug? Reach the support team or ask the community.