Einfach verständliche Anleitung zum Entwickeln von WordPress-Plugins: Erstellen Sie Ihr erstes eigenes Plugin von Grund auf

4-Minuten-Lesung
2026-03-13
2026-06-03
1,885
Ich bekomme eine Provision, wenn du über die untenstehenden Links einkaufst – ohne zusätzliche Kosten für dich.

Grundlagen von WordPress-Plugins und Entwicklungsumgebungen

Bevor Sie mit dem Schreiben von Code beginnen, ist es von entscheidender Bedeutung, die grundlegenden Konzepte von WordPress-Plugins zu verstehen und eine geeignete Entwicklungsumgebung einzurichten. Ein WordPress-Plugin ist im Grunde genommen ein Ordner, der PHP-Code enthält und über die umfassende API von WordPress die Kernfunktionen erweitert. Plugins können so einfach sein, dass sie nur einen kurzen Code hinzufügen, oder so umfangreich, dass sie ein vollständiges Verwaltungssystem erstellen. Der Kerngedanke dabei ist: “Das Kerncode-System nicht ändern”, was sicherstellt, dass Ihre eigenen Funktionen bei einem Update von WordPress nicht verloren gehen.

Für eine effiziente Entwicklung benötigen Sie eine lokale Entwicklungsumgebung. Sie können Tools wie XAMPP, MAMP, Local by Flywheel oder Docker verwenden, um schnell einen Server mit PHP und MySQL aufzusetzen. Anschließend installieren Sie eine aktuelle Version von WordPress. Während des Entwicklungsprozesses empfiehlt es sich,wp-config.phpAktiviert im File.WP_DEBUGDamit Fehler rechtzeitig aufgedeckt werden können.

Das “Herz” eines Plugins ist eine Haupt-PHP-Datei. Die Kommentare am Anfang dieser Datei dienen als „Identifikationsmerkmale“ des Plugins; WordPress nutzt diese Metadaten, um das Plugin im Hintergrund zu erkennen und zu verwalten. Die Kommentare am Anfang einer standardmäßigen Plugin-Hauptdatei sehen wie folgt aus:

Empfohlene Lektüre Was sind WordPress-Themes

<?php
/**
 * Plugin Name: 我的第一个自定义插件
 * Plugin URI:  https://example.com/my-first-plugin
 * Description: 这是一个用于学习插件开发的简单插件,它将在文章末尾添加自定义内容。
 * Version:     1.0.0
 * Author:      开发者名称
 * License:     GPL v2 or later
 * Text Domain: my-first-plugin
 */

Erstellen Sie Ihr erstes Funktions-Plugin.

Lassen Sie uns mit einer praktischen Funktion beginnen: Am Ende des Inhalts jeder Artikelseite auf der Website wird automatisch ein benutzerdefinierter Text hinzugefügt. Dieses Beispiel wird den gesamten Kernprozess der Plugin-Entwicklung durchziehen.

UltaHost – WordPress-Hosting-Anbieter
30-tägige Geld-zurück-Garantie, unbegrenztes Bandbreiten- und Datenbankvolumen, kostenlose DDoS-Schutzmaßnahmen sowie ein Rabatt von 501 auf 4 Terabyte bei einer Kaufdauer von 3 Jahren.

Hauptdatei des Plugins und Initialisierung

Zunächst einmal: In WordPress…wp-content/pluginsErstellen Sie einen neuen Ordner im Verzeichnis, z. B.my-first-pluginIn diesem Ordner erstellen Sie die Haupt-PHP-Datei; sie kann beispielsweise „main.php“ genannt werden.my-first-plugin.phpKopieren Sie den oben genannten Kopfkommentarcode hinein.

Als Nächstes benötigen wir eine sichere Methode, um den Initialisierungscode des Plugins auszuführen. Die beste Praxis besteht darin, alle Funktionen in einer Klasse zu verpacken oder Funktionen innerhalb von Namensräumen zu verwenden. Hier verwenden wir eine einfache Klasse, um den Code zu organisieren. Fügen Sie nach den Kopfkommentaren im Hauptfile die folgende Klassendefinition hinzu:

if ( ! defined( 'ABSPATH' ) ) {
	exit; // 防止直接访问文件
}

class My_First_Plugin {
    public function __construct() {
        // 构造函数,在这里挂载钩子
    }
}

// 初始化插件
new My_First_Plugin();

if ( ! defined( ‘ABSPATH’ ) )Dieser Code entspricht den Sicherheitsstandards für die Entwicklung von WordPress-Plugins und dient dazu, zu verhindern, dass Benutzer Ihre Plugin-Dateien direkt über die URL aufrufen können.

Mit Hilfe von „Hooken“ wird Inhalt in die Fußzeile der Artikelseite eingefügt.

Die Plugin-Architektur von WordPress basiert auf einem “Hook”-System, das in Aktionen (Actions) und Filtern (Filters) unterteilt ist. Aktionen ermöglichen es Ihnen, Code zu bestimmten Zeitpunkten auszuführen, während Filter es Ihnen ermöglichen, Daten zu modifizieren.

Empfohlene Lektüre Die ultimative Anleitung zur Optimierung der Leistung von WordPress-Webseiten: Von der Grundkonfiguration bis zur umfassenden Analyse von Caching-Plugins

Unser Ziel ist es, Text nach dem Inhalt des Artikels hinzuzufügen – dies ist ein Prozess der “Filterung” des Inhalts. Daher werden wir dies verwenden.the_contentDieser Filter: Ändern Sie den Konstruktor und die Methoden in der Klasse wie folgt:

class My_First_Plugin {
    public function __construct() {
        // 将自定义方法挂载到‘the_content’过滤器上
        add_filter( 'the_content', array( $this, 'add_footer_to_content' ) );
    }

/**
     * 在文章内容后添加自定义页脚
     *
     * @param string $content 原始文章内容。
     * @return string 修改后的文章内容。
     */
    public function add_footer_to_content( $content ) {
        // 确保只在主循环的单篇文章页面显示
        if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
            $custom_footer = '<div class="my-plugin-footer"><p>Vielen Dank für das Lesen dieses Artikels! Er wurde von „Mein erster Plugin“ erstellt.</p></div>';
            $content .= $custom_footer;
        }
        return $content;
    }
}

add_filter()Die Funktion verwendet eine Klassenmethode.add_footer_to_contentRegistrieren Sie sich bei…the_contentFilter: Wenn WordPress bereit ist, den Inhalt eines Artikels auszugeben, ruft es unsere Methode auf und übermittelt uns den ursprünglichen Inhalt. Durch bedingte Abfragen stellen wir sicher, dass der Fußbereich nur auf der jeweiligen Artikelseite hinzugefügt wird – nicht auf der Startseite oder den Archivseiten. Anschließend fügen wir die benutzerdefinierte HTML-Codezeile zum Inhalt hinzu und geben das Ergebnis zurück.

Für das Plugin werden Optionen für eine Verwaltungsoberfläche hinzugefügt.

Ein ausgereiftes Plugin ermöglicht es in der Regel, die Einstellungen im Hintergrund vorzunehmen. Wir werden für den gerade erstellten Fußertext eine einfache Einstellmöglichkeit hinzufügen, damit die Benutzer den angezeigten Text selbst definieren können.

hosting.com Shared Hosting
Hohe Leistung mit AMD EPYC-CPUs, NVMe-SSD-Speicher und LiteSpeed, fachkundiger Inhouse-Support rund um die Uhr, erweiterte Sicherheitsmaßnahmen einschließlich SSL, Brute-Force-, Malware- und DDoS-Schutz, Einsparungen von bis zu 73%

Erstellen Sie eine Seite für das Menü zur Anpassung der Einstellungen.

Wir müssen eine Unterseite im Menü “Einstellungen” im WordPress-Administrationsbereich hinzufügen. Dafür müssen wir…add_options_page()Eine Funktion wird in der Regel an einer bestimmten Stelle („Mount-Point“) angebunden oder „gemountet“, um von anderen Programmen oder Modulen genutzt zu werden.admin_menuAuf dem Action-Hook.

Zunächst wird in der Plugin-Klasse eine neue Methode hinzugefügt, um Menüs und Seiten zu registrieren:

class My_First_Plugin {
    // ... 之前的构造函数和方法 ...

public function __construct() {
        add_filter( 'the_content', array( $this, 'add_footer_to_content' ) );
        // 挂载后台管理菜单
        add_action( 'admin_menu', array( $this, 'add_admin_menu' ) );
        // 挂载初始化设置选项
        add_action( 'admin_init', array( $this, 'settings_init' ) );
    }

public function add_admin_menu() {
        add_options_page(
            '我的第一个插件设置', // 页面标题
            '自定义页脚设置',     // 菜单标题
            'manage_options',     // 所需权限
            'my-first-plugin',    // 菜单slug
            array( $this, 'options_page_html' ) // 回调函数,用于输出页面HTML
        );
    }
}

Registrierungs-Einstellungsfelder und die dargestellte Seite

Als Nächstes müssen wir die WordPress Settings API verwenden, um Optionen sicher zu registrieren, zu speichern und zu verifizieren. Dies beinhaltet…register_setting(), add_settings_section()undadd_settings_field()Zum Beispiel können Sie die folgenden Funktionen verwenden:

Empfohlene Lektüre Was ist WooCommerce? Ein Artikel erklärt seine Kernfunktionen und Anwendungsszenarien.

public function settings_init() {
    // 注册一个设置选项组
    register_setting( 'my_first_plugin_settings', 'my_first_plugin_options' );

// 在页面中添加一个设置区域
    add_settings_section(
        'my_first_plugin_section',
        '页脚内容配置',
        array( $this, 'section_callback' ),
        'my-first-plugin'
    );

// 向该区域添加一个字段
    add_settings_field(
        'footer_text',
        '页脚显示文本',
        array( $this, 'footer_text_field_render' ),
        'my-first-plugin',
        'my_first_plugin_section'
    );
}

public function section_callback() {
    echo '<p>Hier konfigurieren Sie den Textinhalt, der am Ende des Artikels angezeigt wird.</p>';
}

public function footer_text_field_render() {
    $options = get_option( 'my_first_plugin_options' );
    $value = $options['footer_text'] ?? '感谢阅读本文!由【我的第一个插件】生成。'; // 默认值
    ?&gt;
    <input type='text' name='my_first_plugin_options[footer_text]' value='<?php echo esc_attr( $value ); ?>' style='width: 400px;'>
    <p class="description">Einfache HTML-Tags werden unterstützt, wie zum Beispiel… <strong>, <em>, <a>。</p>
    <?php
}

public function options_page_html() {
    // 检查用户权限
    if ( ! current_user_can( 'manage_options' ) ) {
        return;
    }
    ?>
    <div class="wrap">
        <h1>\n</h1>
        <form action='/de/options.php/' method='post' data-trp-original-action="options.php">
            <?php
            settings_fields( 'my_first_plugin_settings' );
            do_settings_sections( 'my-first-plugin' );
            submit_button();
            ?>
        <input type="hidden" name="trp-form-language" value="de"/></form>
    </div>
    &lt;?php
}

Zum Schluss wird die Funktion zur Ausgabe der Frontend-Daten geändert.add_footer_to_contentLassen Sie es den Text aus den Datenbankoptionen lesen:

public function add_footer_to_content( $content ) {
    if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
        $options = get_option( 'my_first_plugin_options' );
        $footer_text = $options['footer_text'] ?? '感谢阅读本文!由【我的第一个插件】生成。';
        $custom_footer = '<div class="my-plugin-footer"><p>'. wp_kses_post( $Footer_text ) . '</p></div>';
        $content .= $custom_footer;
    }
    return $content;
}

wp_kses_post()Die Funktion stellt sicher, dass in dem von den Benutzern eingegebenen Text nur sichere HTML-Tags enthalten sind – dies ist eine wichtige Sicherheitsmaßnahme.

InterServer Shared Hosting
Shared Hosting $2.50 USD pro Monat, erster Monat $0.1 USD Promo-Code tryinterserver, 461 Cloud-Apps Skripte, ein Klick installieren.

Plugin-Internationalisierung und Best Practices

Damit Plugins von Nutzern auf der ganzen Welt genutzt werden können, ist die Internationalisierung (i18n) ein unerlässlicher Schritt. WordPress verwendet das GNU gettext-Framework zur Umsetzung der Übersetzungen.

Textfeld und Übersetzungsfunktion

Zuerst stellen Sie sicher, dass in den Kommentaren am Anfang Ihres Plugins die entsprechenden Definitionen vorhanden sind.Text DomainZum Beispielmy-first-pluginAnschließend werden alle in dem Plugin zu übersetzenden Zeichenketten mit einer bestimmten Funktion umhüllt.

Ändern Sie unseren vorherigen Code, um die Übersetzungsfunktion für ausgegebene Texte hinzuzufügen:

// 在构造函数中加载翻译文件
public function __construct() {
    // ... 其他钩子 ...
    add_action( 'plugins_loaded', array( $this, 'load_textdomain' ) );
}

public function load_textdomain() {
    load_plugin_textdomain(
        'my-first-plugin',
        false,
        dirname( plugin_basename( __FILE__ ) ) . '/languages/'
    );
}

// 修改设置页面的字符串
public function section_callback() {
    echo '<p>' . esc_html__( '在这里配置显示在文章末尾的文本内容。', 'my-first-plugin' ) . '</p>';
}

public function footer_text_field_render() {
    $options = get_option( 'my_first_plugin_options' );
    $value = $options['footer_text'] ?? __( '感谢阅读本文!由【我的第一个插件】生成。', 'my-first-plugin' );
    ?&gt;
    <input type='text' name='my_first_plugin_options[footer_text]' value='<?php echo esc_attr( $value ); ?>' style='width: 400px;'>
    <p class="description">&lt;?php esc_html_e( &#039;支持简单的HTML标签,如 <strong>, <em>, <a>。', 'my-first-plugin' ); ?&gt;</p>
    &lt;?php
}

// 注意:用户在前台输入的“页脚文本”本身通常不需要翻译,因为它是由管理员设置的具体内容。

__()Dient zum Übersetzen und Zurückgeben von Zeichenketten.esc_html__()Dient zum Übersetzen und Entschlüsseln von HTML-Ausgabe._e()Dient zum Übersetzen und direkten Ausgeben von Zeichenketten. Der zweite Parameter der Funktion ist das Textfeld, welches mit dem von der Erweiterung definierten Textfeld übereinstimmen muss.

Sicherheit, Leistung und Codeorganisation

Neben der Internationalisierung müssen auch die folgenden Best Practices befolgt werden:
1. Sicherheit: Alle von den Benutzern eingegebenen Daten werden überprüft, gereinigt und entsprechend kodiert („escaped“).sanitize_text_field(), esc_html(), wp_kses_post()Funktionen wie „warten“ usw. werden verwendet.wp_nonce_field()Schutz vor CSRF-Angriffen.
2. Leistung: Nutzen Sie Haken sinnvoll, um unnötige Datenbankabfragen bei jedem Seitenladen zu vermeiden. Es kann sinnvoll sein, die ausgegebenen Ergebnisse vorübergehend („transient“) zu speichern (z. B. in einem Cache).
3. Codeorganisation: Bei komplexen Plugins sollten die Dateien nach funktionalen Modulen aufgeteilt werden. Die Hauptdatei ist für die Steuerung zuständig, während Klassen und Methoden in den entsprechenden Modulen abgelegt werden.includes/Verzeichnis: Frontend-Ressourcen (CSS, JS) werden hier abgelegt.assets/Katalog.
4. Deinstallation und Reinigung: Falls Ihre Erweiterung Datenbanktabellen oder Einstellungen erstellt hat, sollte eine Deinstallationsfunktion vorhanden sein, um diese Daten zu löschen. Dies kann über eine separate Funktion erfolgen…uninstall.phpDies wird durch die Datei erreicht.

Zusammenfassungen

Mit diesem Tutorial haben wir den gesamten Entwicklungsprozess für ein benutzerdefiniertes WordPress-Plugin mit grundlegenden Funktionen abgeschlossen: Von der Einrichtung der Umgebung, der Erstellung des Plugin-Rahmens, der Hinzufügung von Funktionen mithilfe des Hook-Systems über die Implementierung der Backend-Einstellungsseite bis hin zu Aspekten der Internationalisierung und Sicherheit. Du hast gelernt, wie man so ein Plugin erstellt und verwendet.add_filterundadd_actionInteraktion mit dem WordPress-Kern: Wie verwendet man die Settings-API, um zuverlässige Optionenseiten zu erstellen – und wie geht man dabei vor?load_plugin_textdomainStellen Sie sicher, dass das Plugin mehrere Sprachen unterstützt. Denken Sie daran: Bei der Entwicklung von Plugins sind Sicherheit, Wartbarkeit und die Benutzererfahrung die wichtigsten Aspekte, die berücksichtigt werden müssen. Auf dieser Grundlage können Sie weitere fortgeschrittene Funktionen wie benutzerdefinierte Artikeltypen, Metadaten, Shortcodes sowie REST-API-Endpunkte erkunden und so eine leistungsfähigere Erweiterung für WordPress erstellen.

FAQ Häufig gestellte Fragen

Warum wird mein Plugin nicht im Hintergrundmenü angezeigt?

Das ist in der Regel auf Probleme mit den Berechtigungen oder Fehler im Code zurückzuführen. Zuerst stellen Sie bitte sicher, dass Ihre…add_options_pageoderadd_menu_pageDie in der Funktion angegebenen Berechtigungsparameter (z. B.)‘manage_options’Dies entspricht der Rolle des Benutzers, unter der Sie sich derzeit angemeldet haben. Zweitens sollten Sie überprüfen…admin_menuStellt sicher, dass der Hook korrekt eingebunden wurde und dass die Rückruffunktion keine Syntaxfehler aufweist, die dazu führen könnten, dass die PHP-Ausführung unterbrochen wird. Die einfachste Methode besteht darin, dies im WordPress-Backend zu aktivieren.WP_DEBUGÜberprüfen Sie, ob relevante Fehlermeldungen angezeigt werden.

Wie fügt man benutzerdefinierte CSS- und JavaScript-Dateien zu einem Plugin hinzu?

Die richtige Vorgehensweise besteht darin, … zu verwenden.wp_enqueue_style()undwp_enqueue_script()Funktionen: Für Frontend-Ressourcen sollten diese entsprechend montiert werden.wp_enqueue_scriptsAuf den Aktionshaken; für Ressourcen im Management-Backend werden sie montiert.admin_enqueue_scriptsAuf dem Haken.

In Ihrer Plugin-Klasse können Sie die folgende Methode hinzufügen:

public function enqueue_frontend_assets() {
    wp_enqueue_style( ‘my-plugin-style’, plugin_dir_url( __FILE__ ) . ‘assets/css/style.css’, array(), ‘1.0.0’ );
}

Und dann wird dies im Konstruktor durchgeführt.add_action( ‘wp_enqueue_scripts’, array( $this, ‘enqueue_frontend_assets’ ) );Registrieren Sie sich. Dadurch wird sichergestellt, dass die Abhängigkeitsverwaltung korrekt funktioniert und es zu keinen Konflikten mit anderen Plugins oder Themes kommt.

Wie kann ich die von mir erstellten Datenoptionen löschen, wenn ein Benutzer den Plugin deinstalliert?

WordPress bietet zwei Hauptmethoden. Die erste besteht darin, einen Deinstall-Hook zu registrieren – dies wird jedoch in objektorientierten Plugins nicht häufig verwendet. Die empfohlene und standardmäßigere Methode ist es, ein neues Plugin zu erstellen.uninstall.phpDie Datei befindet sich auf derselben Ebene wie Ihre Haupt-Plugin-Datei.

Wenn ein Benutzer ein Plugin über die WordPress-Backend-Verwaltung entfernt, überprüft und führt WordPress automatisch die entsprechenden Aktionen aus.uninstall.phpIn diesem Fall müssen Sie zunächst überprüfen…WP_UNINSTALL_PLUGINWurden die Konstanten definiert, werden anschließend alle von dem Plugin erstellten Optionen sowie benutzerdefinierte Datenbanktabellen sicher gelöscht.

if ( ! defined( ‘WP_UNINSTALL_PLUGIN’ ) ) {
    exit;
}
delete_option( ‘my_first_plugin_options’ );
// 如果有自定义表:$wpdb->query( “DROP TABLE IF EXISTS {$wpdb->prefix}my_table” );

Wie kann mein Plugin mit mehreren Versionen von WordPress kompatibel sein?

Der Schlüssel zur Beibehaltung der Kompatibilität besteht darin, neue Funktionen und Features mit Vorsicht einzusetzen und für ältere Versionen Ersatzlösungen bereitzustellen. Vor dem Aufruf von Funktionen, die möglicherweise erst in der neuen Version verfügbar sind, sollte man daher sicherstellen, dass diese Funktionen auch in der aktuellen Version funktionieren.function_exists()Überprüfen Sie dies. Zum Beispiel, wenn Sie die Funktionen einsetzen möchten, die mit der Version 5.0 eingeführt wurden…wp_dateFunktionen können Folgendes leisten:

if ( function_exists( ‘wp_date’ ) ) {
    $date = wp_date( get_option( ‘date_format’ ), $timestamp );
} else {
    $date = date_i18n( get_option( ‘date_format’ ), $timestamp );
}

Gleichzeitig sollten in den Kommentaren am Anfang des Plugins sowie in der Readme-Datei die minimal erforderlichen WordPress-Versionen, für die die Tests durchgeführt wurden, klar angegeben werden. Regelmäßige Tests auf älteren WordPress-Versionen sind die beste Methode, um die Kompatibilität zu gewährleisten.