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.

  1. Öffne den WP Code Generator — der Plugin-Generator ist beim Laden aktiv.
  2. Tippe in Plugin Name Book Shelf. Plugin slug wird zu book-shelf, die Text Domain folgt dem Slug, und PHP namespace wird zu BookShelf.
  3. 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.
  4. 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.
  5. Die Ausgabe hat drei Reiter: book-shelf.php, readme.txt und uninstall.php. Die Hauptdatei beginnt so:
book-shelf.php (Auszug)
<?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.

  1. Klick auf ZIP. Du erhältst book-shelf.zip mit dem Ordner book-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.

  1. Wähle unter Hooks & Assets den Generator Hook (Action / Filter).
  2. Tippe in Hook Name save_post. Weil das Tool diesen Hook kennt, stellt es Type auf Action und Accepted Args auf 3.
  3. 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.
  4. Mit aktivem Typed parameters (known hooks) stehen in der Signatur die echten Typen aus der WordPress-Dokumentation:
hooks.php
<?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 );
  1. 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.

  1. 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.
  2. Tippe in Theme Name Book Shelf Theme und 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.
  3. Die Ausgabe hat jetzt 15 Reiter. style.css bekommt den Header samt vorgeschlagener Tags:
style.css
/*
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.

  1. ZIP liefert book-shelf-theme.zip mit allen 15 Dateien im Ordner book-shelf-theme/ — von templates/index.html bis patterns/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.

  1. Wähle unter APIs den Generator Abilities API.
  2. Setze Namespace auf book-shelf. Function Prefix und Text Domain leiten sich daraus ab. Alles andere bleibt auf den Voreinstellungen: Ability get-recent-posts, Eingabe count (1 bis 20, Standard 5) und post_type (post oder page), Ausgabe eine Liste mit id, title und link, Recht read, Annotation readonly.
  3. 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:
abilities.php (Auszug)
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' );
  1. 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 gibt id, title und link zurück. Das Tool castet dabei jeden Eingabewert selbst, weil das Schema Werte zwar prüft, aber nicht umwandelt.
  2. 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.

  1. Wähle unter Blocks & Editor den Generator Block Bindings. Die Voreinstellungen passen fast schon: Plugin my-bindings, Quelle my-bindings/book-data, die Felder isbn, subtitle und buy_url mit passenden Sanitizern.
  2. Für eigene Beitragstypen änderst du Post Types; sie brauchen show_in_rest und müssen custom-fields unterstützen, sonst kann der Editor die Werte weder lesen noch speichern.
  3. Die Ausgabe hat vier Reiter: das Plugin my-bindings.php, assets/editor.js und zwei HTML-Dateien mit Beispiel-Markup. block-markup.html zeigt, wie ein Absatz an ein Feld gebunden wird:
block-markup.html (Auszug)
<!-- wp:paragraph {"metadata":{"bindings":{"content":{"source":"my-bindings/book-data","args":{"field":"isbn"}}}}} -->
<p>Fallback ISBN</p>
<!-- /wp:paragraph -->
  1. Im PHP-Teil liest die Quelle den Wert erst, nachdem sie dieselben Sichtbarkeitsprüfungen wie die Core-Quelle core/post-meta bestanden hat — ein Entwurf, ein privater oder ein passwortgeschützter Beitrag verrät seine Meta-Werte also nicht an Besucher ohne Leserecht. Liefert sie null, bleibt der Fallback-Text im Block stehen.
  2. ZIP liefert my-bindings.zip mit 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.

  1. Wähle unter APIs den Generator REST Route. Namespace my-plugin/v1, Route /books und das ID segment sind voreingestellt.
  2. Aktiviere zusätzlich zu GET die Methoden POST, POST, PUT, PATCH (EDITABLE) und DELETE, und schalte Real CRUD ein.
  3. 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 title vom Typ string mit der Beschreibung „Title of the book.“ hinzu, beschränkt auf POST und EDIT — die Warnung verschwindet.
  4. Der erzeugte Code registriert zwei Routen und prüft je Methode genau das passende Recht:
rest-route.php (Auszug, Einrückung verringert)
[
    '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.

  1. 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.

  1. Wähle unter Snippets den Eintrag Code Snippets und im Auswahlfeld in der Gruppe WordPress 7.x & Editor den Eintrag Disable AI Features.
  2. Output format steht auf Must-use plugin file. Der Editor zeigt eine vollständige Datei:
disable-ai.php
<?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' );
  1. Lade sie mit Download als disable-ai.php herunter und lege sie nach wp-content/mu-plugins/. Must-use-Plugins laden automatisch, ohne dass du sie aktivieren musst.
  2. Lieber in der wp-config.php? Der Kommentar nennt die Alternative, und der Generator WP-Config schreibt sie dir unter WordPress 7.x als WP_AI_SUPPORT = false.
  3. Ä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.