WP Code Generator — Beispiele
Konkrete Durchläufe mit dem WP Code Generator: Plugin als ZIP, typisierter Hook, Block-Theme, Ability, Block Bindings, REST-Route und ein 7.x-Snippet.
Zurück zur Übersicht: WP Code Generator · Tool live öffnen: www.jpkc.com/tools/wp/
Das Manual beschreibt jeden Generator und seine Felder. Diese Seite ergänzt das um konkrete Arbeitsabläufe: typische Aufgaben, Schritt für Schritt durchgespielt, mit dem Code, den das Tool dabei tatsächlich erzeugt. Alle Ausschnitte stammen aus echten Durchläufen im Tool; lange Dateien sind gekürzt. Die Beispiele bauen lose aufeinander auf — ein kleines Plugin „Book Shelf" für eine Leseliste —, lassen sich aber auch einzeln nachvollziehen.
Beispiel 1: Ein Plugin mit readme.txt als ZIP
Du startest ein neues Plugin und willst es sofort installieren können.
- Öffne den WP Code Generator — der Plugin-Generator ist beim Laden aktiv.
- Tippe in Plugin Name
Book Shelf. Plugin slug wird zubook-shelf, die Text Domain folgt dem Slug, und PHP namespace wird zuBookShelf. - Trage Author (
Jane Doe), Author URI und eine einzeilige Description ein. Requires WP (7.0), Requires PHP (8.3) und License (GPL-2.0-or-later) passen so. - Im Block readme.txt trägst du deinen wordpress.org-Namen unter Contributors ein und bei Tags etwa
books, library, reading, wordpress. Über der Ausgabe erscheint sofort eine Warnung: „readme.txt: wordpress.org ignores the tag(s) wordpress — removed." Das Tool hält sich an die Regeln des Verzeichnisses. - Die Ausgabe hat drei Reiter:
book-shelf.php,readme.txtunduninstall.php. Die Hauptdatei beginnt so:
<?php
/**
* Plugin Name: Book Shelf
* Description: Keeps a list of books you have read.
* Version: 1.0.0
* Requires at least: 7.0
* Requires PHP: 8.3
* Author: Jane Doe
* Author URI: https://example.com
* License: GPL-2.0-or-later
* License URI: https://www.gnu.org/licenses/gpl-2.0.html
* Text Domain: book-shelf
* Domain Path: /languages
*
* @package BookShelf
*/
declare(strict_types=1);
namespace BookShelf;
defined( 'ABSPATH' ) || exit;
/**
* Main plugin class.
*/
final class Plugin {
public const string VERSION = '1.0.0';Tested up to und Stable tag fehlen hier bewusst — sie stehen in der readme.txt, wo wordpress.org sie liest. Die uninstall.php löscht beim Entfernen des Plugins die Option book_shelf_version, die die Aktivierung angelegt hat, auf Multisite für jede Site.
- Klick auf ZIP. Du erhältst
book-shelf.zipmit dem Ordnerbook-shelf/und den drei Dateien darin — bereit für den Plugin-Upload im WordPress-Backend.
Beispiel 2: Ein Hook mit echten Parametertypen
Beim Speichern eines Beitrags soll dein Plugin etwas tun.
- Wähle unter Hooks & Assets den Generator Hook (Action / Filter).
- Tippe in Hook Name
save_post. Weil das Tool diesen Hook kennt, stellt es Type auf Action und Accepted Args auf3. - Trage bei Callback Function Name einen eigenen, präfixierten Namen ein, etwa
book_shelf_on_save. Lässt du das Feld leer, leitet das Tool einen Namen aus dem Hook ab — ein eigener Präfix schützt aber besser vor Kollisionen. - Mit aktivem Typed parameters (known hooks) stehen in der Signatur die echten Typen aus der WordPress-Dokumentation:
<?php
declare(strict_types=1);
defined( 'ABSPATH' ) || exit;
/**
* Callback for the 'save_post' action.
*
* @param int $post_id
* @param WP_Post $post
* @param bool $update
*/
function book_shelf_on_save( int $post_id, WP_Post $post, bool $update ): void {
// Your code here.
}
add_action( 'save_post', 'book_shelf_on_save', 10, 3 );- Wechselst du auf einen Filter wie
the_title, gibt die Funktion den gefilterten Wert zurück, und der Rückgabetyp entspricht dem ersten Parameter. Denk daran: Eine Filter-Funktion muss den Wert zurückgeben, sonst ist er weg.
Beispiel 3: Ein Block-Theme in einem Rutsch
Zum Plugin soll ein passendes Block-Theme entstehen.
- Wähle Theme unter Plugin & Theme. Hast du in Beispiel 1 einen Autor eingetragen, steht er hier schon im Feld Author — das Tool überträgt gemeinsame Felder sofort in unberührte Felder der anderen Generatoren.
- Tippe in Theme Name
Book Shelf Themeund aktiviere Block Theme (Full Site Editing). Die Block-Theme-Optionen klappen auf; die Voreinstellungen sind ein brauchbarer Start: Palette mit vier Farben, Content-Breite 800 px, flüssige Typografie, sieben Templates, Header und Footer als Template Parts, eine dunkle Style-Variation, ein Hero-Pattern und ein Editor-Stylesheet. - Die Ausgabe hat jetzt 15 Reiter.
style.cssbekommt den Header samt vorgeschlagener Tags:
/*
Theme Name: Book Shelf Theme
Author: Jane Doe
Author URI: https://example.com
Description: A custom WordPress theme.
Requires at least: 7.0
Tested up to: 7.1
Requires PHP: 8.3
Version: 1.0.0
License: GNU General Public License v2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: book-shelf-theme
Tags: full-site-editing, block-patterns, style-variations, wide-blocks, editor-style
*/
/* Theme styles go here. */Die theme.json beginnt mit "$schema": "https://schemas.wp.org/wp/7.1/theme.json" und "version": 3; styles/dark.json dreht die Palette um (Base #1e293b, Contrast #ffffff). Die functions.php braucht kaum etwas: Block-Themes aktivieren Title-Tag, Beitragsbilder und Co. automatisch, übrig bleiben Editor-Stylesheet, Stylesheet-Einbindung und die Pattern-Kategorie.
- ZIP liefert
book-shelf-theme.zipmit allen 15 Dateien im Ordnerbook-shelf-theme/— vontemplates/index.htmlbispatterns/hero.php. Hochladen, aktivieren, im Site-Editor weiterarbeiten.
Beispiel 4: Eine Ability für KI-Assistenten
Ein KI-Assistent oder MCP-Client soll die neuesten Beiträge deiner Website abfragen können.
- Wähle unter APIs den Generator Abilities API.
- Setze Namespace auf
book-shelf. Function Prefix und Text Domain leiten sich daraus ab. Alles andere bleibt auf den Voreinstellungen: Abilityget-recent-posts, Eingabecount(1 bis 20, Standard 5) undpost_type(postoderpage), Ausgabe eine Liste mitid,titleundlink, Rechtread, Annotation readonly. - Das Tool zeigt als Methode GET an — eine Ability, die nur liest, wird über GET ausgeführt. Der erzeugte Code registriert Kategorie und Ability auf den dafür vorgesehenen Hooks:
function book_shelf_register_abilities(): void {
wp_register_ability(
'book-shelf/get-recent-posts',
array(
'label' => __( 'Get Recent Posts', 'book-shelf' ),
'description' => __( 'Returns the most recent published posts (ID, title, permalink). Use it to get an overview of recent content.', 'book-shelf' ),
'category' => 'book-shelf-content',
// input_schema and output_schema shortened
'execute_callback' => 'book_shelf_execute_get_recent_posts',
'permission_callback' => 'book_shelf_can_get_recent_posts',
'meta' => array(
'annotations' => array( 'readonly' => true, 'destructive' => false, 'idempotent' => true ),
'public' => true,
'show_in_rest' => true,
'mcp' => array( 'type' => 'tool' ),
),
)
);
}
add_action( 'wp_abilities_api_init', 'book_shelf_register_abilities' );- Der Ausführungs-Callback ist bei diesen Voreinstellungen nicht leer, sondern funktioniert: Er liest die Eingabe, fragt mit
get_posts()nur veröffentlichte Beiträge ab und gibtid,titleundlinkzurück. Das Tool castet dabei jeden Eingabewert selbst, weil das Schema Werte zwar prüft, aber nicht umwandelt. - Mit dem Extra Usage (PHP + curl) kommt ein Kommentarblock dazu, der zeigt, wie du die Ability in PHP und über die REST-API aufrufst.
Beispiel 5: Post-Meta im Block anzeigen mit Block Bindings
Zu jedem Buch sollen ISBN, Untertitel und Kauf-Link als Meta-Felder gespeichert und direkt in Blöcken angezeigt werden — ohne eigenen Block.
- Wähle unter Blocks & Editor den Generator Block Bindings. Die Voreinstellungen passen fast schon: Plugin
my-bindings, Quellemy-bindings/book-data, die Felderisbn,subtitleundbuy_urlmit passenden Sanitizern. - Für eigene Beitragstypen änderst du Post Types; sie brauchen
show_in_restund müssencustom-fieldsunterstützen, sonst kann der Editor die Werte weder lesen noch speichern. - Die Ausgabe hat vier Reiter: das Plugin
my-bindings.php,assets/editor.jsund zwei HTML-Dateien mit Beispiel-Markup.block-markup.htmlzeigt, wie ein Absatz an ein Feld gebunden wird:
<!-- wp:paragraph {"metadata":{"bindings":{"content":{"source":"my-bindings/book-data","args":{"field":"isbn"}}}}} -->
<p>Fallback ISBN</p>
<!-- /wp:paragraph -->- Im PHP-Teil liest die Quelle den Wert erst, nachdem sie dieselben Sichtbarkeitsprüfungen wie die Core-Quelle
core/post-metabestanden hat — ein Entwurf, ein privater oder ein passwortgeschützter Beitrag verrät seine Meta-Werte also nicht an Besucher ohne Leserecht. Liefert sienull, bleibt der Fallback-Text im Block stehen. - ZIP liefert
my-bindings.zipmit allen vier Dateien. Nach der Aktivierung wählst du im Editor bei einem Absatz unter Attribute die Quelle „Book data" und das Feld aus.
Beispiel 6: Eine REST-Route, die wirklich speichert
Eine externe Anwendung soll Bücher anlegen, lesen, ändern und löschen können.
- Wähle unter APIs den Generator REST Route. Namespace
my-plugin/v1, Route/booksund das ID segment sind voreingestellt. - Aktiviere zusätzlich zu GET die Methoden POST, POST, PUT, PATCH (EDITABLE) und DELETE, und schalte Real CRUD ein.
- Das Tool warnt sofort: „Real CRUD: wp_insert_post() refuses a post whose title, content and excerpt are all empty (400 empty_content) — add a title, content or excerpt argument for POST." Also fügst du mit Add Argument ein Argument
titlevom Typstringmit der Beschreibung „Title of the book.“ hinzu, beschränkt auf POST und EDIT — die Warnung verschwindet. - Der erzeugte Code registriert zwei Routen und prüft je Methode genau das passende Recht:
[
'methods' => WP_REST_Server::CREATABLE,
'callback' => 'my_plugin_rest_create_book',
'permission_callback' => static fn (): bool => current_user_can( get_post_type_object( 'post' )?->cap->create_posts ?? 'do_not_allow' ),
'args' => [
'title' => [ 'type' => 'string', 'description' => __( 'Title of the book.', 'my-plugin' ) ],
],
],Neue Bücher entstehen als Entwurf, eine Antwort mit 201 und Location-Header meldet die neue Adresse. DELETE verschiebt in den Papierkorb und verweigert sich, wenn der Papierkorb abgeschaltet ist, statt endgültig zu löschen. GET gibt den Rohtitel nur im Kontext edit und nur für Nutzer heraus, die den Beitrag bearbeiten dürfen.
- Der Docblock am Dateianfang listet alle Endpunkte mit ihren Funktionen und nennt die Zeile, mit der du die Datei aus deinem Plugin lädst:
require_once __DIR__ . '/rest-route.php';.
Beispiel 7: KI-Funktionen per Snippet abschalten
Auf einer Kunden-Website sollen die KI-Funktionen von WordPress 7.0 vorerst aus bleiben.
- Wähle unter Snippets den Eintrag Code Snippets und im Auswahlfeld in der Gruppe WordPress 7.x & Editor den Eintrag Disable AI Features.
- Output format steht auf Must-use plugin file. Der Editor zeigt eine vollständige Datei:
<?php
/**
* Plugin Name: Disable AI features (snippet)
* Description: Turns off the AI features and the built-in AI provider connectors (WordPress 7.0+).
* Requires at least: 7.0
* Requires PHP: 8.3
*/
declare(strict_types=1);
defined( 'ABSPATH' ) || exit;
/**
* Disable AI features (WordPress 7.0+): wp_supports_ai() returns false and the
* built-in AI provider connectors are not registered.
* Site-wide alternative in wp-config.php: define( 'WP_AI_SUPPORT', false );
*/
add_filter( 'wp_supports_ai', '__return_false' );- Lade sie mit Download als
disable-ai.phpherunter und lege sie nachwp-content/mu-plugins/. Must-use-Plugins laden automatisch, ohne dass du sie aktivieren musst. - Lieber in der
wp-config.php? Der Kommentar nennt die Alternative, und der Generator WP-Config schreibt sie dir unter WordPress 7.x alsWP_AI_SUPPORT=false. - Ähnlich funktionieren die übrigen Snippets der Gruppe, etwa Speculative Loading (disable / configure): Standardmäßig schaltet es das Vorladen von Links mit einem einzigen Filter ab; mit Configure mode and eagerness stellst du stattdessen Modus und Eifer ein.
Noch tiefer: das Manual für jeden Generator und jedes Feld im Detail, die Tipps & Tricks für Strategie und Stolperfallen. Ausprobieren kannst du alles direkt im Tool.