Volledig handboek voor het ontwikkelen van WordPress plugins: van nul tot een professionele plugin bouwen

3 minuten leestijd
2026-03-14
2026-06-05
2,054
Ik verdien commissies wanneer je via de onderstaande links winkelt, zonder dat dit extra kosten voor jou met zich meebrengt.

Forbereidende werkzaamheden en opzet van de ontwikkelingsomgeving

Voordat je met het schrijven van code begint, is een professionele en efficiënte ontwikkelomgeving al de halve overwinning. Voor het ontwikkelen van WordPress-plug-ins moet je dus een lokale serveromgeving hebben, zoals XAMPP, Local by Flywheel of DevKinsta. Zorg ervoor dat je omgeving een PHP-versie gebruikt die overeenkomt met of hoger is dan de versie die wordt gebruikt in het eindgebruik (PHP 7.4+ is aan te raden), evenals een MySQL/MariaDB-database.

Vervolgens heb je een kwalitatief goede code-editor nodig. Visual Studio Code, PhpStorm of Sublime Text zijn allemaal uitstekende keuzen; ze bieden ondersteuning voor syntaxis-highlighting, automatische code-completering en mogelijkheden voor het oplossen van fouten (debugging), waardoor je ontwikkelingswerkzaamheden aanzienlijk kunt versnellen.

Het is van belang om de basisstructuur van WordPress plugins goed te begrijpen. Een eenvoudig plugin kan bestaan uit één enkele PHP-fail, maar professionele plugins gebruiken meestal een modulaire structuur. Het belangrijkste eerste stap is om de hoofdplugin-fail te maken. De commentaren in het begin van de hoofdplugin-fail vormen de “identiteitsgegevens” van het plugin en geven WordPress belangrijke informatie over het plugin op, zoals de naam, beschrijving, versie en de ontwikkelaar. Deze informatie moet strikt volgens een specifiek format worden opgesteld.

Aanbevolen leesmateriaal WordPress-pluginontwikkelingsgids voor beginners: bouw je eerste custom-plugin vanaf nul

Als voorbeeld, een persoon met de naam...my-awesome-plugin.phpDe inhoud van het hoofdbestand (header) kan er als volgt uitzien:

UltaHost WordPress-hosting
30-daagse garantie voor het terugbetalen van het geld, onbeperkt bandbreedte- en databestand, gratis DDoS-beveiliging, en een prijsvoordeel van 50% bij een aankoop van 3 jaar.
<?php
/**
 * Plugin Name:       我的超级插件
 * Plugin URI:        https://example.com/my-awesome-plugin
 * Description:       这是一个用于演示的专业WordPress插件。
 * Version:           1.0.0
 * Author:            开发者名
 * Author URI:        https://example.com
 * License:           GPL v2 or later
 * Text Domain:       my-awesome-plugin
 * Domain Path:       /languages
 */

Deze commentaar wordt direct weergegeven op de “Plugins”-pagina in het WordPress-administratiepaneel, en vormt de eerste indruk die gebruikers krijgen van je plugin.

Het begrijpen van het basislevencyclus van een plugin

Het levenscyclus van een plugin begint wanneer WordPress alle hoofdbestanden uit de plugin-map laadt. Zodra je plugin is geactiveerd, uitvoert WordPress de code die zich aan het begin van het hoofdbestand bevindt. Het is daarom een goede praktijk om alle essentiële code in een apart bestand op te slaan, zodat deze gemakkelijk kan worden gecontroleerd en bijgewerkt.ABSPATHIn conditionele statements voor constanten wordt direct toegang verhinderd. De belangrijkste momenten in het levenscykel van een plugin zijn de “activeren”, “deactiveren” en “uninstalleren”-momenten. Hierdoor kun je de vereiste installatie-, schoonmaak- of gegevensverwijderingsacties uitvoeren.

Core architecture en hooksystem

De kern van de kracht en flexibiliteit van WordPress ligt in het systeem van “hooks”. Er zijn twee belangrijke types hooks: actions en filters. Het begrijpen en behendig gebruiken van hooks vormt de basis voor het ontwikkelen van professionele plugins.

Action hooks bieden je de mogelijkheid om je eigen code in te voegen op specifieke momenten tijdens het uitvoeren van WordPress (bijvoorbeeld voordat een artikel wordt gepubliceerd of nadat een thema is geladen).add_action()De functie “monteert” je eigen gedefinieerde functie op deze specifieke momenten. Bijvoorbeeld: je kunt een regel tekst toevoegen aan de voet van de beheerpagina in het backend.

Aanbevolen leesmateriaal WordPress-pluginontwikkeling: van nul tot een zelfgemaakte functionaliteitenplugin

function myplugin_admin_footer_text() {
    echo '<p>Bedankt dat je mijn plug-in gebruikt!</p>';
}
add_action( 'admin_footer', 'myplugin_admin_footer_text' );

De filter-haken bieden je de mogelijkheid om de gegevens aan te passen die worden gecreëerd door WordPress of andere plugins tijdens het verwerkingproces. Je kunt ze dus gebruiken om gegevens te bewerken of te filteren op de manier die je wenst.add_filter()Er zijn functies beschikbaar om tekstinhoud, waarden van opties, resultaten van queries en dergelijke te bewerken. Bijvoorbeeld om de titel van een artikel te veranderen:

function myplugin_modify_title( $title ) {
    return '前缀:' . $title;
}
add_filter( 'the_title', 'myplugin_modify_title' );

Het bouwen van pluginklassen en het organiseren van code

Für plugins met iets complexere functionaliteiten is het beter om objectgerichte programming (OOP) en klassen te gebruiken om de code te organiseren. Dit voorkomt dat functienamen met elkaar in conflict raken en maakt de codestructuur helderder en eenvoudiger te onderhouden. Een typisch klassenmodel voor een plugin kan er als volgt uitzien:

class My_Awesome_Plugin {
    private static $instance = null;

public static function get_instance() {
        if ( null === self::$instance ) {
            self::$instance = new self();
        }
        return self::$instance;
    }

private function __construct() {
        $this->define_constants();
        $this->init_hooks();
    }

private function define_constants() {
        define( 'MY_PLUGIN_VERSION', '1.0.0' );
        define( 'MY_PLUGIN_PATH', plugin_dir_path( __FILE__ ) );
    }

private function init_hooks() {
        add_action( 'init', array( $this, 'load_textdomain' ) );
        add_action( 'admin_menu', array( $this, 'add_admin_menu' ) );
    }

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

public function add_admin_menu() {
        // 添加管理菜单的代码
    }
}
// 启动插件
My_Awesome_Plugin::get_instance();

Deze singleton-patroon zorgt ervoor dat de kernklasse van de plugin maar één keer wordt geinstanceerd.

hosting.com gedeelde hosting
Hoge prestaties met AMD EPYC CPU's, NVMe SSD opslag en LiteSpeed, 24/7 deskundige interne ondersteuning, geavanceerde beveiligingsmaatregelen waaronder SSL, bescherming tegen brute kracht, malware en DDoS, besparingen tot 73%

Een managementinterface maken en gegevens verwerken

De meeste plugins hebben een achtergrondinstellingenpagina nodig voor interactie met de gebruiker. WordPress biedt een uitgebreide API aan voor het maken van menupagina's, submenupagina's en instellingenpagina's, evenals voor het veilig opslaan en verifiëren van gegevens met deze instellingen-API.

Allereerst moet je gebruikmaken van...add_menu_page()add_options_page()Je kunt functies gebruiken om een beheerpagina te registreren. Vervolgens kun je in de callback-functie van deze pagina een HTML-formulier weergeven. Voor het veilige en standaardiserde verwerken van formuliergegevens wordt het gebruik van de “Settings API” van WordPress sterk aanbevolen. De API verzorgt automatisch de verificatie van rechten, het opslaan van onbeveiligde velden en opties.

Een optiepagina bouwen met de setting-API

Het instellen van de API omvat drie kernfuncties:register_setting()Gebruikt voor het registreren van een groep opties.add_settings_section()Om een gebied op een pagina te toevoegen, en…add_settings_field()Verwend om specifieke velden in deze regio toe te voegen.

Aanbevolen leesmateriaal WordPress-pluginontwikkeling vanaf nul: principes, praktijk en geavanceerde technieken

Hieronder staat een versimpeld voorbeeld dat laat zien hoe je een instellingenpagina kunt maken met een tekstveld:

// 在 init 钩子中注册设置
add_action( 'admin_init', 'myplugin_register_settings' );
function myplugin_register_settings() {
    register_setting( 'myplugin_settings_group', 'myplugin_option_name' );
    add_settings_section( 'myplugin_main_section', '主设置', null, 'myplugin-settings-page' );
    add_settings_field( 'myplugin_text_field', '示例文本', 'myplugin_text_field_callback', 'myplugin-settings-page', 'myplugin_main_section' );
}

// 字段的回调函数,输出HTML
function myplugin_text_field_callback() {
    $option = get_option( 'myplugin_option_name' );
    echo '<input type="text" name="myplugin_option_name" value="' . esc_attr( $option ) . '" />';
}

// 在 admin_menu 钩子中添加菜单
add_action( 'admin_menu', 'myplugin_create_menu' );
function myplugin_create_menu() {
    add_options_page( '我的插件设置', '我的插件', 'manage_options', 'myplugin-settings-page', 'myplugin_settings_page_html' );
}

// 设置页面的HTML结构
function myplugin_settings_page_html() {
    if ( ! current_user_can( 'manage_options' ) ) { return; }
    ?&gt;
    <div class="wrap">
        <h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
        <form action="/nl/options.php/" method="post" data-trp-original-action="options.php">
            <?php
            settings_fields( 'myplugin_settings_group' );
            do_settings_sections( 'myplugin-settings-page' );
            submit_button( '保存设置' );
            ?>
        <input type="hidden" name="trp-form-language" value="nl"/></form>
    </div>
    &lt;?php
}

Internationaaliseren van plugins, veiligheid en voorbereiden op publicatie

Een professioneel plugin moet toegankelijk zijn voor gebruikers wereldwijd. Internationalisatie (i18n) betekent dat de tekststringen in het plugin in een vertaibaar formaat worden geplaatst. Hiervoor moet je de mogelijkheden van WordPress gebruiken.__()_e()Gebruik functies zoals `wrap()` om alle tekststrings die worden getoond aan de gebruiker te omhullen, en zorg ervoor dat deze functies op de juiste manier worden ingesteld in de commentaren bovenin het plugin.Text DomainDomain Path

InterServer gedeelde hosting
Shared hosting $2.50 USD per maand, eerste maand $0.1 USD promo code tryinterserver, 461 cloud apps scripts, een klik te installeren.

Veiligheid is van vitaal belang bij het ontwikkelen van plugins. Je moet alle invoer van gebruikers verifiëren, reinigen en ontsnappen (escapen).sanitize_text_field()esc_html()wp_kses_post()intval()Je kunt functies gebruiken om gegevens te verwerken. Tijdens het weergeven van de gegevens in HTML, JavaScript of een URL, moet je ook de corresponderende ontsnippingsfuncties toepassen.esc_attr()esc_js()esc_url()

Voer de finale codebeoordeling en pakking uit.

Voor de release wordt de code grondig getest en bekeken. Er wordt gecontroleerd of de code voldoet aan de coderingsnormen van WordPress en er worden geen PHP-waarschuwingen of -fouten gevonden (instellingen).WP_DEBUGTest dit met de waarde ‘true’. Verwijder alle debug-code en gevoelige informatie uit de commentaren.

Ten slotte moet je de map met de plugins samenvoegen in een ZIP-bestand. Dit ZIP-bestand moet de hoofdplugin en alle andere mappen direct bevatten./assets/includes/languagesEen extra bovenmap is niet nodig; de gebruiker kan de plugin namelijk rechtstreeks installeren via de “Upload Plugin”-functie in het WordPress-beheerpaneel. Creer dus een duidelijke en overzichtelijke structuur voor je plugin.readme.txtDe bestanden (die voldoen aan de formatvereisten van WordPress.org) zijn ook nodig voor het indienen in de officiële directory of voor professionele distributie.

Samenvatting

Een professioneel WordPress-plugin vanaf nul bouwen is een systeemontwerpproces dat vele aspecten omvat, zoals omgevingsinstellingen, architectuurontwerp, API-gebruik, gebruikersinterfaceontwikkeling, beveiliging en internationalisering. Het belangrijkste is om het hook-systeem van WordPress goed te begrijpen en een modulaire, objectgerichte codestructuur te gebruiken om de onderhoudbaarheid te garanderen. Tevens is het van cruciaal belang om strikt te volgen met veiligheidsbest practices en internationaliseringsspecificaties, om het plugin te laten groeien tot een volwassen en professioneel product. Door de stappen in deze handleiding te volgen, kun je een WordPress-plugin bouwen met een duidelijke structuur, stabiele functionaliteit, goede beveiliging en gemakkelijk te gebruiken door gebruikers wereldwijd.

Veelgestelde vragen (FAQ)

Ben je bezig met het ontwikkelen van een WordPress-plugin voor ### en moet je daarbij PHP beheersen?
Ja, PHP is de kernprogrammeringstaal van WordPress. Het is dus essentieel om PHP goed te beheersen, vooral objectgericht programmeren. Daarnaast is het ook belangrijk om kennis te hebben van HTML, CSS, JavaScript en de basis van MySQL/SQL. Dit zorgt ervoor dat je functionaliteiten rijke en gebruiksvriendelijke plugins kunt ontwikkelen.

Hoe voorkom ik dat de namen van de functies in mijn plugin niet in conflict komen met de namen van functies in andere plugins?

De meest effectieve methode is om namenruimtes (Namespaces) te gebruiken (PHP 5.3+ is vereist) of om alle functie- en klassennamen te voorzien van een unieke prefix. Als bijvoorbeeld de afkorting van je plugin is...mapDan kan de naam van de functie worden gelaten als…map_initialize_pluginDe klassennaam mag worden genoemd…Map_Admin_SettingsHet gebruik van objectgericht programmeren en het opslaan van code in klassen kan ook de verontreiniging van het globale namenspace aanzienlijk verminderen.

Wanneer moet ik de database-tabelen voor mijn plugin maken?

De actie om een database-tabel te creëren moet plaatsvinden wanneer het plugin is geactiveerd. Dit kan worden gerealiseerd door middel van een hook.register_activation_hookDeze hook wordt gebruikt om de SQL-opdracht voor het maken van een tabel uit te voeren. Vergeet niet dit te gebruiken.dbDelta()Er is een functie beschikbaar om de CREATE TABLE-sentence uit te voeren. Deze functie is zeer intelligent en kan nieuwe tabellen maken of de structuur van bestaande tabellen updaten, zonder dat de gegevens verloren gaan.

Hoe voeg ik een widget toe aan mijn plugin?

Je kunt de functies van WordPress uitbreiden door gebruik te maken van extra plugins of door zelf code te schrijven.WP_WidgetJe kunt gebruikersdefinieerde widgets maken met behulp van klassen. Je moet een klasse creeren die is afgeleid van een bestaande klasse.WP_WidgetDe klassen en herschrijven deze…__construct()widget()form()update()Method. En vervolgens wordt deze gebruikt.register_widget()De functie is beschikbaar.widgets_initRegistreer je eigen toolklasse in de hook.