Van nul naar één: Een volledig handboek en praktische tutorial voor het ontwikkelen van WordPress plugins

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

Waarom is het nodig om je eigen WordPress-plugin te ontwikkelen?

De kernfuncties van WordPress zijn zeer krachtig, maar om aan de steeds veranderende behoeften van bedrijven te voldoen, zijn de vooraf geinstalleerde functies vaak onvoldoende. Het ontwikkelen van aangepaste plugins biedt de mogelijkheid om unieke functies toe te voegen aan je website zonder de kernbestanden van WordPress te hoeven bewerken. Dit zorgt voor de stabiliteit en upgradability van je website. Of je nu een simpel contactformulier wilt maken, een complex productpresentatie-systeem of een tool dat is geïntegreerd met derde-partij-API's: plugins zijn de flexibelste en meest standaardiserde manier om dit te realiseren.

Door plugins te ontwikkelen, kun je functies modulariseren, waardoor deze gemakkelijk kunnen worden hergebruikt en verspreid tussen verschillende websites. Dit niet alleen verbetert de ontwikkelingsefficiëntie, maar is ook een uitstekende manier om dieper in de architectuur van WordPress en PHP-programmering te duiken. Als je het ontwikkelen van plugins onder de knie hebt, kun je iedere creatieve idee omzetten in echte functionaliteiten voor je website.

Maak je eerste WordPress-plugin

Een WordPress-plugin maken begint met een eenvoudige map en een hoofdbestand. Alle plugins worden opgeslagen in deze map./wp-content/plugins/Catalogus.

Aanbevolen leesmateriaal WordPress-themaontwikkeling: Een gids voor beginners om van nul een custom thema te maken

Maak een hoofdbestand voor het plugin.

Het hoofdbestand van een plugin vormt het ‘hart’ van de plugin en bevat de meta-informatie van de plugin. Allereerst…/wp-content/plugins/Maak een nieuwe map in de directory, bijvoorbeeldmy-first-pluginVervolgens maak je in die map de hoofd-PHP-fail, die meestal dezelfde naam heeft als de map:my-first-plugin.php

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.

In het begin van deze hoofdfile moet je een standaardcommentaar voor het plugin toevoegen, waarmee je WordPress vertelt wat je plugin doet. Dit is belangrijk, zodat WordPress het plugin kan herkennen en het kan weergeven in de beheeromgeving.

<?php
/**
 * Plugin Name:       我的第一个插件
 * Plugin URI:        https://example.com/my-first-plugin
 * Description:       这是一个用于学习WordPress插件开发的示例插件。
 * Version:           1.0.0
 * Author:            你的名字
 * Author URI:        https://example.com
 * License:           GPL v2 or later
 * Text Domain:       my-first-plugin
 */

Na het opslaan van het bestand, log in bij het WordPress-administratiepaneel en ga naar de pagina “Plug-ins”. Hier moet je “Mijn eerste plugin” zien staan in de lijst met plug-ins. Activeer deze plugin. Hoewel deze nog geen functies heeft, is het basisframe van je eerste plugin nu klaar.

Basic functionalities worden toegevoegd aan het plugin.

Een plugin zonder functionaliteit is zinloos. Laten we er een eenvoudige functionaliteit toevoegen: een regel met aangepaste tekst in de voetnoot van de website. Hiervoor moeten we gebruikmaken van het “hook”-systeem van WordPress.

We kunnen dit gebruiken.wp_footerDeze actie-hook bevindt zich in het hoofdbestand van het plugin.my-first-plugin.phpUnder the header comment, add the following code:

Aanbevolen leesmateriaal Hoe je een kwalitatief WordPress-plugin ontwikkelt: een gids van het begin tot de voltooiing

// 在网站页脚输出自定义文本
function my_first_plugin_add_footer_text() {
    echo '<p style="text-align: center; color: #666;">Fijn dat je mijn eerste WordPress-plugin hebt gebruikt!</p>';
}
add_action( 'wp_footer', 'my_first_plugin_add_footer_text' );

Na het opslaan van het bestand, moet je je website-opgave opnieuw laden (refreshen) en naar de onderste helft van de pagina scrollen. Daar moet je de toegevoegde tekst zien. Met dit simpele voorbeeld heb je de kernprincipes van pluginontwikkeling in praktijk gebracht: functies definiëren en deze vervolgens gebruiken in je website.add_action()add_filter()Mounteer dit op een specifiek hook in WordPress.

De kernmechanismen van WordPress-plug-ins begrijpen: hooks en filters

De flexibiliteit en uitbreidbaarheid van WordPress is in grootte deel te danken aan het systeem van “hooks”. Hooks bieden ontwikkelaars de mogelijkheid om hun eigen code op bepaalde momenten tijdens het uitvoeren van de kerncode van WordPress te toevoegen. Er zijn twee soorten hooks: Actions en Filters.

Action hooks worden uitgevoerd wanneer een bepaald evenement plaatsvindt, bijvoorbeeld wanneer een artikel wordt gepubliceerd of de voetnoot wordt geladen. Ze verwachten geen teruggegeven waarde en worden voornamelijk gebruikt om een bepaalde actie uit te voeren. Dat hebben we eerder gebruikt.wp_footerHet is gewoon een actie-hook.

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%

De filter-haken worden gebruikt om gegevens te bewerken. Ze bieden de mogelijkheid om gegevens te veranderen voordat deze worden gebruikt (bijvoorbeeld worden opgeslagen in een database of weergegeven in een browser). De filterfunctie ontvangt een waarde en moet de gewijzigde waarde teruggeven.

Maak gebruik van action-hooks om een beheermenu toe te voegen.

Een goed uitgerust plugin moet meestal een eigen menu-pagina toevoegen aan de sidebar in het WordPress-beheerpaneel. Dit kan worden gerealiseerd door...admin_menuDeze actie wordt gerealiseerd met behulp van een action hook.

// 在后台管理菜单中添加一个新页面
function my_first_plugin_add_admin_menu() {
    add_menu_page(
        '我的插件设置',          // 页面标题
        '我的插件',             // 菜单标题
        'manage_options',       // 所需权限
        'my-first-plugin',      // 菜单slug
        'my_first_plugin_settings_page', // 显示页面内容的回调函数
        'dashicons-admin-generic', // 图标(可选)
        80                      // 菜单位置
    );
}
add_action( 'admin_menu', 'my_first_plugin_add_admin_menu' );

// 定义设置页面的内容
function my_first_plugin_settings_page() {
    ?&gt;
    <div class="wrap">
        <h1>Mijn eerste plugin-instellingen</h1>
        <p>Welkom op de instellingenpagina van het plugin. Hier kunnen in de toekomst verschillende configuratieopties worden toegevoegd.</p>
        <form method="post" action="/nl/options.php/" data-trp-original-action="options.php">
            <!-- 未来可以在这里添加设置字段 -->
            <?php submit_button(); ?>
        <input type="hidden" name="trp-form-language" value="nl"/></form>
    </div>
    &lt;?php
}

Het inhoud van een artikel bewerken met filters

Stel dat we willen dat er automatisch een copyright-verklaring wordt toegevoegd aan het eind van elke artikel, met behulp van een filterhook.the_contentDat kwam goed van pas.

Aanbevolen leesmateriaal Hoe je een kwalitatief WordPress-plugin ontwikkelt: van het begin tot de volmaaktheid

// 在文章内容末尾自动添加版权声明
function my_first_plugin_add_copyright( $content ) {
    // 确保只在主循环的单篇文章页面执行
    if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
        $copyright_text = '<div class="plugin-copyright"><p><em>De auteursrechten van dit artikel berusten bij deze website. Wanneer u het artikel wilt reproduceren, moet u de bronvermelding opnemen.</em></p></div>';
        $content .= $copyright_text;
    }
    return $content; // 必须返回修改后的内容
}
add_filter( 'the_content', 'my_first_plugin_add_copyright' );

Sicherheid van plugins en beste praktijken

Tijdens het ontwikkelen van plugins is veiligheid een belangrijke overweging. Een onveilige plugin kan een zwakke plek in het hele website worden.

Datavalidatie, -reiniging en -ontsnapping

Vertrouw nooit op invoer van gebruikers of externe data. Alles wat van buitenkomt, moet met voorzichtigheid worden behandeld.$_GET$_POST$_COOKIEOf de gegevens uit de database moeten worden gevalideerd en gereinigd voordat ze worden gebruikt.

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.
  • Validatie: Het controleren of gegevens overeenkomen met het verwachte formaat (bijvoorbeeld of het een e-mailadres of een cijfer is). Dit kan worden gebruikt om...filter_var()Function ofsanitize_*()Reeks van functies.
  • Sanitization: Het verwijderen van ongeoordeelde of onveilige karakters uit gegevens. Bijvoorbeeld, wanneer het om tekstinvoer gaat, wordt dit gebruikt om ongepaste of potentieel schadelijke inhoud te elimineren.sanitize_text_field()
  • Escaping: Wanneer je gegevens naar HTML, JavaScript of een URL stuurt, moet je ervoor zorgen dat speciale karakters correct worden gecodeerd, om XSS-aanvallen te voorkomen.esc_html()esc_js()esc_url()En andere functies.
// 不安全的做法
echo $_GET['user_input'];

// 安全的做法:先清理,再转义
$safe_input = sanitize_text_field( $_GET['user_input'] );
echo esc_html( $safe_input );

Het gebruik van WordPress zonder de CE (Content Encryption) en zonder toegangscontrole

Wanneer je formulieren indient (met name wanneer dit betrekking heeft op het bewerken of verwijderen van gegevens), moet je zeker gebruikmaken van…wp_nonce(Een eenmalig nummer) wordt gebruikt om de legitiemheid van de verzoek te controleren en om CSRF-aanvallen te voorkomen. Daarnaast moet worden gecontroleerd of de huidige gebruiker de toegang heeft om deze actie uit te voeren.

// 在处理表单提交时检查权限和nonce
function my_first_plugin_handle_form_submit() {
    // 1. 检查nonce
    if ( ! isset( $_POST['my_plugin_nonce'] ) || ! wp_verify_nonce( $_POST['my_plugin_nonce'], 'my_plugin_action' ) ) {
        wp_die( '安全校验失败!' );
    }

// 2. 检查用户权限
    if ( ! current_user_can( 'manage_options' ) ) {
        wp_die( '权限不足!' );
    }

// 3. 清理和保存数据(此处省略)
    // ...
}

Je bent klaar om je plugin te publiceren.

Als de functies van het plugin volledig zijn uitgewerkt en het plugin de testen heeft doorstaan, kun je erover nadenken om het te delen met andere WordPress-gebruikers.

Internationalisatie en lokalisatie voorbereiden

Om zodat gebruikers uit todo het wereld je plugin kunnen gebruiken, moet je voorbereiden op internationalisering (i18n). Dat betekent dat alle teksten die worden getoond aan de gebruiker met de vertaalfuncties van WordPress moeten worden omgezet. We hebben dit al aangegeven in de commentaren bovenin het plugin.Text Domain: my-first-plugin

In de code wordt dit gebruikt:__()Een functie die een string vertaalt en deze teruggeeft._e()Vertaal de tekst 'Function to translate and output directly.' naar Nederlands: 'Een functie om te vertalen en direct uit te geven.'

// 将之前页脚输出的文本改为可翻译
function my_first_plugin_add_footer_text_i18n() {
    $text = __( '感谢使用我的第一个WordPress插件!', 'my-first-plugin' );
    echo '<p style="text-align: center; color: #666;">'`. esc_html($text)`.'</p>';
}
add_action( 'wp_footer', 'my_first_plugin_add_footer_text_i18n' );

Daarna kunt u tools gebruiken zoals Poedit om te creëren..potTemplatebestanden: de vertaler kan hiermee verschillende talenversies van een document maken..po.moHet document.

Verbeter de metadata van de plugin en de readme-bestand.

Als je van plan bent je plugin in te dienen bij het officiële WordPress-plugin-verzeichnis, moet je een plugin maken die voldoet aan de vereisten.readme.txtDeze bestand gebruikt een specifiek Markdown-format en is bedoeld om op WordPress.org de beschrijving van je plugin, instructies voor het installeren, screenshots, update-logboeken en andere informatie te weergeven.

Vergeet ook niet de meta-informatie in het hoofddeel van het hoofdbestand van je plugin te updaten en te controleren of deze volledig en nauwkeurig is, met name de versienummer. Houd je aan semantische versiebeheermethoden (bijvoorbeeld…).MAJOR.MINOR.PATCHHet is een goede gewoonte om…

Samenvatting

Het ontwikkelen van WordPress-plug-ins is een proces waarbij ideeën worden omgezet in krachtige functies voor een website. We begonnen met het maken van een basisplug-in-bestand en leerden stap voor stap hoe we het sterke hook-systeem van WordPress (actions en filters) kunnen gebruiken om code in te voegen, achtergrondmenuden te toevoegen en inhoud te bewerken. Het belangrijkste is dat we diep hebben ingegaan op de essentiële veiligheidsmaatregelen bij het ontwikkelen van plug-ins, zoals datavalidatie, schoonmaken van invoer, het juist gebruiken van speciale tekens (escaping) en het controleren van toegangrechten. Dit zijn de fundamenten voor een betrouwbare plug-in die niet kan worden misbruikt.

Ten slotte hebben we een blik geworpen op de volgende stappen in het ontwikkelen van plugins: de voorbereiding op internationalisering en de publicatieprocedure. Door deze kernconcepten en -vaardigheden te beheersen, beschik je over de mogelijkheid om maatgeschikte oplossingen te bouwen voor elk WordPress-project. Vergeet niet dat de beste manier om te leren is door te praktiseren: begin met een simpel vereiste en ontwikkel de functionaliteiten van je plugin steeds verder.

Veelgestelde vragen (FAQ)

Welke basiskennis is vereist om een WordPress-plugin te ontwikkelen?

Om een WordPress-plugin te ontwikkelen, zijn basiskennis van de PHP-programmeringstaal vereist, aangezien de code van plugins voornamelijk in PHP is geschreven. Daarnaast is een begrip van HTML, CSS en JavaScript nodig voor het bouwen van de front-end-omgeving en interacties met de gebruiker. Het belangrijkste is om de basisarchitectuur van WordPress te begrijpen, met name het systeem van hooks (Hooksystem), waarmee plugins met het kernprogramma van WordPress kunnen communiceren.

Wat is het verschil tussen de functiebestanden (functions.php) van plugins en thema's?

Subject:functions.phpDe bestanden worden gebruikt om code toe te voegen die gerelateerd is aan het uiterlijk en de functionaliteiten van een bepaald thema. Deze code wordt niet meer geldig wanneer het thema wordt gewijzigd. Plugins daarentegen zijn onafhankelijke functionaliteiten die onafhankelijk van het gekozen thema werken; zodra een plugin is geactiveerd, zijn de functies van de plugin beschikbaar. Het is beter om algemene functionaliteiten in plugins op te slaan, omdat dit de onafhankelijkheid en portabiliteit van de functies garandeert.

Hoe debug ik mijn WordPress-plugin?

Allereerst, zorg ervoor dat je opwp-config.phpHet bestand is geopend inWP_DEBUGDeze modus zorgt ervoor dat PHP-fouten en waarschuwingen op het scherm worden weergegeven. Gebruik deze modus wanneer je wilt dat fouten en waarschuwingen gemakkelijk kunnen worden gezien.error_log()De functie schrijft de fouteninformatie op in het foutenlog van de server. Daarnaast kunnen de “Console”-en “Network”-panelen in de ontwikkelaarstool van de browser worden gebruikt om JavaScript- en AJAX-verzoeken te debuggen. Voor complexe logica is dit zeer handig.var_dump()print_r()De waarden van de variabelen worden uitgegeven, maar vergeet deze debug-code niet te verwijderen voordat je het publiceert.

Hoe interacteert mijn plugin met de database?

WordPress biedt…$wpdbDeze globale objecten worden gebruikt voor veilige database-operaties; ze omvatten SQL-verzoeken en bieden ook functionaliteit voor het schoonmaken van data. Het is aan te raden om deze objecten te gebruiken wanneer plugins zijn geactiveerd voor het creeren, updaten en verwijderen van aangepaste databestanden.dbDelta()Functionen. Voor het instellen van veel gegevens is het eenvoudiger en veiliger om de Options API van WordPress te gebruiken.add_option(), update_option(), get_option()Om sleutel-waarde-paren op te slaan, wordt…

Hoe maak ik een instelingspagina voor mijn plugin die te configureren is?

Het maken van een instellingenpagina omvat meestal enkele stappen:add_menu_page()add_submenu_page()Voeg menu-items en pagina's toe, en registreer vervolgens instellingen, onderdelen en velden met de Settings API. De Settings API verzorgt automatisch de verificatie van de inhoud (CE-verificatie) en de controle van toegangrechten, en biedt een standaardiseerde manier van weergave van de velden. Dit is de aanbevolen methode om veilige, gestandaardiseerde backend-instellingenpagina's te bouwen.