Skip to content
W3Bullhorn
W3Bullhorn
Book a demo

Reference

Template overrides

Copy a template into a w3bullhorn/ directory in your theme and the plugin uses yours instead. The child theme is checked first, then the parent, then the plugin’s own copy — so the way WordPress asks you to customise a theme is the way this works.

Resolution order

Where a template is looked for

Three places, in this order, and the first readable file wins.

wp-content/themes/acme-child/w3bullhorn/job-listing.php   <- wins
wp-content/themes/acme/w3bullhorn/job-listing.php         <- then this
wp-content/plugins/w3rp-core/templates/job-listing.php    <- else this

Overrides live under a w3bullhorn/ subdirectory so that your theme can hold them without colliding with its own template names. On a site with no child theme the first two paths are the same directory and the duplicate is skipped.

A template name is validated against a strict pattern before it is ever joined to a path, and every resolved path is re-checked to be inside one of those three roots. A path pointing anywhere else is refused, so this seam cannot be turned into an arbitrary file include.

Available

The templates you can override

Fourteen files. Copy the one you need; do not copy the directory.

archive-job.phpThe job listing archive
job-listing.phpThe listing itself, used by the archive and the listing block
job-single.phpThe body of a single job
single-job.phpThe single job page wrapper
form-preview.phpThe application form preview in the admin
parts/job-card.phpOne job in a listing
parts/filters.phpThe search and filter controls
parts/pagination.phpListing pagination
parts/key-facts.phpThe job’s key facts block
parts/overview.phpThe job description section
parts/recruiter.phpThe consultant shown on the job
parts/apply-slot.phpWhere the application form is placed
parts/related.phpRelated roles
parts/sample-notice.phpThe notice shown over sample data

WordPress templates

Your theme’s own templates still win

The plugin does not take the page over.

Separately from the override directory above, the ordinary WordPress template hierarchy applies. A theme that ships a real archive-job.php or taxonomy-job_category.php at its top level wins outright, and the plugin steps aside. Its own wrapper is supplied only when the theme’s choice was a generic fallback — archive.php, index.php, or a block theme’s canvas.

The job post type is job and the category taxonomy is job_category. Classic and block themes need different amounts of document from the plugin, and both are handled: your header, footer and design tokens are the theme’s throughout.

Post typejob
Taxonomyjob_category
Theme template that winsarchive-job.php, taxonomy-job_category.php, single-job.php in your theme root
Override directoryw3bullhorn/ in the active theme, then the parent theme
Permitted namesOne or two path segments of lowercase letters, digits and hyphens, ending .php
Code-level seamThe w3rp_template_path filter, for the exceptional case

w3rp_template_path

The filter, and when not to use it

add_filter(
    'w3rp_template_path',
    static function ( ?string $found, string $name ): ?string {
        if ( 'parts/job-card.php' !== $name ) {
            return $found;
        }

        // Must be inside the active theme, its parent, or the plugin.
        return get_stylesheet_directory() . '/alternate/job-card.php';
    },
    10,
    2
);

A path that is not a readable file inside the active theme, its parent or the plugin is ignored. Reach for this only when the directory convention genuinely cannot express what you need — choosing a template by language, say, or by a request condition. For ordinary customisation, a file in the override directory is clearer to whoever maintains the site after you.

Put your Bullhorn jobs on your own website

See W3Bullhorn working with your own Bullhorn jobs, on a short call with a specialist who knows Bullhorn and WordPress.

Book a demo How it works