Een introductie tot het ontwikkelen van WordPress-plug-ins: bouw je eerste functionele uitbreiding vanaf nul.

3 minuten leestijd
2026-03-12
2026-06-03
2,714
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 omgeving

Voordat je begint met schrijven van code, heb je een geschikte ontwikkelomgeving nodig. Dit omvat een lokale installatie van WordPress en een code-editor. Het wordt aanbevolen om XAMPP, Local by Flywheel of Docker te gebruiken om een lokale serveromgeving op te zetten. Zorg ervoor dat je WordPress op de meest recente versie is, zodat je de nieuwste API's en beveiligingsfuncties kunt gebruiken.

Je moet de basisstructuur van WordPress-plug-ins begrijpen. Een minimale plug-in bestaat uit ten minste één hoofdbestand, een PHP-bestand met specifieke commentaarregels in de kop. De naam van dit bestand is meestal your-plugin-name.phpHet vertelt WordPress dat dit een plugin is, en biedt informatie over de naam, beschrijving, versie en auteur.

In de code-editor maak je een nieuwe map voor je plugin-project, bijvoorbeeld: my-first-pluginIn deze map moet je het hoofd-PHP-bestand maken.

Aanbevolen leesmateriaal Van nul naar honderd: de ultieme handleiding en praktische tutorial voor het ontwikkelen van WordPress-plug-ins.

Maak je eerste pluginbestand.

Nu gaan we de hoofdfile van het plugin maken. Deze file vormt de ingangspunt voor het plugin en maakt WordPress op de hoogte van zijn bestaan via de commentaren die zich aan het begin van de file bevinden.

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.

Schrijf de headerinformatie voor het plugin

In het net gecreëerde PHP-bestand moet je de standaard-plugin-hoofdinformatie toevoegen. Een plugin met de naam “Welkomstbericht” kan bijvoorbeeld op deze manier beginnen:

<?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
 * Domain Path:       /languages
 */

WordPress scant… wp-content/plugins Alle PHP-bestanden in de map moeten worden gelezen om deze specifieke commentaren op te halen, en deze moeten worden weergegeven op de backend-pagina voor het beheer van plugins. Text Domain Voor internationaal gebruik.Domain Path De locatie van de taalbestand is opgegeven.

De code voor het realiseren van de kernfuncties

Onder de koppeninformatie kun je beginnen met schrijven van de functionaliteitscode voor het plugin. We nemen als voorbeeld een simpel functie: een groet tekst die in het bovenlinkse deel van de voetnoot van de website wordt weergegeven. Om te voorkomen dat we de themafail direct aanpassen, gebruiken we het hook-systeem van WordPress.

Eerst moeten we een functie maken die een groet teruggeeft. Daarna kunnen we deze functie gebruiken. add_action De functie koppelt deze uitvoer aan een bepaalde actie in WordPress, bijvoorbeeld… wp_footer

Aanbevolen leesmateriaal Een volledige gids voor het ontwikkelen van WordPress-plug-ins: van nul tot praktische implementatie.

// 定义一个函数来输出问候语
function my_first_plugin_display_greeting() {
    echo '<p style="position: fixed; bottom: 10px; left: 10px; background: #f1f1f1; padding: 10px; border-radius: 5px;">Hallo, welkom op mijn website!</p>';
}

// 使用 add_action 钩子将函数挂载到 wp_footer 动作
add_action( 'wp_footer', 'my_first_plugin_display_greeting' );

Na het voltooien van de bovenstaande code, moet je de plug-inmap (bijvoorbeeld) verwijderen. my-first-pluginAlles wordt gekopieerd naar het installatieverkeer van je WordPress. wp-content/plugins/ De plugin zit in de juiste map. Log in vervolgens op de WordPress-beheerderstoegang, ga naar het menu “Plugins” en je moet de plugin “Site Greeting” zien. Klik op “Activeren”. Bezoek nu de frontend van je website en je moet de aangepaste groet zien staan onderaan de pagina.

Voeg beheeropties toe aan het plugin.

Een goed uitgerust plugin vereist meestal een configuratiepagina, waarmee beheerders instellingen kunnen maken in de WordPress-backoffice. Dit houdt in dat je een beheermenu moet maken en de logica voor het verwerken van de instellingen moet ontwikkelen.

Maak een pagina voor het instellen van plugins.

WordPress biedt functies aan om instellingenpagina's voor plugins te toevoegen. Meestal gebruiken we deze functies om... add_options_pageadd_menu_page Deze functies voegen de pagina toe aan het achtergrondmenu. Het volgende voorbeeld demonstreert hoe je een eenvoudige instellingensubpagina kunt toevoegen onder het hoofdmenu “Instellingen”.

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%

Eerst moet een functie worden gemaakt om de HTML-content van de instellingenpagina te renderen.

// 渲染插件设置页面的函数
function my_first_plugin_settings_page() {
    ?&gt;
    <div class="wrap">
        <h1>Instellingen voor het groetbericht van de website</h1>
        <form method="post" action="/nl/options.php/" data-trp-original-action="options.php">
            <?php
            settings_fields( 'my_first_plugin_settings_group' );
            do_settings_sections( 'my-first-plugin' );
            submit_button();
            ?>
        <input type="hidden" name="trp-form-language" value="nl"/></form>
    </div>
    &lt;?php
}

En vervolgens, gebruik… add_action De haak zit... admin_menu Deze pagina is bedoeld voor het registreren in verschillende fases.

// 将设置页面添加到后台菜单
function my_first_plugin_add_admin_menu() {
    add_options_page(
        '问候语设置',          // 页面标题
        '站点问候语',          // 菜单标题
        'manage_options',      // 权限要求
        'my-first-plugin',     // 菜单别名
        'my_first_plugin_settings_page' // 渲染函数
    );
}
add_action( 'admin_menu', 'my_first_plugin_add_admin_menu' );

Registratie-instellingen en opslag van gegevens

Een enkele pagina is niet genoeg; we moeten ook specifieke instellingen definiëren (zoals invoervelden en keuzelijsten) en de opslag van gegevens regelen. Hiervoor moeten we de WordPress Settings API gebruiken. register_settingadd_settings_sectionadd_settings_field En andere functies.

Aanbevolen leesmateriaal Van nul naar één: Een autoritair handboek en praktische handleiding voor het ontwikkelen van WordPress plugins

De volgende code registreert een instellingengroep en een tekstveld, waarmee gebruikers hun eigen groet kunnen instellen.

// 初始化插件的设置
function my_first_plugin_settings_init() {
    // 注册一个设置,将其保存到 `options` 表的 `my_first_plugin_greeting_text` 字段中
    register_setting( 'my_first_plugin_settings_group', 'my_first_plugin_greeting_text' );

// 在页面中添加一个设置区域
    add_settings_section(
        'my_first_plugin_section',
        '自定义问候语',
        null,
        'my-first-plugin'
    );

// 在设置区域中添加一个文本字段
    add_settings_field(
        'my_first_plugin_field',
        '问候语文本',
        'my_first_plugin_field_render',
        'my-first-plugin',
        'my_first_plugin_section'
    );
}
add_action( 'admin_init', 'my_first_plugin_settings_init' );

// 渲染文本输入框的函数
function my_first_plugin_field_render() {
    $option = get_option( 'my_first_plugin_greeting_text', '你好,欢迎来到我的网站!' );
    echo '<input type="text" name="my_first_plugin_greeting_text" value="' . esc_attr( $option ) . '" style="width: 300px;" />';
}

Ten slotte moeten we de functie die de groet eerder genereerde wijzigen, zodat deze de door de gebruiker opgeslagen instellingen uit de database haalt.

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.
function my_first_plugin_display_greeting() {
    $greeting_text = get_option( 'my_first_plugin_greeting_text', '你好,欢迎来到我的网站!' );
    echo '<p style="position: fixed; bottom: 10px; left: 10px; background: #f1f1f1; padding: 10px; border-radius: 5px;">'`. esc_html($greeting_text)`.'</p>';
}

Sicherheid van plugins en beste praktijken

Tijdens het ontwikkelen van plugins is veiligheid een belangrijk aspect om rekening mee te houden. Onveilige code kan leiden tot dat een website wordt geïnfecteerd. Hier zijn enkele belangrijke veiligheidsregels:

Datavalidatie en -reiniging

Op elk moment moet je aannemen dat gegevens die van de gebruiker worden ingevoerd (bijvoorbeeld $_POST, $_GET) of uit de database worden gehaald onbetrouwbaar zijn. Vooraleer de gegevens worden weergegeven in de browser of worden opgeslagen in de database, moet je ze controleren en schoonmaken.

Voor de inhoud die naar een HTML-pagina wordt gestuurd, moet worden gebruikt… esc_html()esc_attr()wp_kses_post() Functies als escape moeten worden gebruikt om XSS-aanvallen (Cross-Site Scripting) te voorkomen.
Voor variabelen die worden gebruikt in databasequery's, moet men gebruikmaken van voorcompilereerde statements of tools van dit type. $wpdb->prepare() Een dergelijke methode.

In ons voorbeeld wordt, wanneer de instellingen worden gesaved, de informatie van WordPress... register_setting De functie verricht automatisch enkele basisreinigingen. Tijdens het uitvoeren van de uitstoot (output) hebben we bepaalde stappen gebruikt. esc_html() Om te zorgen dat de HTML-taggen in de groettekst veilig worden geëscapeseerd naar gewone tekst…

Het gebruik van niet-CE-middelen en het uitvoeren van toegangscontroles

Wanneer een formulier wordt ingediend vanaf de beheerpagina, moet de legitiemheid van de request worden gecontroleerd. Dit omvat het controleren van de gebruikersrechten en het verifiëren van willekeurige cijfers (random numbers).

In het formulier op de instellingenpagina…settings_fields() De functie bevat al automatisch de niet-CE-verificatie. Als je echter een aangepaste AJAX-behandeling of een niet-standaard formulier hebt gemaakt, moet je de verificatie handmatig uitvoeren. Hiervoor wordt meestal… current_user_can() Controleer de rechten en gebruik ze vervolgens. check_admin_referer()wp_verify_nonce() Verifieer de willekeurige getal.

Als voorbeeld, in een aangepaste submit-behandelingsfunctie:

function my_plugin_handle_form_submit() {
    // 检查权限
    if ( ! current_user_can( 'manage_options' ) ) {
        wp_die( '权限不足' );
    }
    // 验证随机数
    if ( ! isset( $_POST['my_nonce_field'] ) || ! wp_verify_nonce( $_POST['my_nonce_field'], 'my_action' ) ) {
        wp_die( '安全校验失败' );
    }
    // ... 处理安全的数据 ...
}

Samenvatting

Met deze handleiding heb je de volledige ontwikkelingsprocedure afgerond: van een simpel PHP-bestand naar een WordPress-plugin met backend-beheerfuncties. Je hebt de basisstructuur van een plugin geleerd, hoe je action hooks gebruikt om nieuwe functies te toevoegen, hoe je de WordPress Settings API gebruikt om configurabele optiepagina’s te maken, en ook de belangrijkste veiligheidsmaatregelen. Vergeet niet dat een goede plugin niet alleen krachtige functies moet hebben, maar ook duidelijk, veilig en betrouwbaar code moet zijn die voldoet aan de WordPress-ontwikkelingsstandaarden. Met deze kleine plugin als uitgangspunt kunt je verder ontwikkelen en meer geavanceerde functies toevoegen, zoals kortere code, handige hulpmiddelen en aangepaste artikeltypen, waarmee je steeds complexere uitbreidingen voor WordPress kunt bouwen.

Veelgestelde vragen (FAQ)

Hoe voeg je meertaalsondersteuning toe aan een plugin?

Voor het toevoegen van internationaalization (i18n)-ondersteuning aan een plugin zijn tekstvelden en vertaalfuncties belangrijk. Eerst moet je ervoor zorgen dat deze elementen op de juiste manier zijn ingesteld in het begin van het plugin-bestand. Text DomainDomain PathIn het code, moet alle tekst die moet worden vertaald worden gemarkeerd met speciale tekens of tags. __()_e() Deze functies worden vervolgens in een pakket geplaatst. Daarna wordt met tools als Poedit een POT-templatesjabloon gemaakt, waarna de corresponderende .mo- en .po-vertaalsbestanden worden generereerd. Deze bestanden worden vervolgens geplaatst in de door het plugin aangegeven taalmap.

Bijvoorbeeld:echo esc_html( __( ‘Hello, World!’, ‘my-first-plugin’ ) );Als een gebruiker het gewenste taalprofiel selecteert, laadt WordPress automatisch de corresponderende vertaalfailen op.

Hoe voorkom je dat de namen van functies in een plugin niet in conflict komen met die van andere plugins?

De beste praktijk om conflicten met functionnamen te voorkomen, is het gebruik van namenruimten (PHP 5.3+) of het toevoegen van een unieke prefix aan alle functies, klassen en constanten. Het prefix moet voldoende uniek zijn; hiervoor worden vaak afkortingen of de volledige namen van plugins gebruikt.

Als voorbeeld: gebruik dit niet. display_greeting()En in plaats daarvan moet men... my_first_plugin_display_greeting()Als je PHP-namespaceën gebruikt, kun je deze op het begin van het bestand declareren. namespace MyFirstPlugin;Vervolgens worden er binnen de code korte functionnamen gebruikt, en wanneer de functies van buiten worden opgeroepen, worden deze namen geresolveerd via een namespace.

Hoe publiceer je een plugin na de ontwikkeling in het officiële catalogus?

Om je plugin te publiceren in de officiële WordPress.org-directory, moet je eerst een account op WordPress.org aanmaken en je plugin indienen. Het proces omvat het controleren of je code voldoet aan de GPL-licentie, het laten controleren of je code aan de PHPCS-standaarden voldoet, het voorbereiden van een readme.txt-bestand (in een specifiek format), en het leveren van duidelijke screenshots en documentatie. Na het indienen wordt je code door reviewers bekeken. Als je plugin wordt goedgekeurd, kan je het publiceren. Op deze manier kunnen gebruikers je plugin rechtstreeks vanuit het WordPress-beheerpaneel vinden en installeren.

Hoe kunnen plugins backwards compatibel zijn met oudere versies van WordPress?

Om backwards compatibiliteit te bewaren, moet je tijdens het ontwikkelen de huidige versie van WordPress controleren en gebruikmaken van conditionele statements om code te omringen die afhankelijk is van de API's van nieuwe versies. Verder moet je vermijden om afgekeurde (deprecated) functies te gebruiken; als dit toch nodig is, moet er een alternatief beschikbaar zijn. In het readme.txt-bestand van het plugin moet duidelijk worden aangegeven wat de minimale versie van WordPress is waar het plugin voor vereist is, en de gebruikers moeten worden geïnstrueerd. Het regelmatig testen van het plugin in oudere versies van WordPress is van belang om de compatibiliteit te behouden.