Template Customization

The plugin ships its own layouts for the jobs directory and the single job page. Most of what people want to change — how many jobs per page, which filters show, what the location line says, what surrounds the listing — is a setting, not code. This page covers those settings first, then what a developer can and cannot do beyond them.

Template settings

Under Loxo Jobs → Settings → Template Settings (see Plugin Settings for the full reference):

  • Filters to Show — which filter fields appear on the jobs directory. Covered below.
  • Hide Salary? — hides salary everywhere it would otherwise appear: the job meta block, the archive items, the jobs feed, the admin Salary column, and the JobPosting schema.
  • Data to display for location? — which parts make up the location line.

Archive page settings

  • Job Archive Page Slug — the URL path for the jobs archive. On a new install this field is blank, and a blank slug means no archive page is registered at all. Enter jobs and save to get yoursite.com/jobs/. Letters and hyphens only.
  • Archive Page Url — does not move the archive. It sets where the Back to Jobs link on a single job page points, and where the filter form submits. Use it when your real listing page is a normal WordPress page built with the [loxo-jobs] shortcode. Leave blank to use the archive.
  • Jobs Per Page — jobs per page when paginating. Falls back to 10 when blank or not a number.
  • Pagination Style?Pagination (numbered links) or Load More (a button that appends the next page over AJAX).
  • Hide Job excerpt on Archive page? — drops the excerpt from each archive item.
  • Job Archive Template – Before Content / After Content — raw HTML printed above and below the listing, inside the page body.

Saving the settings page schedules a rewrite-rule refresh, so a new slug normally works on the next page load. If the URL still 404s, open Settings → Permalinks once to force it.

Job details page settings

  • Hide Jobs Sharing Buttons? — removes the Facebook, Twitter and LinkedIn share icons from the single job page.
  • Format Job Description — the description formatter, covered below.
  • Single Job Template – Before Content / After Content — raw HTML printed above and below the job content.

The four before/after fields are the intended place for a call to action, a compliance notice, or a bit of tracking markup. They are printed exactly as entered, so keep the HTML valid — an unclosed tag here will break the rest of the page.

Formatting the job description

Descriptions arrive from Loxo as HTML, often carrying inline styles from whatever the recruiter pasted in. Those styles override your theme, which is why one job renders in Calibri 11pt while the rest look right. Format Job Description is a set of independent clean-up steps — none are applied unless you tick them:

  • Balance P (paragraph) tag — runs the description through WordPress’s auto-paragraph routine. Use it when descriptions arrive as one unbroken wall of text with line breaks but no markup. Do not use it when the description already has real <p> tags, or you will get extra spacing.
  • Remove empty P (paragraph) tag — strips out empty paragraphs, the usual cause of large gaps mid-description.
  • Remove inline style from all tags — the blunt, reliable option. Parses the HTML and drops every style attribute, so the description inherits your theme completely. Start here.
  • Remove inline style from P / Li / Strong / Span tag — the same idea limited to one element type, done with pattern matching rather than a parser. Reach for these only if the all-tags option strips something you wanted to keep.

The all-tags option needs PHP’s DOMDocument extension. It is present on effectively every host, but if ticking it changes nothing at all, that is the thing to check.

Location display

Data to display for location? controls the single location line used in job meta, archive items and the admin Location column. The parts are joined with commas in a fixed order — address, city, state, country — with location type appended in brackets, e.g. London, England (Remote).

  • Address, City, State, Country — ticked on a fresh install.
  • Location Type — Remote, On-site, Hybrid and so on. Not ticked by default.

Only elements the job actually has are printed, so an untick is a hard hide and a tick is a “show if present”. Untick everything and the location row disappears entirely.

Filter visibility

Filters to Show decides which fields the filter form renders: keyword search, job category, country, state, city, job type and location type.

None of them are ticked on a new install, and with none ticked the filter form renders nothing. Logged-in administrators see a short reminder in its place — Please set job filters in plugin settings — which visitors never see. If your directory page looks like it is missing its search box, tick the filters you want and save.

These are defaults, not limits. Any placement of [loxo-jobs] or [loxo-jobs-filter] can override them with the job_filters parameter — see Shortcodes — which is how you run a narrow filter set on one landing page and the full set on the main directory.

For developers: what you can override

The plugin does not support theme template overrides. There is no loxo/ folder to copy into your theme and no template lookup that would find one. The single job and archive templates are loaded from the plugin directory by absolute path, so a copy placed in your theme is never read. Editing the files inside the plugin works until the next update overwrites them.

That is deliberate, and there are three supported routes instead.

Build the page yourself from shortcodes or blocks

This is the intended answer for a custom layout. Every piece of a job page is separately available: [loxo-job-title], [loxo-job-meta], [loxo-job-description], [loxo-job-sharing] and [loxo-job-application-form], plus [loxo-jobs] and [loxo-jobs-filter] for the directory. The same seven exist as Gutenberg blocks. Assemble them in whatever order and wrapper markup you want.

Replace the template through WordPress itself

The plugin sets its templates on WordPress’s own single_template and archive_template filters at the default priority. Hooking either at a later priority and returning your own file replaces the plugin’s layout wholesale. The single job template also calls get_header( 'job' ) and get_footer( 'job' ), so a header-job.php or footer-job.php in your theme is picked up automatically.

Restyle the existing markup

The templates use stable class names — .loxo-jobs-archive, .loxo-job-items, .loxo-job, .loxo-single-job, .job-meta, .loxo-pagination — so most visual changes are a stylesheet away. The plugin’s own CSS is enqueued under the handle loxo-frontend, which you can dequeue outright if you would rather start from nothing.

On hooks: the plugin exposes loxo_job_import_props, which lets an add-on change any imported value before a job is saved. It runs at import time, not render time, so it is the right tool for changing data and no help for changing layout. There are no template-level filters — if you need one, ask and it can be added.

Block themes behave differently

If your theme is a block theme, the plugin steps aside. It does not override the single or archive template, and it does not apply its own query changes to the archive. Your theme’s Site Editor templates render the job pages instead.

Three consequences worth knowing before you spend an afternoon on it: the before/after HTML fields have no effect, because the templates that print them never run; Jobs Per Page does not apply to the archive, which uses your theme’s own query; and layout is a Site Editor job, using the plugin’s blocks. Job view tracking and the schema output are unaffected — those do not depend on templates.

Troubleshooting

SymptomCauseFix
No filter form on the directory pageNo filters are ticked — the state on a new installTick them under Template Settings and save
/jobs/ returns 404The archive slug is blank, so no archive is registeredEnter a slug under Archive Page Settings, save, then visit Settings → Permalinks
Template copied into the theme is ignoredTheme overrides are not supportedUse the shortcodes or blocks, or filter single_template
Before/After HTML fields do nothingA block theme is active, so the plugin’s templates never runAdd the markup in the Site Editor instead
Job descriptions ignore your theme fonts and coloursInline styles in the description from LoxoTick Remove inline style from all tags
Location line shows more or less than expectedThe tick list, or the job simply has no value for that partAdjust Data to display for location?; check the job in Loxo for missing fields
Layout changed back after a plugin updateEdits were made to files inside the plugin folderMove the work into a child theme or a small custom plugin using the routes above

FAQ

Can I copy a template into my child theme?

No. The plugin loads its templates by absolute path and never checks the theme, so a copy there is simply never read. Build the layout from the shortcodes or blocks, or take over the WordPress template filter.

Can I change the order of fields in the job meta block?

Not through a setting — the order is fixed in the template. To control it, drop [loxo-job-meta] and place the individual pieces yourself, or replace the single job template through the single_template filter.

Do the template settings apply to shortcode placements too?

Yes. Jobs per page, pagination style, hide excerpt, hide salary and the filter list are all read as the defaults for [loxo-jobs], and each can be overridden per placement with a shortcode parameter.

Related documentation

  • Gutenberg Blocks — the block-based alternative for the same job displays.
  • Shortcodes — see the per-shortcode parameters these template settings default to.
  • Plugin Settings — the full settings reference these template options live in.
  • Available Job Data — every field a job carries, if you are building a custom layout.