WordPress-pluginontwikkeling: van het begin tot meesterschap: bouw je eerste functionaliteit van scratch

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

WordPress-pluginontwikkeling: van het begin tot meesterschap: bouw je eerste functionaliteit van scratch

De basisstructuur en bestandsorganisatie van WordPress-plug-ins

Een standaard WordPress-plugin bestaat meestal uit één hoofdbestand. De naam van dit hoofdbestand is zeer belangrijk en is meestal gelijk aan de naam van de map waarin het plugin zich bevindt. Bijvoorbeeld, voor een plugin met de naam “my-awesome-plugin”, kan het hoofdbestand de naam ‘my-awesome-plugin.php’ hebben.my-awesome-plugin.phpIn deze bestand zijn de commentaren bovenin het plugin-onderdeel essentieel. Ze dienen om het WordPress-systeem de basisinformatie over het plugin te verstrekken.

/**
 * Plugin Name:      我的第一个插件
 * Plugin URI:       
 * Description:      这是一个用于演示的WordPress插件。
 * Version:          1.0.0
 * Author:           你的名字
 * License:          GPL v2 or later
 * Text Domain:      my-first-plugin
 */

Het is aan te raden om de map met plugins op een unieke manier te noemen, om conflicten met bestaande plugins te voorkomen, en deze map te plaatsen in een specifieke locatie./wp-content/plugins/Binnen de map vind je naast het hoofdPHP-bestand ook mappen voor het opslaan van JavaScript- en CSS-bestanden (assets), een map voor internationale instellingen (languages), en een map voor templates. Een duidelijke structuur van de bestanden zorgt voor een betere ordening en overzicht.includes/Gebruikt voor kernklassen en -functies.admin/Voor backend-logica:public/Het wordt gebruikt voor front-end-logica en kan de onderhoudbaarheid van de plugin aanzienlijk verbeteren.

Aanbevolen leesmateriaal Ultimatumgids voor het ontwikkelen van WordPress-plug-ins: van nul beginnen met het maken van je eerste eigen plug-in

De kernfuncties van het plugin zijn geïmplementeerd.

De kracht van WordPress-plug-ins ligt in het flexibele systeem van action hooks en filter hooks. Action hooks bieden je de mogelijkheid om zelfgemaakte code op bepaalde momenten uit te voeren, bijvoorbeeld nadat een artikel is gepubliceerd of wanneer het beheermenu wordt geladen. Filter hooks daarentegen bieden je de mogelijkheid om de gegevens die worden verstuurd door de processen te bewerken.

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.

Een veel voorkomend scenario is dat tekst automatisch wordt toegevoegd aan het eind van een artikel. Dit kan worden gerealiseerd door…the_contentDeze functionaliteit wordt gerealiseerd met filters. In het hoofdbestand van het plugin kun je een functie definiëren en deze gebruiken.add_filterDe functie wordt gemonteerd op de filter.

function myplugin_add_footer_text( $content ) {
    if ( is_single() ) {
        $custom_text = '<p><em>De onderste informatie in dit artikel is automatisch generereerd door mijn plugin.</em></p>';
        $content .= $custom_text;
    }
    return $content;
}
add_filter( 'the_content', 'myplugin_add_footer_text' );

Een andere belangrijke functie is het maken van beheerpagina's. WordPress biedt een groot aantal functies om menu-items en pagina's in de backend te kunnen toevoegen. Je kunt deze functies dus gebruiken om de inhoud van je website te beheren.add_menu_page()add_submenu_page()Er bestaan functies om een pagina te definiëren. De procedure omvat meestal twee stappen: allereerst worden de menu-items geregistreerd, en vervolgens wordt de callback-functie voor die menupagina gedefinieerd om de HTML-content te genereren.

function myplugin_add_admin_page() {
    add_menu_page(
        '我的插件设置', // 页面标题
        '我的插件',     // 菜单标题
        'manage_options', // 权限
        'myplugin-settings', // 菜单别名
        'myplugin_admin_page_html', // 回调函数
        'dashicons-admin-generic', // 图标
        20 // 位置
    );
}
add_action( 'admin_menu', 'myplugin_add_admin_page' );

function myplugin_admin_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_options' );
            do_settings_sections( 'myplugin-settings' );
            submit_button();
            ?>
        <input type="hidden" name="trp-form-language" value="nl"/></form>
    </div>
    &lt;?php
}

Plugin-instellingen en optiebehandeling

Om plugins flexibel en aanpasbaar te maken, is het gebruikelijk om een instellingenpagina te bieden. WordPress biedt een georganiseerde instellingen-API aan, waarmee instellingen veilig kunnen worden geregistreerd, opgeslagen en verifieerd.

Allereerst moet je gebruikmaken van...register_setting()Een functie wordt gebruikt om een groep instellingen te registreren. Vervolgens worden deze instellingen gebruikt.add_settings_section()Voeg een instellingenblok toe en gebruik dit blok om de gewenste instellingen te bepalen.add_settings_field()Voeg in deze blok de specifieke instellingen toe. Dit werk wordt meestal uitgevoerd in...admin_initGereed in de hook.

Aanbevolen leesmateriaal WordPress-pluginontwikkeling: een volledig handboek voor het bouwen van aangepaste functionaliteiten vanaf nul

function myplugin_settings_init() {
    // 注册一个新设置
    register_setting( 'myplugin_options', 'myplugin_settings', 'myplugin_sanitize' );

    // 添加一个设置区块
    add_settings_section(
        'myplugin_section_general',
        '通用设置',
        'myplugin_section_general_cb',
        'myplugin-settings'
    );

    // 添加一个文本字段
    add_settings_field(
        'myplugin_field_footer_text',
        '自定义尾部文本',
        'myplugin_field_footer_text_cb',
        'myplugin-settings',
        'myplugin_section_general',
        [ 'label_for' => 'myplugin_field_footer_text' ]
    );
}
add_action( 'admin_init', 'myplugin_settings_init' );

// 字段渲染回调函数
function myplugin_field_footer_text_cb() {
    $options = get_option( 'myplugin_settings' );
    ?>
    <input type="text" id="myplugin_field_footer_text" name="myplugin_settings[footer_text]" value="<?php echo esc_attr( $options['footer_text'] ?? '' ); ?>" class="regular-text">
    <?php
}

// 数据清理回调函数
function myplugin_sanitize( $input ) {
    $sanitized = [];
    if ( isset( $input['footer_text'] ) ) {
        $sanitized['footer_text'] = sanitize_text_field( $input['footer_text'] );
    }
    return $sanitized;
}

Op de front-end kun je dit doen door…get_option('myplugin_settings')De opgeslagen optie-array is verkrijgbaar, en je kunt deze waarden gebruiken in de logica van je functie.

Pluginbeveiliging en beste praktijken

Een plugin ontwikkelen die openbaar wordt verspreid of gebruikt in een productieomgeving, waarbij veiligheid de hoogste prioriteit heeft. Alle gegevens van gebruikers of onbetrouwbare bronnen moeten worden gevalideerd, gereinigd en geëscapeseerd.

Validatie betekent dat gegevens worden gecontroleerd om te zien of ze voldoen aan het verwachte formaat, voordat ze worden verwerkt. Dit kan bijvoorbeeld worden gedaan met behulp van speciale tools of regels.filter_var()Verificatie van het e-mailadres. Sanitisatie betekent het verwijderen van ongeautoriseerde of gevaarlijke karakters uit gegevens. WordPress biedt hierbij hulpmiddelen zoals…sanitize_text_field()sanitize_email()wp_kses_post()Er zijn veel verschillende schoonmaakfuncties beschikbaar. Met 'escaping' (ontsnappen) wordt bedoeld dat gegevens die worden gebruikt in HTML, JavaScript of URL's op veilige manier worden gemoduleerd, om XSS-aanvallen te voorkomen. Hier moet gebruik worden gemaakt van speciale escape-codes.esc_html()esc_attr()esc_url()wp_json_encode()En andere functies.

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%

Wanneer je in een plugin niet-CE (AJAX)-verzoeken verwerkt, moet je dit zeker controleren.nonce(Tal gebruikt één keer) Om de legitiemheid van de vraag te controleren en de huidige rechten van de gebruiker (capaciteiten) te controleren.

// PHP端:生成nonce并输出到页面
wp_nonce_field( 'myplugin_ajax_action', 'myplugin_nonce' );

// JavaScript端:随AJAX请求发送nonce
jQuery.ajax({
    url: ajaxurl,
    type: 'POST',
    data: {
        action: 'myplugin_ajax_handler',
        nonce: jQuery('#myplugin_nonce').val(),
        // ... 其他数据
    }
});

// PHP端:处理AJAX请求时验证
function myplugin_ajax_handler() {
    check_ajax_referer( 'myplugin_ajax_action', 'nonce' );
    if ( ! current_user_can( 'edit_posts' ) ) {
        wp_die( '权限不足' );
    }
    // ... 处理安全请求
}
add_action( 'wp_ajax_myplugin_ajax_handler', 'myplugin_ajax_handler' );

Bovendien moet u zich houden aan de coderingsnormen van WordPress en volledige internationale ondersteuning bieden (met behulp van ).__()_e()Function, en gebruik hetload_plugin_textdomain()Het laden van de vertaalfailen, evenals het uitvoeren van nodige schoonmaakacties met de bronnen wanneer de plugin is uitgeschakeld (bijvoorbeeld door…)register_uninstall_hook()Het verwijderen van opties uit de database is een essentieel onderdeel van de ontwikkeling van professionele plugins en vormt een belangrijke best practice.

Samenvatting

Het ontwikkelen van WordPress-plug-ins betekent dat je customiseerde functies soepel integreert in het grote CMS-ecosysteem. Het begint met een goed georganiseerde map met plug-ins en een hoofdbestand dat de juiste commentaren bevat. Het belangrijkste is om ervaren te zijn met action- en filter-hooks om de standaardwerking van WordPress uit te breiden, en om een gebruiksvriendelijke configuratieomgeving te bieden aan gebruikers via de beheerpagina's en de settings-API. Het moet altijd worden gestreefd naar een hoge veiligheid, door onder andere data-teverificatie, schoonmaakprocessen, escape-mechanismen en toegangscontrole te gebruiken. Het naleven van internationale standaarden en coderingseisen zorgt ervoor dat je plug-in stabiel, veilig en gemakkelijk te onderhouden is, zodat het kan worden gebruikt op miljoenen websites.

Aanbevolen leesmateriaal Van nul beginnen: Een volledig handboek en praktische tutorial voor het ontwikkelen van WordPress plugins

Veelgestelde vragen (FAQ)

Welke voorbereidende kennis is nodig om een WordPress-plugin te ontwikkelen?

Je moet een solide basis in PHP-programmering hebben; het is zeer nuttig om de concepten van objectgerichte programmering (OOP) te begrijpen. Daarnaast moet je een basiskennis hebben van HTML, CSS en JavaScript, zodat je de front-end-weergave en interactie kunt beheren. Het belangrijkste is dat je vertrouwd bent met de kernconcepten van WordPress, zoals hooks, de Options-API, gebruikersrollen en -rechten, en de structuur van de database.

Hoe debug je een WordPress-plugin die je aan het ontwikkelen bent?

Allereerst, zorg ervoor dat je opwp-config.phpDe functie is in het bestand geactiveerd.WP_DEBUGWP_DEBUG_LOGDit zal de foutmelding opslaan in…/wp-content/debug.logDe inhoud van het bestand wordt niet weergegeven aan de gebruiker op de front-end.

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.

Met tools als het Query Monitor-plugin is het mogelijk om in real time te kijken naar databasequery's, het uitvoeren van hooks, PHP-fouten en prestatiedata. Voor het logisch afvinden van problemen kan dit worden gecombineerd met andere methoden.error_log()Je kunt stap voor stap de uitvoering van een functie volgen met behulp van PHP-functies en professionele PHP-debuggers zoals Xdebug.

Hoe moet ik een aangepaste database-tabel toevoegen aan mijn plugin?

Pas wanneer de structuur van de kerndatatabellen van WordPress niet voldoet aan je behoeften, moet je erover nadenken om custom-tabellen te toevoegen. Je kunt tabellen creeren wanneer een plugin wordt aktiveerd, meestal door een functie te registreren die wordt uitgevoerd wanneer de plugin wordt geactiveerd.

In deze functie wordt gebruik gemaakt van...dbDelta()Deze functie wordt gebruikt om de structuur van een tabel veilig te creëren of te updaten. Voor het gebruik van deze functie is de volledige inhoud vereist.CREATE TABLE De SQL-opdrachten worden zeer voorzichtig opgesteld, rekening houdend met eventuele veranderingen in de structuur van de tabel. De SQL-opdrachten die je nodig hebt, kunnen worden gevonden via de globale variabelen.$wpdbVoer dit uit.

Hoe maak ik mijn plugin multilingual (internationaal) ?

Eerst moet je de definitie in de commentaren aan het begin van het hoofdbestand van het plugin opnemen.Text DomainEn gebruiken dit wanneer de plugin wordt geladen.load_plugin_textdomain()De functie laadt de vertaalmappen op. In alle plugins worden alle strings die worden vertaald gebruikt…__()Of_e()De functie wordt ‘gepakket’ (wrapped). Daarna kun je tools gebruiken zoals Poedit om de vertalingen te genereren..potTemplatefile, bedoeld voor vertalers om een vertaling in een specifieke taal te maken..po.moHet document.