Title: Primo Vars
Author: Primo WP
Published: <strong>August 30, 2026</strong>
Last modified: August 30, 2026

---

Search plugins

![](https://ps.w.org/primo-vars/assets/banner-772x250.png?rev=3673130)

![](https://ps.w.org/primo-vars/assets/icon-256x256.png?rev=3673130)

# Primo Vars

 By [Primo WP](https://profiles.wordpress.org/zurtri/)

[Download](https://downloads.wordpress.org/plugin/primo-vars.1.0.0.zip)

 * [Details](https://li.wordpress.org/plugins/primo-vars/#description)
 * [Reviews](https://li.wordpress.org/plugins/primo-vars/#reviews)
 *  [Installation](https://li.wordpress.org/plugins/primo-vars/#installation)
 * [Development](https://li.wordpress.org/plugins/primo-vars/#developers)

 [Support](https://wordpress.org/support/plugin/primo-vars/)

## Description

Contact details have a habit of appearing on a dozen pages. When the phone number
or email changes, you get to find every one of them – a real pain!

Primo Vars fixes that. Define a value once on a single settings screen, give it 
a name, and use its shortcode wherever you need it. Change the value and every page
follows.

Each variable has a **type**, and the type does the fiddly work for you:

 * **Phone**: renders a tappable `tel:` link, while displaying the number exactly
   as you typed it, brackets, spaces, country code and all.
 * **Email**: renders a `mailto:` link with the address obfuscated against scrapers.
 * **Link**: renders an anchor, with an optional custom label.
 * **Address**: a multi-line field that keeps your line breaks.
 * **Multi-line text**: the same, for opening hours, a disclaimer, anything that
   runs to more than one line.
 * **Text**: renders plain text, for anything else.

#### Usage

    ```
    [primo_var key="phone"]
    [primo_var key="email"]
    [primo_var key="facebook" text="Follow us"]
    [primo_var key="phone" raw="1"]

    raw="1" returns the plain value with no link, for when you are building your own markup around it.
    ```

In a theme template:

    ```
    <?php echo primo_vars_get( 'phone' ); ?>
    <?php echo primo_vars_get( 'phone', true ); // raw ?>
    ```

#### In the block editor

Insert the **Primo Var** block, pick a variable from the dropdown, and it
 renders
exactly what the shortcode would. Use the shortcode when you want a value inline
in a sentence, and the block when it stands on its own.

#### Starter variables

A fresh install creates seven empty variables to fill in: phone, email,
 address,
facebook, instagram, linkedin and youtube. Delete the ones you do not want, or add
your own. A YouTube channel is just a Link, the same as any other social profile.

#### For developers

Filter `primo_vars_output` to change what any variable renders, from the
 shortcode,
the block and `primo_vars_get()` alike. It fires for a variable that is defined 
but left empty, which is what the example below relies on; it does not fire for 
a key that is not defined at all, since all three entry points return an empty string
before reaching this filter in that case.

    ```
    add_filter( 'primo_vars_output', function ( $html, $var, $atts ) {
        if ( '' === $html && 'phone' === $var['type'] ) {
            return 'Call the office';
        }
        return $html;
    }, 10, 3 );
    ```

The HTML handed to the filter is already escaped. Anything your callback adds
 is
yours to escape.

#### Phone numbers with extra text

Real phone numbers are messy. `+61 491 570 156 Option 2` and `(08) 8123 1234` both
display exactly as typed, and both produce a correct dial link. The trailing “Option
2” is not dialled.

Where the number cannot be worked out automatically, no link is shown rather than
a wrong one. That covers vanity numbers like `1300 PRIMO`, and two numbers written
in one field such as `(08) 8123 1234 (0412 345 678)`. Fill in the optional **Dial
as** field on that row and it will link exactly as you specify.

## Screenshots

[⌊The Primo Vars settings screen.⌉⌊The Primo Vars settings screen.⌉[

The Primo Vars settings screen.

[⌊The Primo Var block in the editor.⌉⌊The Primo Var block in the editor.⌉[

The Primo Var block in the editor.

[⌊Contact details rendered on the front end.⌉⌊Contact details rendered on the front
end.⌉[

Contact details rendered on the front end.

## Blocks

This plugin provides 1 block.

 *   Primo Var Output a variable defined under Settings, Primo Vars.

## Installation

 1. Upload the plugin to `/wp-content/plugins/` and activate it.
 2. Go to **Settings  Primo Vars**.
 3. Fill in the values for the starter variables, or add your own.

## FAQ

### What happens if I use a shortcode for a variable I have not filled in?

Nothing renders. Visitors never see a placeholder or an error message.

### Why was my web address rejected?

A link needs its scheme, so use `https://facebook.com/you` rather than `facebook.
com/you`. The plugin tells you which variable it refused and leaves the old value
in place rather than saving something that would not work.

### Does this work in widgets?

Yes. Widget areas have been block-based since WordPress 5.8, so add the Primo
 Var
block, or a Shortcode block holding `[primo_var]`, to any widget area or site editor
template.

Navigation menu labels are the exception: WordPress does not run shortcodes
 there,
and this plugin deliberately does not add a filter to make it, because broad `do_shortcode()`
filters widen the injection surface for everyone.

### Does it phone home?

No. No external requests, no tracking.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Primo Vars” is open source software. The following people have contributed to this
plugin.

Contributors

 *   [ Primo WP ](https://profiles.wordpress.org/zurtri/)

[Translate “Primo Vars” into your language.](https://translate.wordpress.org/projects/wp-plugins/primo-vars)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/primo-vars/), check
out the [SVN repository](https://plugins.svn.wordpress.org/primo-vars/), or subscribe
to the [development log](https://plugins.trac.wordpress.org/log/primo-vars/) by 
[RSS](https://plugins.trac.wordpress.org/log/primo-vars/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.0.0

 * First release.

## Meta

 *  Version **1.0.0**
 *  Last updated **2 days ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.3 or higher **
 *  Tested up to **7.1**
 *  PHP version ** 7.4 or higher **
 *  Language
 * [English (US)](https://wordpress.org/plugins/primo-vars/)
 * Tags
 * [contact details](https://li.wordpress.org/plugins/tags/contact-details/)[email](https://li.wordpress.org/plugins/tags/email/)
   [phone](https://li.wordpress.org/plugins/tags/phone/)[shortcode](https://li.wordpress.org/plugins/tags/shortcode/)
   [variables](https://li.wordpress.org/plugins/tags/variables/)
 *  [Advanced View](https://li.wordpress.org/plugins/primo-vars/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/primo-vars/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/primo-vars/reviews/)

## Contributors

 *   [ Primo WP ](https://profiles.wordpress.org/zurtri/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/primo-vars/)