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

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

De kernstructuur van het ontwikkelen van WordPress-plug-ins

Elk geldig WordPress-plugin begint met een centrale hoofdbestand. Dit hoofdbestand vormt de ingangspunt voor het hele plugin en moet voldoen aan bepaalde namenconventies en commentaarregels, zodat WordPress het kan herkennen en activeren. Een typisch gebruik is… /wp-content/plugins/ Maak in de map een map met de naam van het plugin, bijvoorbeeld: /my-first-plugin/Vervolgens maak je in die map de hoofdfile.

Het essentieelste deel van het hoofdbestand zijn de commentaren in de plugin-head. Dit zijn commentaren in een specifiek format die worden geplaatst aan het begin van het PHP-bestand. Hier is een voorbeeld van een basiscommentaar in de plugin-head:

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

Deze commentaarblock bevat alle meta-informatie over het plugin voor WordPress. Plugin Name Dit is een vereiste; zonder dit kan WordPress je plugin niet herkennen in de lijst met achtergrondplugins.Text Domain Dit wordt gebruikt voor internationalisatie en is een belangrijke indicatie voor het toevoegen van meertalige ondersteuning aan de plugin in de toekomst.

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

Voor een goede organisatie van de code in het hoofdbestand, en om duidelijkheid te bewaren en namenconflicten te voorkomen, wordt het sterk aanbevolen om te ontwikkelen op objectgerichte (OOP) manier. Definieer een klasse om alle functionaliteiten van het plugin te verpakken. Een standaard begin van een klassestructuur zie je hieronder:

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.
if ( ! defined( 'ABSPATH' ) ) {
    exit; // 防止直接访问文件
}

class My_First_Plugin {
    /**
     * 构造函数,用于初始化插件的主要钩子和功能
     */
    public function __construct() {
        $this->define_constants();
        $this->init_hooks();
    }

/**
     * 定义插件常量
     */
    private function define_constants() {
        define( 'MFP_PLUGIN_PATH', plugin_dir_path( __FILE__ ) );
        define( 'MFP_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
        define( 'MFP_VERSION', '1.0.0' );
    }

/**
     * 初始化所有挂载点(Hooks)
     */
    private function init_hooks() {
        // 在这里添加动作钩子和过滤器钩子
        add_action( 'init', array( $this, 'load_textdomain' ) );
        add_action( 'admin_menu', array( $this, 'add_admin_menu' ) );
    }

// 其他方法将在这里定义...
}

// 实例化插件类
new My_First_Plugin();

Deze structuur scheidt de verschillende aandachtspunten duidelijk van elkaar, waardoor de code gemakkelijker te onderhouden en uit te breiden is. De definitie van constanten (zoals…) MFP_PLUGIN_PATHDeze referentiepunten zijn op globale schaal beschikbaar voor bestandspaden, URL’s en versies. Alle interacties met het kernonderdeel van WordPress vinden via deze referentiepunten plaats. init_hooks De acties en filters die in de methode zijn gedefinieerd (samengevat als “hooks”) worden gebruikt om verbindingen te leggen.

Een dieper inzicht in acties en filter-hooks

Het hook-systeem van WordPress vormt de basis voor de uitbreidbaarheid van het platform. Het biedt ontwikkelaars de mogelijkheid om op specifieke momenten tijdens het uitvoeren van de kerncode van WordPress, thema's of andere plugins hun eigen, aangepaste code te toevoegen, zonder dat de oorspronkelijke bestanden hoeven te worden gewijzigd. Er bestaan twee belangrijke categorieën van hooks: Action Hooks en Filter Hooks.

Action hooks worden uitgevoerd wanneer een bepaald evenement plaatsvindt en worden gebruikt om functies te toevoegen of te wijzigen. Bijvoorbeeld wanneer een artikel wordt gepubliceerd…publish_postHet beheermenu wordt weergegeven.admin_menuDe betreffende pagina of script moet worden geladen.wp_enqueue_scriptsDe actie-haken worden altijd geactiveerd wanneer bepaalde gebeurtenissen plaatsvinden. De taak van de ontwikkelaar is om een callback-functie te schrijven en deze te “monteren” op de juiste haak.

Als je bijvoorbeeld een eenvoudige instellingenpagina voor een plugin wilt maken, moet deze worden gemonteerd (of geïntegreerd) in het main-systeem van het programma. admin_menu Hook:

Aanbevolen leesmateriaal Van nul tot held: een volledige gids en praktische tutorial voor het ontwikkelen van WordPress-plug-ins.

public function add_admin_menu() {
    add_options_page(
        '我的插件设置',          // 页面标题
        '我的插件',              // 菜单标题
        'manage_options',        // 权限能力
        'my-plugin-settings',    // 菜单Slug
        array( $this, 'render_settings_page' ) // 回调函数
    );
}

In tegenstelling tot actie-haken (action hooks) worden filter-haken gebruikt om gegevens te bewerken. Een filter-hak ontvangt een waarde (of een groep waarden), waarna de callback-functie deze waarde kan bewerken en de gewijzigde waarde teruggeeft. Het kernbestand van WordPress is vol met filter-haken. the_content Gebruikt om de inhoud van artikelen te filteren.widget_title Wordt gebruikt om de titel van een widget te wijzigen.

Als we op willen leggen dat we aan het eind van elke artikel automatisch een copyright-verklaring willen toevoegen, kunnen we dit doen met behulp van een programma of script. the_content Filter:

public function append_copyright( $content ) {
    if ( is_single() && in_the_loop() && is_main_query() ) {
        $copyright_text = '<p><em>De auteursrechten van dit artikel berusten bij deze website. Wanneer u het artikel wilt reproduceren, moet u de bronvermelding opnemen.</em></p>';
        $content .= $copyright_text;
    }
    return $content;
}
// 在 init_hooks 方法中挂载: add_filter( 'the_content', array( $this, 'append_copyright' ) );

Een stabiel en functioneel plugin gebruikt veel verschillende ‘hooks’. Het correct gebruiken van hooks zorgt niet alleen voor sterke functionaliteiten, maar ook voor de compatibiliteit met andere plugins of thema’s. Het begrijpen van de uitvoeringsvolgorde en het context van de belangrijkste hooks is een essentieel vereiste voor het effectief ontwikkelen van plugins.

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%

Ontwikkeling van de backend-interface en instellingen voor plugins

Voor plugins waarbij de gebruiker zelf instellingen moet maken, is het van belang om een gebruiksvriendelijk backend-instellingsscherm te bieden. Dit houdt meestal in dat één of meerdere instellingsschermen worden gecreëerd, waarna de door de gebruiker ingevoerde opties veilig worden opgeslagen.

WordPress biedt een krachtig configuratie-API aan om deze procedure te versimpelen. Dit API regelt complexe taken als het weergeven van pagina’s, het controleren van invoergegevens, het beheersen van veiligheidsregels (zoals nonces) en het opslaan van instellingen. Het maken van een configuratiepagina bestaat meestal uit drie stappen: het registreren van de configuratiegegevens, het toevoegen van configuratiegebieden en -velden, en het weergeven van de pagina.

Allereerst moet je, wanneer je de initiatieel hook instelt, een set instellingen en de bijhorende velden registreren:

Aanbevolen leesmateriaal Handboek voor het ontwikkelen van WordPress-plug-ins: van nul tot het publiceren van je eigen plug-in

public function register_settings() {
    register_setting(
        'mfp_settings_group', // 设置组名,与 settings_fields() 调用对应
        'mfp_plugin_options', // 存储在 wp_options 表中的选项名
        array( $this, 'sanitize_settings' ) // 可选的回调,用于清理输入
    );

add_settings_section(
        'mfp_main_section',          // 区域ID
        '主要设置',                   // 区域标题
        array( $this, 'render_section_desc' ), // 区域描述回调
        'my-plugin-settings'         // 所属页面的Slug
    );

add_settings_field(
        'api_key_field',             // 字段ID
        'API密钥',                   // 字段标题
        array( $this, 'render_api_key_field' ), // 字段输入框渲染回调
        'my-plugin-settings',        // 页面Slug
        'mfp_main_section'           // 区域ID
    );
}

Vervolgens moet je voor elk veld een renderfunctie schrijven. Als voorbeeld: maak een invoervak voor het API-sleutelfeld dat hierboven is genoemd.

public function render_api_key_field() {
    $options = get_option( 'mfp_plugin_options' );
    $value = isset( $options['api_key'] ) ? esc_attr( $options['api_key'] ) : '';
    echo '<input type="password" id="api_key" name="mfp_plugin_options[api_key]" value="' . $value . '" class="regular-text" />';
    echo '<p class="description">Vul alstublieft uw service-API-sleutel in.</p>';
}

Ten slotte wordt een functie gecreëerd die de hele instellingenpagina weergeeft. Deze functie zal worden gebruikt… add_options_page Call of the callback parameter:

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.
public function render_settings_page() {
    // 检查用户权限
    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( 'mfp_settings_group' );
            // 输出具体的设置区域和字段
            do_settings_sections( 'my-plugin-settings' );
            // 输出提交按钮
            submit_button( '保存设置' );
            ?>
        <input type="hidden" name="trp-form-language" value="nl"/></form>
    </div>
    &lt;?php
}

Vormulieren die worden gecreëerd met de Settings API, zullen hun gegevens via… (de tekst is hier afgebroken; de volledige zin zou moeten worden toegevoegd om de betekenis te begrijpen) options.php Automatisch verwerken en veilig opslaan in wp_options In de tabel met gegevens. Dit is een efficiëntere manier dan het handmatig verwerken. $_POST De gegevens moeten veel veiliger en beter georganiseerd zijn.

Best practices voor de veiligheid, prestaties en internationalisatie van plugins

Het ontwikkelen van een professionele WordPress-plugin gaat verder dan alleen het implementeren van functionaliteiten. Veiligheid, prestaties en internationalisatie zijn belangrijke factoren die bepalen of een plugin breed wordt gebruikt en op de lange termijn wordt onderhouden.

Op het gebied van veiligheid is het belangrijkste principe: “Vertrouw nooit op de invoer van gebruikers.” Alle gegevens die van gebruikers of externe bronnen komen, moeten met behoed worden behandeld. $_GET$_POST$_COOKIEVoordat deze gegevens worden gebruikt voor database-opvragen, worden weergegeven op een pagina of worden verwerkt in een bestand, moeten ze worden gevalideerd, gereinigd of geëscapeseerd.
Escape-uitvoer: maak gebruik van de functies die WordPress biedt, zoals esc_html()esc_attr()esc_url()wp_kses_post() Dit is om te zorgen dat de inhoud die naar HTML wordt gestuurd veilig is.
Databasequery voorbereiden: gebruik hierbij $wpdb De door de klasse aangeboden methoden, zoals $wpdb->prepare()Dit wordt gedaan om SQL-injectieaanvallen te voorkomen.
Autorisatie verifiëren: voordat je beheeractiviteiten uitvoert of toegang krijgt tot gevoelige gegevens, moet je altijd eerst je autorisatie verifiëren. current_user_can() Controleer de mogelijkheden (capabilities) van de gebruiker.
Gebruik van Nonce: Voor het indienen van formulieren of Ajax-verzoeken. wp_nonce_field()wp_create_nonce()wp_verify_nonce() Dit is om cross-site request forgery (CSRF)-aanvallen te voorkomen.

Prestatieoptimalisatie is even belangrijk. Een onhandig of onefficiënt plugin kan de snelheid van het hele website beperken. Enkele belangrijke praktijken zijn:
Laad resources op aanvraag: gebruik hiervoor wp_enqueue_script()wp_enqueue_style() De functie wordt alleen op de vereiste pagina's uitgevoerd (door middel van conditionele beoordelingen). is_admin()Deze specifieke ‘hooks’ zorgen ervoor dat JavaScript- en CSS-bestanden worden geladen.
Optimaliseer databasequery's: voorkom dat je in een lus query's uitvoert en maak gebruik van de WordPress-objectcache en de Transients API om tijdrovende queryresultaten of gegevens van externe API-verzoeken op te slaan. Gebruik bijvoorbeeld: set_transient()get_transient() De data kan gemakkelijk worden opgeslagen in de cache.
Hook-optimalisatie: installeer alleen de nodige hooks en verwijder ze wanneer de plug-in wordt uitgeschakeld. register_deactivation_hook() Voer een schoonmaakoperatie uit om zelfgemaakte database-tabellen of opties te verwijderen.

Ten slotte maakt internationalisering (i18n) het mogelijk dat je plugin wordt gebruikt door gebruikers overal ter wereld. Dit wordt bereikt door het gebruik van… __()_e()_x() Deze functionaliteit wordt gerealiseerd met behulp van een vertaalfunctie. De specifieke stappen zijn als volgt:
1. Gebruik het. __('文本', 'my-first-plugin') Alle door gebruikers zichtbare strings worden omhuld.Text Domain Het moet overeenkomen met de annotaties in het hoofddeel van het plugin.
2. Gebruik load_textdomain() Of misschien wel iets moderners. load_plugin_textdomain() Een functie die wordt gebruikt om vertaalfailen te laden. Dit gebeurt meestal wanneer de inhoud wordt gemount (dat wil zeggen, wordt toegankelijk gemaakt voor verwerking). init Dit wordt gerealiseerd in de callback-functie van de hook.

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

3. Gebruik tools als Poedit om dit te genereren. .pot Templatebestanden, bedoeld voor vertalers om mee te werken .po.mo De bestanden worden opgeslagen in de plugin. /languages/ Catalogus.

Het volgen van deze beste praktijken zal niet alleen de kwaliteit van je plugin aanzienlijk verbeteren, maar ook de reviewprocedure in de officiële WordPress-plugincatalogus soepeler maken.

Samenvatting

In deze gids hebben we het gehele proces van het ontwikkelen van WordPress-plug-ins systematisch behandeld. We begonnen met het creeren van een standaardiserde structuur voor de hoofdfail, gingen verder met het dieper begrijpen en gebruiken van de krachtige systeemontwikkelingsmogelijkheden van WordPress (zoals actions en filters), bouwden daarna een veilig en betrouwbare backend-interface met behulp van de Settings API, en bespraken ten slotte de belangrijkste best practices om ervoor te zorgen dat je plug-in veilig, efficiënt en multi-linguaal ondersteund is. Elke stap vormt een fundamentele basis voor het bouwen van een volwassen en onderhoudbare plug-in. Vergeet niet dat het ontwikkelen van een goede plug-in niet alleen gaat om het schrijven van werkbare code, maar ook om het naleven van community-standaarden, aandacht voor de gebruikerservaring en de beveiliging. Door deze principes in de praktijk te brengen, kun je een bijdrage leveren aan de WordPress-ecosysteem met kwalitatieve functionaliteiten.

Veelgestelde vragen (FAQ)

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

Voor het ontwikkelen van WordPress-plug-ins zijn solide kennis van PHP vereist, aangezien de logica van de plug-ins voornamelijk in PHP wordt geschreven. Daarnaast is een basiskennis van HTML, CSS en JavaScript nodig om de front-end-omgeving te bouwen en te versieren, evenals om interacties te realiseren. Het is ook handig om de basisconcepten en -operaties van de MySQL-database (zoals CRUD) te beheersen, zodat je data kunt verwerken. Het belangrijkste is om de kernconcepten van WordPress te begrijpen, zoals hooks, The Loop en de structuur van templates.

Hoe debug je een zelfontwikkeld WordPress-plugin?

Er zijn verschillende effectieve manieren om WordPress-plug-ins te debuggen. Allereerst moet... wp-config.php De WordPress-debogagemode is in het bestand ingeschakeld. WP_DEBUG De constante is ingesteld op... trueDit zorgt ervoor dat PHP-fouten, waarschuwingen en berichtgeving op het scherm worden weergegeven. Daarnaast wordt… error_log() Function of WP_DEBUG_LOG De fouteninformatie wordt opgeslagen in de logbestanden van de server, zodat deze de weergave op de front-end niet beïnvloeden. Voor complexe logica kun je professionele PHP-foutopsporingstools zoals Xdebug gebruiken in combinatie met een IDE (zoals PhpStorm of VS Code) voor het plaatsen van stoppunten tijdens het opsporen van fouten. Bovendien is het ook een veelgebruikte methode om snel problemen op te sporen om tijdelijk de waarden van variabelen in het codebestand uit te printen (in de ontwikkelingsomgeving).

Hoe kan ik het plugin dat ik heb ontwikkeld indienen in de officiële WordPress-plugincatalogus?

Voordat je het plugin indient in het officiële WordPress-directory, moet je ervoor zorgen dat het volledig voldoet aan de WordPress-codingstandaarden en dat het alle vereiste tests heeft doorlopen. PHP_CodeSnifferWordPress-Coding-Standards Je moet een WordPress.org-account hebben en vervolgens het plugin indienen in het “Developers”-paneel. Het proces omvat het invullen van gedetailleerde informatie over het plugin (bijvoorbeeld de README-file), het controleren of de code veilig is en geen schade toebrengt, het fourniseren van compatibiliteitsgegevens, en het voorbereiden van de vereiste iconen en bannerafbeeldingen. Na het indienen wordt het plugin door een team van reviewers handmatig bekeken; dit kan enkele weken duren. Als de review positief is, kan je plugin worden gevonden en geïnstalleerd door gebruikers wereldwijd.

Wanneer moeten de aangepaste database-tabellen in de plugin worden gecreëerd en verwijderd?

Het beste moment om een aangepaste database-tabel te creeren, is wanneer een plugin wordt aktiveerd. Je moet ervoor zorgen dat… register_activation_hook() Een functie die een callback-functie monteert, waarna deze callback-functie binnenin wordt gebruikt. dbDelta() Een functie die veilig een tabelstructuur kan creëren of updaten.dbDelta() De functioneert alleen als de SQL-sentence in een zeer strikte vorm is opgesteld. Het verwijderen van een aangepaste tabel moet plaatsvinden wanneer de plugin wordt verwijderd, en niet wanneer de plugin alleen tijdelijk wordt uitgeschakeld. Er zijn namelijk gebruikers die de plugin alleen tijdelijk uitgeschakelen, maar de tabel daarna nog steeds willen gebruiken. uninstall.php In de bestand is de logica voor het schoonmaken van gegevens opgeslagen. Deze bestand wordt alleen uitgevoerd wanneer de gebruiker via het WordPress-administratiepaneel op de knop “Verwijderen” van de plugin klikt, waardoor er geen ongewenste verwijdering van gebruikersgegevens optreedt.