Get Lever job details and post applications directly from Craft.
composer require workingconcept/craft-lever
php craft install lever
or install from Settings → Plugins in the control panel- add your site and API details in the control panel via Settings → Lever
Returns an array of jobs. Supply valid parameters for the job postings API if you need to tailor the results.
Returns a specific job matching the provided Lever ID, or false
.
id
text
categories
country
description
descriptionPlain
lists
additional
additionalPlain
hostedUrl
applyUrl
createdAt
workplaceType
{% set positions = craft.lever.jobs %}
<h2>Work with Us!</h2>
<ul>
{% for position in positions %}
<li><a href="{{ position.hostedUrl }}" target="_blank">{{ position.text }}</a></li>
{% endfor %}
</ul>
You can create your own form and validation and submit it with an action
field set to lever/apply
. Use any fields named exactly as seen in the postings API, with jobId
, name
, and email
being required.
<h3>Apply</h3>
{% if application is defined and application.getErrors() | length %}
{% for field in application.getErrors() %}
{% for error in field %}
<p class="error" role="alert">{{ error }}</p>
{% endfor %}
{% endfor %}
{% endif %}
<form id="job" action="" method="post" accept-charset="UTF-8" enctype="multipart/form-data">
{{ csrfInput() }}
{{ redirectInput(craft.app.request.absoluteUrl ~ "?success=y") }}
<input type="hidden" name="action" value="lever/apply">
<input type="hidden" name="jobId" value="{{ job.id }}">
<input type="text" name="name" value="{{ application.name ?? '' }}" required>
<input type="email" name="email" value="{{ application.email ?? '' }}" required>
<textarea name="comments">{{ application.comments ?? '' }}</textarea>
<input type="file" name="resume" required>
<button class="btn">Submit</button>
</form>
You can display all job details on your site if you'd like, including custom detail pages. One way you might go about that is to create a detail page template like jobs/_detail.twig
and set up a custom route for it.
Barebones template:
{% extends "_layout" %}
{% set job = craft.lever.job(id) %}
{% if job is empty %}
{% exit 404 %}
{% endif %}
{% block content %}
...
Custom route in config/routes.php
:
return [
'jobs/<id>' => ['template' => 'jobs/_detail'],
];
This will take requests like https://site.foo/jobs/be9f3647-b59a-4272-94a0-8b937520a69f
and send them to your template, where they'll 404 if the ID is invalid.
Triggered after an application is submitted and before it's validated. You can adjust $event->application
if you need to do something custom like handle a FilePond upload and attach it to the LeverJobApplication model.
Triggered after an application is submitted and before it's sent to Lever. Grab the application data from $event->application
and prevent it from being sent by setting $event->isSpam
to true
.
Triggered immediately after an application is sent to Lever successfully. Same $event->application
and $event->isSpam
properties available.
Please submit an issue or a pull request if anything needs attention. We'll do our best to respond promptly.
This plugin is brought to you by Working Concept, which has no affiliation with Lever.