Ponty logo

connector

Letar du efter en svensk version?

Ponty Connector is a WordPress plugin that connects the Ponty Recruitment System to your WordPress site. Ads published in Ponty are automatically sent to WordPress where they can be displayed and customized.

Download the latest version (1.0.15)

How it works

The plugin does three things:

  1. Creates two Custom Post Types: pnty_job (active ads) and pnty_job_showcase (showcase/terminated ads)
  2. Receives ad data from Ponty via an authenticated API
  3. Exposes metadata via WordPress REST API, Elementor Dynamic Tags and Gutenberg Block Bindings

The plugin never fetches data. Ads are pushed from the Ponty system to your WordPress installation. Once they exist in WordPress, they are handled as regular WordPress content.

Installation

  1. Download the zip file above
  2. In WordPress: Plugins → Add New → Upload Plugin
  3. Activate the plugin
  4. Go to Settings → Ponty Connector and enter your API key (found in the Ponty system)
  5. Go to Settings → Permalinks and click Save (required for the URL slugs to work)
  6. Publish an ad in Ponty — it will appear in WordPress automatically

Settings

Found under Settings → Ponty Connector.

Base settings

API key
Authentication key matching the one in the Ponty system.
URL slug (active ads)
Controls the URL structure, e.g. /jobs/my-job. Default: jobs
URL slug (showcase ads)
Same for showcase ads. Default: showcase-jobs
Show client logo in ad
Displays the organization logo above the ad content (if available). Turn off if you display the logo via Elementor or Gutenberg instead.
Apply button position
Where the apply button appears in the ad: bottom, top, both, or hidden.

Advanced settings

External CSS file
URL to an external CSS file loaded on ad pages.
Open Graph tags
Auto-generates OG meta tags. Only use if no other OG plugin is present.
JSON-LD (JobPosting)
Adds structured data in JobPosting format for search engines.
Show excerpt
Displays the ad excerpt above the ad content.
Share buttons
Shows sharing buttons for Facebook, LinkedIn and X (Twitter).
Webhook URLs
Comma-separated URLs triggered with a POST request when a new ad is published. JSON payload with value1 (title) and value2 (URL).

Displaying ads

There are four ways to display ad data. Choose what fits your site best.

1. Shortcodes

The simplest approach. Works in all themes and page builders. Place a shortcode on any page.

Common attributes (all shortcodes):

AttributeDescriptionDefault
tagFilter by tag(s), separated with |
numberpostsMax number of ads-1 (all)
organization_nameShow organization name0
locationShow location0
regionShow region0
empty_msgMessage when no ads exist
classCSS class for the wrapper element

Table attributes (pnty_jobs_table, pnty_showcase_table):

AttributeDescriptionDefault
title_column_nameHeader for the title columnTitle
publish_dateShow publish date1
link_allMake all cells clickable0
excerpt_titleShow excerpt as tooltip on hover0

List attributes (pnty_jobs_list, pnty_showcase_list):

AttributeDescriptionDefault
logoShow organization logo0
logo_widthLogo width in pixels
excerptShow excerpt0
readmoreShow a read more link with given text

2. Elementor Dynamic Tags

If your site uses Elementor, you can build a fully custom ad template. The plugin registers Dynamic Tags that can be bound to Elementor widgets.

How to:

  1. Go to Templates → Theme Builder in Elementor
  2. Create a new Single Post template
  3. Set it to apply to post type pnty_job
  4. Add widgets (Text, Image, etc.) and click the wrench icon (Dynamic Tags) to bind them to Ponty fields

Image tags (for Image widgets):

Dynamic TagDescription
Ponty LogoOrganization logo
Ponty Profile ImageContact person's profile photo

Text tags (for Text Editor, Heading, etc.):

Dynamic TagDescription
Ponty LocationWork location
Ponty RegionRegion
Ponty Organization NameOrganization name
Ponty Contact NameContact person's name
Ponty Contact TitleContact person's title
Ponty PhonePhone number
Ponty EmailEmail address
Ponty Withdrawal DateWithdrawal date (when the ad is unpublished)
Ponty External Apply URLExternal application link
Ponty Video URLVideo URL
Ponty LanguageAd language

Tip: If you build a custom Elementor template, turn off "Show client logo in ad" and set the apply button to "Do not show" in the plugin settings to avoid duplicates.

3. Gutenberg Block Bindings

From WordPress 6.5+ with a block theme, you can build ad templates directly in the Site Editor without Elementor.

How to:

  1. Go to Appearance → Editor → Templates
  2. Create a new template for post type pnty_job
  3. Add blocks (Paragraph, Image, Button, etc.)
  4. Bind block attributes to Ponty fields via Block Bindings with source pnty/fields

Example: A paragraph showing the work location:

<!-- wp:paragraph {
    "metadata":{
        "bindings":{
            "content":{
                "source":"pnty/fields",
                "args":{"key":"_pnty_location"}
            }
        }
    }
} -->
<p></p>
<!-- /wp:paragraph -->

Example: An image showing the organization logo:

<!-- wp:image {
    "metadata":{
        "bindings":{
            "url":{
                "source":"pnty/fields",
                "args":{"key":"_pnty_logo"}
            },
            "alt":{
                "source":"pnty/fields",
                "args":{"key":"_pnty_logo"}
            }
        }
    }
} -->
<figure class="wp-block-image">
    <img src="" alt=""/>
</figure>
<!-- /wp:image -->

Available keys — see Meta fields below.

Tip: Same as with Elementor — turn off logo and apply button in settings if you display them via block bindings.

4. PHP template

Most control. Create the file single-pnty_job.php in your theme folder (or single-pnty_job_showcase.php for showcase ads). WordPress will use it automatically.

Basic example:

<?php get_header(); ?>
<?php if (have_posts()): while(have_posts()): the_post();?>
    <div class="pnty-job">
        <h1><?php the_title();?></h1>
        <?php the_content();?>
    </div>
<?php endwhile; endif;?>
<?php get_footer(); ?>

Example with metadata:

<?php get_header(); ?>
<?php if (have_posts()): while(have_posts()): the_post();
    $location = get_post_meta(get_the_ID(), '_pnty_location', true);
    $org      = get_post_meta(get_the_ID(), '_pnty_organization_name', true);
    $logo_id  = get_post_meta(get_the_ID(), '_pnty_logo_attachment_id', true);
?>
    <div class="pnty-job">
        <?php if ($logo_id): ?>
            <?php echo wp_get_attachment_image($logo_id, 'pnty_logo'); ?>
        <?php endif; ?>
        <h1><?php the_title();?></h1>
        <?php if ($org): ?>
            <p class="org"><?php echo esc_html($org); ?></p>
        <?php endif; ?>
        <?php if ($location): ?>
            <p class="location"><?php echo esc_html($location); ?></p>
        <?php endif; ?>
        <?php the_content();?>
    </div>
<?php endwhile; endif;?>
<?php get_footer(); ?>

Fetch ads with a specific tag:

<?php
    $jobs = get_posts([
        'post_type' => 'pnty_job',
        'has_password' => false,
        'numberposts' => -1,
        'tax_query' => [[
            'taxonomy' => 'pnty_job_tag',
            'field'    => 'slug',
            'terms'    => 'exampletag'
        ]]
    ]);
?>
<?php if (count($jobs) > 0):?>
    <ul>
        <?php foreach($jobs as $job):?>
            <li>
                <a href="<?php echo get_permalink($job->ID);?>">
                    <?php echo esc_html($job->post_title);?>
                </a>
            </li>
        <?php endforeach;?>
    </ul>
<?php else:?>
    <p>No published ads at the moment.</p>
<?php endif;?>

Open application

The [pnty_apply_btn] shortcode renders an application button for open applications or a specific assignment.

[pnty_apply_btn
    org="exampleorg"
    assignment_id="12345"
    title="Apply here"
    color="#e3304c"
    lang="en"
]
org (required)
The subdomain for the Ponty system, e.g. mycompany
assignment_id (required)
The assignment ID in Ponty
title
Button text. Default: "Apply here"
color
Hexadecimal color code for the button
lang
Language code, e.g. sv or en

Meta fields

Every ad has the following metadata, available in templates, block bindings and Elementor. All are accessible via get_post_meta() and the REST API.

KeyDescription
_pnty_assignment_idUnique ID from Ponty
_pnty_organization_nameOrganization name
_pnty_locationWork location
_pnty_regionRegion
_pnty_nameContact person's name
_pnty_user_titleContact person's title
_pnty_emailContact person's email
_pnty_phoneContact person's phone
_pnty_user_profile_imageURL to contact person's profile photo
_pnty_logoURL to organization logo
_pnty_logo_attachment_idWordPress attachment ID for the logo
_pnty_withdrawal_dateWithdrawal date (when the ad is unpublished)
_pnty_external_apply_urlExternal application link
_pnty_video_urlVideo URL
_pnty_languageAd language
_pnty_confidentialWhether the ad is confidential
_pnty_addressAddress (JSON)
_pnty_client_contactClient contact details (JSON)
_pnty_meta_descriptionSEO description

REST API

All ads and metadata are exposed via the WordPress REST API:

GET /wp-json/wp/v2/jobs
GET /wp-json/wp/v2/jobs/{id}
GET /wp-json/wp/v2/showcase-jobs
GET /wp-json/wp/v2/showcase-jobs/{id}

The meta fields above are included in the meta object in the response. Reading requires no authentication.

Action hooks

Two hooks are available for custom processing:

pnty_action_post_job
Runs after an ad is created or updated. Argument: the data object from Ponty.
pnty_action_delete_job
Runs after an ad is deleted. Argument: assignment_id.

FAQ

I've entered the API key but can't see any ads?
The plugin never fetches data — it only receives. Publish an ad in the Ponty system and it will be sent automatically.
The logo appears twice?
This happens if you display the logo both via a custom template (Elementor/Gutenberg) and via the plugin's built-in content filter. Turn off "Show client logo in ad" in settings.
Can I use the plugin without Elementor?
Yes. Shortcodes work in all themes. With WordPress 6.5+ and a block theme you can use Gutenberg Block Bindings. You can also write a custom PHP template.
How do I filter ads by tag?
In shortcodes: tag="my-tag". In PHP: use tax_query with taxonomy pnty_job_tag.
Where do I find the shortcode attribute documentation?
Under Settings → Ponty Connector → Documentation in WordPress admin.

Changelog

1.0.15

2026-03-26

Elementor Dynamic Tags and Gutenberg Block Bindings (WordPress 6.5+) support. Block Patterns and default templates for job pages. New settings for fallback logo and show/hide client logo in ad content. REST API exposure of meta fields. Tag separator in shortcodes changed to pipe (|). PHP 8.3+ compatibility. Fix: Elementor Dynamic Tags crashed on render (PHP 8+). Fix: pnty_ads endpoint now returns all ads. Google+ share button removed.

1.0.13

2023-10-27

PHP 8.x support. Widget pnty_latest_jobs_widget removed. Meta field _pnty_user_profile_image added.

1.0.12

2021-09-22

Added location attribute to pnty_jobs_list and pnty_showcase_list.

1.0.11

2021-02-25

Action hooks pnty_action_post_job and pnty_action_delete_job added.

1.0.10

2019-12-09

Meta field _pnty_video_url added.

1.0.9

2019-10-31

Password-protected ads support (preview). Note: custom methods should use 'has_password' => false.

1.0.8

2019-03-05

PHP 7.2+ compatibility (create_function removed).