JPKCom ACF Jobs — Anleitung & Tipps

Stellenanzeigen mit JPKCom ACF Jobs verwalten — Installation, Custom Post Types, Shortcodes, Template-Overrides und Praxis-Tipps für ACF-Pro-basierte Job-Listings.

JPKCom ACF Jobs ist ein Stellenanzeigen- und Bewerbungs-System auf Basis von Advanced Custom Fields Pro. Es bringt drei Custom Post Types (Jobs, Standorte, Unternehmen), JobPosting-Schema.org-Daten, Bootstrap-5-Templates und Shortcodes mit — gedacht für Karriereseiten, HR-Teams und Jobbörsen.

Anleitung

Voraussetzungen

Zwingend erforderlich:

Optional: WPML (öffnet in neuem Tab) für mehrsprachige Stellenanzeigen.

Installation

  1. Lade die aktuelle Release-ZIP von der GitHub-Releases-Seite (öffnet in neuem Tab) herunter.
  2. Im Admin-Bereich: Plugins → Installieren → Plugin hochladen, ZIP wählen, Jetzt installieren, dann Aktivieren.
  3. Stelle sicher, dass ACF Pro und ACF Quick Edit Fields aktiv sind.

Alternativ per FTP nach /wp-content/plugins/ hochladen oder für die Entwicklung direkt klonen:

cd /pfad/zu/wordpress/wp-content/plugins/
git clone https://github.com/JPKCom/jpkcom-acf-jobs.git

Auf Multisite ist das Plugin netzwerkfähig (Netzwerk-Admin → Plugins → Netzwerkweit aktivieren).

Erste Schritte

Nach der Aktivierung erscheinen die Menüpunkte Jobs, Standorte (Locations) und Unternehmen (Companies). Empfohlener Ablauf:

  1. Lege unter Locations → Erstellen einen Standort an.
  2. Lege unter Companies → Erstellen ein Unternehmen an.
  3. Erstelle unter Jobs → Erstellen eine Stelle, fülle die ACF-Felder (Jobtyp, Standort, Unternehmen, Gehalt) und weise rechts über die Taxonomie Job-Attribute zu (z. B. Benefits, Anforderungen).
  4. Veröffentliche die Stelle — sie erscheint im Archiv unter /jobs/ und wird mit JobPosting-Schema.org-Daten ausgezeichnet.

Stellen ausgeben

Per Shortcode (alle Attribute optional):

[jpkcom_acf_jobs_list type="FULL_TIME" company="6,8" location="1,3,7" limit="10" sort="DSC"]

company und location erwarten Post-IDs (im Admin in der URL sichtbar, post=123). Attribute (Benefits/Anforderungen) lassen sich separat ausgeben:

[jpkcom_acf_jobs_attributes id="3,7,21"]

Alternativ erreichst du das Archiv direkt unter /jobs/ oder baust eigene Ausgaben per WP_Query mit post_type => 'job'.

Stellen als Daten: die Abilities API

Seit Version 1.4.0 registriert das Plugin drei nur lesende Abilities. Die Abilities API ist ein WordPress-Kernregister maschinenlesbarer Fähigkeiten — KI-Assistenten, MCP-Clients und REST-Automatisierung können deine Stellenanzeigen damit als strukturierte Daten abfragen, statt die Seite auszulesen:

Ability Antwort
jpkcom-acf-jobs/list-filters welche Jobtypen, Unternehmen, Standorte und Job-Attribute es auf dieser Site gibt
jpkcom-acf-jobs/query-jobs eine gefilterte, seitenweise Liste von Stellen
jpkcom-acf-jobs/get-job eine Stelle vollständig

Der Sinn des Paares: list-filters nimmt query-jobs das Raten ab — ein Aufrufer holt sich erst die echten Werte und filtert dann damit. Erreichbar sind die Abilities unter /wp-json/wp-abilities/v1/; weil sie nur lesen, antworten sie auf GET.

Wer was zu sehen bekommt:

  • Es braucht einen angemeldeten Benutzer mit der Fähigkeit read — das schließt Abonnenten ein. Anonyme Anfragen werden abgewiesen.
  • Zurück kommen ausschließlich veröffentlichte Stellen nach derselben Sichtbarkeitsregel, die auch dein Archiv und [jpkcom_acf_jobs_list] verwenden — dieselbe Funktion, keine zweite Kopie davon. Die Abilities schränken zusätzlich ein: passwortgeschützte Stellen liefern sie überhaupt nicht aus, obwohl das Archiv sie zeigt.
  • Detailfelder — Gehalt, Anschrift, Bewerbungsdaten, der volle Anzeigentext — kommen nur für Stellen, deren Detailseite ein Besucher auch öffnen könnte. Eine Stelle, die auf eine externe Bewerbungs-URL umleitet, und eine abgelaufene Stelle haben keine öffentliche Detailseite; für sie werden diese Felder zurückgehalten und der Grund steht in der Antwort. Eine passwortgeschützte Stelle ist ein anderer Fall: Sie wird nicht beschnitten, sondern gar nicht ausgeliefert — query-jobs lässt sie aus, list-filters zählt sie nicht mit, und get-job antwortet mit derselben Meldung und demselben 404 wie für eine ID, die es nicht gibt. Diese Gleichheit ist Absicht: Andernfalls ließe sich über die Abilities herausfinden, welche Beitrags-IDs die Site überhaupt hat.
  • Die Suche greift nur auf Titel, weil dieses Plugin den Anzeigentext in ACF-Feldern ablegt. Die Ability sagt das in ihrer Beschreibung dazu und verweist auf die Filter, die weiter reichen.
  • WordPress listet die Abilities selbst — Namen, Beschreibungen, Parameter — gegenüber jedem angemeldeten Benutzer auf. Das ist Kern-Verhalten, keine Einstellung dieses Plugins.

Komplett abschalten lässt sich das Ganze in der wp-config.php:

define( 'JPKCOM_ACFJOBS_ABILITIES', false );

Oder du behältst die Abilities und hebst die nötige Fähigkeit an:

add_filter( 'jpkcom_acf_jobs_ability_capability', static function ( $capability ) {
	return 'edit_posts';
} );

Zusätzlich steuerst du über jpkcom_acf_jobs_ability_meta, wie die Abilities nach außen sichtbar sind — REST-Route, MCP-Freigabe, Annotationen —, und über jpkcom_acf_jobs_ability_query_args die Query von query-jobs zusätzlich einschränken — übernommen werden daraus nur meta_query- und tax_query-Klauseln.

Tipps & Tricks

  • Job-Archiv abschalten/umleiten: Unter Jobs → Options kannst du das Archiv /jobs/ deaktivieren und optional auf eine eigene URL (z. B. /karriere/) per HTTP-307 umleiten. Einzelne Job-Seiten bleiben erreichbar — praktisch, wenn du Stellen lieber per Shortcode auf eigenen Seiten zeigst.
  • Templates überschreiben (Reihenfolge der Priorität):
    1. Child-Theme (empfohlen): Templates aus plugins/jpkcom-acf-jobs/templates/ nach dein-child-theme/jpkcom-acf-jobs/ kopieren.
    2. Parent-Theme: nach dein-theme/jpkcom-acf-jobs/.
    3. MU-Plugin: nach mu-plugins/jpkcom-acf-jobs-overrides/templates/ für seitenweite Anpassungen.
  • Pfade programmatisch erweitern: Über die Filter jpkcom_acf_jobs_template_paths bzw. jpkcom_acfjobs_file_paths lassen sich eigene Verzeichnisse voranstellen; jpkcom_acf_jobs_final_template erlaubt das dynamische Überschreiben des finalen Templates.
  • ACF-Felder mit Bootstrap-5-Markup rendern: jpkcom_render_acf_fields() gibt alle ACF-Felder eines Beitrags aus; Template-Teile holst du mit jpkcom_acf_jobs_get_template_part( 'partials/job/company' ).
  • Schema.org ohne Konfiguration: Die JobPosting-JSON-LD-Ausgabe ist automatisch aktiv und für Google for Jobs nutzbar — nichts einzustellen.
  • Ablaufdatum richtet sich nach der Site-Zeitzone: Abgelaufene Stellen verschwinden aus Archiv, Shortcode-Listen und Einzelansicht zum lokalen Mitternachtswechsel. Bis Version 1.3.6 wurde gegen das UTC-Datum verglichen — WordPress setzt die PHP-Zeitzone auf UTC, deshalb blieben abgelaufene Anzeigen für die Dauer des UTC-Offsets sichtbar (in Europe/Berlin also 1–2 Stunden über Mitternacht hinaus). Seit 1.3.7 zieht die Prüfung current_time() heran.
  • Verhaltensänderung für Ability-Aufrufer (1.5.0): get-job nahm bis dahin Parameter an, die es gar nicht kennt — ein Tippfehler oder ein Filter, den nur query-jobs hat, wurde stillschweigend ignoriert und die Anfrage normal beantwortet. Die beiden anderen Abilities wiesen dieselbe Eingabe schon immer mit einer Fehlermeldung ab. Seit 1.5.0 tut get-job das auch: Ein Aufruf, der vorher eine Antwort bekam, bekommt jetzt einen Fehler, der den abgelehnten Parameter und die akzeptierten benennt. Wenn du eigene Automatisierung gegen diese Ability gebaut hast, prüfe sie nach dem Update.
  • Mehrsprachig mit WPML: Über wpml-config.xml sind Jobs, Standorte, Unternehmen und Taxonomien übersetzbar; die Felder tragen passende Übersetzungsstrategien (translate/copy/copy-once).
  • Oberflächen-Übersetzungen: Mitgeliefert werden sieben Sprachen — Deutsch in Du- und Sie-Form, Spanisch, Französisch, Ungarisch, Italienisch und Polnisch. Der Übersetzungs-Katalog war bis 1.5.0 seit Oktober 2025 nicht mehr erzeugt worden und deckte 64 von inzwischen gut 200 Texten ab; seit 1.5.1 umfasst er das ganze Plugin, und ein Build-Schritt bricht ab, sobald er wieder zurückfällt. Neu aufgenommene Texte sind gelistet, aber noch nicht überall übersetzt und erscheinen dann auf Englisch. Seit 1.5.4 sind die vier Sicherheitsmeldungen des Updaters in allen sieben Sprachen vorhanden — das sind die Meldungen, die erscheinen, wenn ein Update abgelehnt wird, weil seine Prüfsumme nicht passt oder sich gar nicht prüfen lässt.
  • Updates & Sicherheit: Das Plugin aktualisiert sich sicher über GitHub mit SHA256-Prüfsumme; Update-Hinweise erscheinen unter Dashboard → Aktualisierungen und auf der Plugins-Seite.

Weiterführende Informationen