Een introductie tot het ontwikkelen van WordPress-plug-ins: hoe je je eerste aangepaste plug-in vanaf nul maakt.

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

Forbereiden van de ontwikkelingsomgeving voor WordPress plugins

Voordat je begint met het schrijven van code, heb je een geschikte ontwikkelomgeving nodig. Dit niet alleen verbetert je ontwikkelingsefficiëntie, maar helpt je ook om plugins beter te debuggen en te testen. Allereerst moet je een WordPress-omgeving op je lokale computer opzetten. Je kunt een geïntegreerde ontwikkelomgeving gebruiken, zoals XAMPP, MAMP of Local by Flywheel; deze bieden een snelle installatie van PHP, MySQL en Apache/Nginx-servers. Het is aan te raden om de meest recente stabiele versie van de WordPress-core-bestanden van de officiële website te downloaden en te installeren.

Zorg ervoor dat je PHP-versie voldoet aan de minimale vereisten van WordPress en activeer de foutmeldingen. Dit is van belang voor het oplossen van problemen. Je kunt dit doen door...wp-config.phpVoeg de volgende code toe aan het bestand om de debug-modus in te schakelen:

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true); // 将错误记录到 /wp-content/debug.log
define('WP_DEBUG_DISPLAY', false); // 不在页面上显示错误

Daarnaast is een krachtige code-editor onmisbaar, zoals Visual Studio Code,PhpStorm of Sublime Text. Deze editors bieden meestal syntaxis-highlighting, codevoorstellen en integratie met versiebeheer, waardoor het coderen een stuk gemakkelijker wordt. Het is ook aan te raden om ontwikkelaarsinstrumenten in je browser te installeren, en om browserextensies te gebruiken die speciaal zijn ontworpen voor WordPress. Dit maakt het gemakkelijker om hooks te controleren, databases te bezoeken en de prestaties van je website te monitoren.

Aanbevolen leesmateriaal WordPress-pluginontwikkelingsgids: van nul tot één: maak je eerste functionaliteitsmodule

Maak je eerste pluginbestand.

De meest basale vorm van een WordPress-plugin is een PHP-bestand. Alle plugins zijn opgeslagen in een speciale map in het WordPress-installatiepad./wp-content/plugins/De plugins zijn te vinden in een map. Elke plugin kan een apart PHP-bestand zijn of een map die meerdere bestanden bevat.

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.

Allereerst moet je een unieke map maken voor je plugin, bijvoorbeeld:my-first-pluginIn deze map moet je een hoofdplugin-bestand maken, dat meestal dezelfde naam heeft als de map zelf.my-first-plugin.phpDe opening van deze bestand moet een plugin-headnote bevatten die voldoet aan de WordPress-standaarden. Deze headnote biedt het WordPress-systeem basist informatie over de plugin.

Example of a header comment in the main plugin file:

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

In deze commentaar is “Plugin Name” een vereiste invoer; dit bepaalt de weergave van de plugin in het backend-beheeringspaneel. Andere informatie, zoals de versienummer en de ontwikkelaar, helpt gebruikers om meer te weten over de plugin. Nadat u deze bestand hebt gemaakt, moet u deze plaatsen in de juiste map./wp-content/plugins/my-first-plugin/In het menu kun je naar de WordPress-beheerder gaan. Op de pagina “Plug-ins” moet je een nieuw plugin zien met de naam “Mijn eerste aangepaste plugin”. Je kunt dit plugin activeren. Hoewel het voorlopig nog niets doet, heb je met succes de basis voor een plugin gecreëerd.

Handelingen met het activeren en deactiveren van plugins

Wanneer een plugin wordt activerd of deactiverd, zijn soms initialisatie- en schoonmaakacties nodig, zoals het creeren van database-tabelen, het instellen van standaardopties of het verwijderen van tijdelijk gegevens. WordPress beheert deze processen met twee speciale hooks:register_activation_hookregister_deactivation_hook

Aanbevolen leesmateriaal Van nul tot expert: Een volledig handboek en beste praktijken voor het ontwikkelen van WordPress-plug-ins

Je kunt deze hooks definiëren in het hoofdpluginbestand. Bijvoorbeeld wanneer het plugin wordt activerd, willen we misschien een standaardconfiguratieoptie in de database opslaan; wanneer het plugin wordt uitgeschakeld, moet deze optie mogelijk worden verwijderd. De implementatie van het code is als volgt:

// 定义插件激活时执行的函数
function my_plugin_activate() {
    // 添加一个默认选项到数据库
    add_option('my_plugin_default_option', '这是默认值');
    // 或者可以在这里初始化自定义数据库表(需要更复杂的SQL)
}
register_activation_hook(__FILE__, 'my_plugin_activate');

// 定义插件停用时执行的函数
function my_plugin_deactivate() {
    // 删除之前创建的选项
    delete_option('my_plugin_default_option');
    // 注意:通常不在停用钩子中删除数据,以免用户重新激活时丢失设置
    // 更常见的清理工作在卸载钩子中处理
}
register_deactivation_hook(__FILE__, 'my_plugin_deactivate');

Het is belangrijk om te onthouden dat…register_deactivation_hookNormaal gesproken wordt dit gebruikt voor een lichte schoonmaak; de permanente verwijdering van gegevens (bijvoorbeeld het verwijderen van tabelten uit een database) moet worden gedaan in de uninstallatie-hook. De uninstallatie-functie moet hiervoor worden gebruikt.register_uninstall_hookRegistreer je. Door deze hooks op de juiste manier te gebruiken, zorg je ervoor dat je plugin zich netjes gedraagt en geen overbodige gegevens op de website achterlaat.

Het begrijpen en gebruiken van hooks en filters

Het kernpunt van het ontwikkelen van WordPress-plug-ins is het “hook”-mechanisme. Dit mechanisme biedt de mogelijkheid om op specifieke momenten of op bepaalde plaatsen eigen code in te voegen om de kernfuncties van WordPress te wijzigen of uit te breiden. Er zijn twee soorten hooks: Actions en Filters.

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%

Action hooks bieden je de mogelijkheid om zelfgemaakte functies uit te voeren wanneer bepaalde gebeurtenissen plaatsvinden. Bijvoorbeeld wanneer een artikel is gepubliceerd…publish_post), wanneer de inhoud wordt geladen in de hoofdsectie van de webpagina (wp_head) of wanneer het wordt 초기iseerd in de beheeromgeving (admin_initJe kunt het gebruiken.add_action()Een functie om je code te kunnen mounten. Hier is een simpel voorbeeld: deze functie voegt automatisch een op maat gemaakte tekst toe aan het eind van elke artikel.

function add_custom_footer_to_content($content) {
    if (is_single()) { // 仅在单篇文章页面添加
        $custom_text = '<p><em>Fijn dat je dit artikel hebt gelezen!</em></p>';
        $content .= $custom_text;
    }
    return $content;
}
// 使用‘the_content’过滤器,注意这是一个过滤器(Filter)的例子
add_filter('the_content', 'add_custom_footer_to_content');

Als je de bovenstaande code bekijkt, zie je dat we in feite een filter gebruiken. De filterhook wordt gebruikt om de gegevens die aan hem worden overgedragen te bewerken. Het belangrijkste verschil met een actie is dat een filter de gewijzigde waarden moet teruggeven. Typische filters omvatten…the_content(Veranderingen in de inhoud van het artikel)the_title(Veranderd de titel) Enexcerpt_length(Verandering in de lengte van de samenvatting). Hiermee corresponderend...add_filter()De functie wordt gebruikt om filterfuncties te mounten.

Een custom hook maken zodat anderen deze kunnen uitbreiden

Een goed ontworpen plugin gebruikt niet alleen de kern-hooks van WordPress, maar biedt ook eigen, aangepaste hooks aan, zodat andere ontwikkelaars je plugin kunnen uitbreiden.do_action()Een functie kan een actie-hook (action hook) creeren, waarmee…apply_filters()Het is mogelijk om een filterhook te creeren.

Aanbevolen leesmateriaal Volledig handboek voor het ontwikkelen van WordPress plugins: van nul tot een eigen plugin bouwen

Als je bijvoorbeeld een plugin hebt die gegevens verwerkt, kun je vooraf een filter bieden waarmee anderen de invoerparameters kunnen aanpassen.

// 定义插件的主要处理函数
function my_plugin_process_data($input_data) {
    // 在核心处理前,允许其他开发者通过过滤器修改 $input_data
    $filtered_data = apply_filters('my_plugin_filter_input', $input_data);

// ... 使用 $filtered_data 进行核心处理 ...

// 在处理完成后,触发一个动作钩子,通知其他开发者
    do_action('my_plugin_after_processing', $filtered_data);

return $result;
}

Door zelfgemaakte hooks te creeren, wordt je plugin zeer uitbreidbaar en voldoet het aan de ontwikkelingsfilosofie van WordPress zelf.

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.

Een beheerpagina en instellingsopties toevoegen aan de plugin

De meeste handige plugins hebben een administratieve interface nodig, zodat de webbeheerder de instellingen van de plugin kan aanpassen. WordPress biedt een uitgebreide API om administratieve menu's en instellingsschermen te creeren.

Allereerst moet je gebruikmaken van...add_action('admin_menu', 'your_function')Je kunt een menu-item registreren met behulp van een hook. In de corresponderende functie moet je deze hook gebruiken.add_menu_page()add_submenu_page()Er zijn functies beschikbaar om een topmenu of submenues te toevoegen. Hieronder staat een basisvoorbeeld van hoe je een topmenu kunt toevoegen en een pagina kunt instellen:

// 钩入 admin_menu 来添加管理菜单
function my_plugin_add_admin_menu() {
    add_menu_page(
        '我的插件设置',           // 页面标题
        '我的插件',               // 菜单标题
        'manage_options',         // 权限(管理员)
        'my-plugin-settings',     // 菜单slug
        'my_plugin_settings_page', // 用于显示页面内容的回调函数
        'dashicons-admin-generic', // 图标(Dashicon)
        80                         // 菜单位置
    );
}
add_action('admin_menu', 'my_plugin_add_admin_menu');

// 定义设置页面的显示内容
function my_plugin_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
            // 输出设置字段和非ce字段
            settings_fields('my_plugin_options_group');
            do_settings_sections('my-plugin-settings');
            submit_button('保存设置');
            ?>
        <input type="hidden" name="trp-form-language" value="nl"/></form>
    </div>
    &lt;?php
}

Registratie- en verificatie-instellingen

Een enkele pagina is niet genoeg; je moet de WordPress Settings API gebruiken om instellingen veilig te registreren, op te slaan en te verifiëren. Dit proces omvat onder andere het gebruik van…register_setting()add_settings_section()add_settings_field()En andere functies.

De volgende code toont hoe je een groep instellingsopties en een tekstveld registreert:

// 初始化插件设置
function my_plugin_settings_init() {
    // 注册一个设置选项组及其数据
    register_setting(
        'my_plugin_options_group', // 选项组名,需与settings_fields()参数一致
        'my_plugin_settings',      // 存储在wp_options表中的选项名
        'my_plugin_sanitize_input' // 可选的验证回调函数
    );

// 添加一个设置区域
    add_settings_section(
        'my_plugin_section_main',
        '主要设置',
        null, // 区域描述的回调函数,可为空
        'my-plugin-settings' // 所属页面的slug
    );

// 向该区域添加一个具体的字段
    add_settings_field(
        'my_plugin_field_text',
        '示例文本字段',
        'my_plugin_field_text_render', // 渲染字段HTML的回调函数
        'my-plugin-settings',
        'my_plugin_section_main'
    );
}
add_action('admin_init', 'my_plugin_settings_init');

// 渲染文本输入字段的函数
function my_plugin_field_text_render() {
    $options = get_option('my_plugin_settings');
    $value = $options['text_field'] ?? ''; // PHP 7.0+ 空合并运算符
    ?>
    <input type='text' name='my_plugin_settings[text_field]' value='<?php echo esc_attr($value); ?>'>
    <?php
}

// 清理和验证输入的函数
function my_plugin_sanitize_input($input) {
    $sanitized_input = [];
    if (isset($input['text_field'])) {
        // 清理文本输入,移除非法标签
        $sanitized_input['text_field'] = sanitize_text_field($input['text_field']);
    }
    return $sanitized_input;
}

Met de Settings API verzorgt WordPress automatisch het opslaan van instellingen, de beveiliging van deze instellingen en de controle op toegangsrechten. Dit versimpelt de ontwikkelingsprocedure aanzienlijk en verbetert de veiligheid.

Samenvatting

In deze handleiding hebben we systematisch de belangrijkste stappen van het ontwikkelen van WordPress-plugins behandeld: van het opzetten van een omgeving en het maken van basispluginfailen tot het begrijpen en gebruiken van de kernmechanismen van WordPress (de zogenoemde ‘hooks’), en uiteindelijk het toevoegen van een professionele beheerinterface en instellingen voor de plugin. Elke stap bevatte belangrijke codefragmenten en standaardpraktijken. Het hart van het pluginontwikkelen is om het uitgebreide hook-systeem van WordPress te gebruiken om nieuwe functies te toevoegen, terwijl de API-specificaties worden gevolgd om veiligheid en compatibiliteit te garanderen. Vergeet niet dat het begonnen is met een simpel idee, dat functies worden toegevoegd in stappen, en dat er tijdens het ontwikkelingsproces steeds grondig getest wordt; dit is de efficiënte manier om een goede plugin te bouwen. Daarna kunt u meer geavanceerde onderwerpen verkennen, zoals het creeren van aangepaste artikeltypes, het toevoegen van shortcodes, het verwerken van AJAX-verzoeken en het internationaliseren van uw plugin.

Veelgestelde vragen (FAQ)

Is het vereist om vloeiend PHP te beheersen om een WordPress-plugin te ontwikkelen?

Ja, een solide kennis van PHP is essentieel. De kern van WordPress en zijn plugins zijn namelijk geschreven in PHP. Je moet de syntaxe van PHP, functies en concepten van objectgericht programmeren begrijpen. Daarnaast is een basiskennis van HTML, CSS en JavaScript heel handig voor het creeren van gebruikersinterfaces en interactieven.

Hoeveel bestanden moet een plugin bevatten?

Er is geen verplichting. Een plugin kan bestaan uit één enkele PHP-hoofdbestand. Maar naarmate de functionaliteit complexer wordt, is het handig om de code op te delen in meerdere bestanden.admin.phpVerwerken in de achtergrond.public.phpFront-end verwerking.includesHet is een betere praktijk om de publieke functies in een aparte map op te slaan, dit helpt bij het organiseren en onderhouden van het codebestand.

Waarom leidt het activeren van mijn plugin tot een wit scherm op de website?

Dit wordt meestal veroorzaakt door een fatale fout (Fatal Error), bijvoorbeeld een syntaxisfout, of het oproepen van een niet-bestaande functie of klasse. Zorg ervoor dat je…wp-config.phpHet is ingeschakeld.WP_DEBUGPatronen en controleren…wp-content/debug.logEr zijn fouten in de bestanden. Je kunt de toegang tot de website snel herstellen door je plugin te deactiveren via FTP of een bestandsbeheerder (door de map met de plugin te hernoemen).

Hoe moet je veilig omgaan met de gegevens die gebruikers vanaf de front-end invoeren?

Je mag nooit vertrouwen op de invoer van gebruikers. Vooraf moet alle data die vanuit vormulieren, URL-parameters of cookies komt worden gevalideerd, gereinigd en geëscapeseerd. WordPress biedt tal van veiligheidsfuncties om dit te kunnen doen.sanitize_text_field()(Tijdens het schoonmaken van de tekst…)esc_url()(Escaped URL)wp_kses_post()(Filter the content using the allowed HTML tags) enintval()(Wanneer je de gegevens naar een HTML-pagina uitvoert, moet je ervoor zorgen dat deze gegevens worden omgezet in hele cijfers.)esc_html()esc_attr()Een aantal functies worden gebruikt om tekens te ontsluiten (of te 'escape').

Hoe kan ik de tekst in mijn plugin ondersteunen voor meerdere talen?

Dit moet worden gerealiseerd door internationalisering (i18n). In je code moet je alle tekststrings die moeten worden vertaald vervangen door gepaste, internationale varianten.__()_e()Function wrapping. Vervolgens moet dit op de juiste manier worden ingesteld in de commentaren bovenin het plugin.Text DomainDomain PathMaak het met een tool als Poedit..potTemplatebestanden, en genereren er versies voor verschillende talen van..po.moWordPress laadt automatisch de juiste vertalingen op op basis van de taainstellingen van de website.