WordPress-pluginontwikkeling beheersen: van nul tot één je eerste eigen plugin bouwen

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

Waarom kiezen je voor het ontwikkelen van WordPress-plug-ins?

WordPress is het populairste content management systeem ter wereld, en de grote schaalbaarheid van het systeem is voornamelijk te danken aan de plugins. Door zelf plugins te ontwikkelen, kun je unieke functies toevoegen aan het platform om specifieke bedrijfsbehoeften te vervullen, zonder dat je de themafailen hoeft aan te passen. Dit zorgt ervoor dat je functies niet verloren gaan wanneer de thema's worden bijgewerkt, en maakt de functies bovendien modulair, waardoor ze gemakkelijk op andere websites kunnen worden gebruikt.

Door te leren hoe je plugins ontwikkelt, kun je niet alleen producten maken die anderen kunnen gebruiken, maar je begrijpt ook beter hoe WordPress werkt. Dit omvat het hook-systeem, de interactie met de database en de beste praktijken voor veiligheid. Dit is een belangrijke stap van een gewone gebruiker naar een ervaren ontwikkelaar.

Maak je eerste plugin

Voordat je met het schrijven van code begint, moet je een standaard WordPress-omgeving opstellen op je lokale computer of op een testserver. Dit vormt de basis voor al het ontwikkelingswerk.

Aanbevolen leesmateriaal WordPress-pluginontwikkeling vanaf nul: bouw je eerste eigen functie

Maak een hoofdbestand voor het plugin.

Elk WordPress-plugin moet een hoofdbestand hebben, dat meestal dezelfde naam heeft als het plugin. We gaan een hoofdbestand maken met de naam...my-first-pluginDe plugin. Allereerst, in het mapverhaal van je WordPress-installatie:/wp-content/plugins/Maak in de map een nieuwe map met de naam:my-first-plugin

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 deze map moet je een bestand maken met de naammy-first-plugin.phpHet gaat om een PHP-bestand. Dit bestand vormt de ingangspunt voor je plugin. Open het en voeg de volgende commentaren voor de pluginkoppen toe; deze informatie is essentieel voor WordPress om je plugin te herkennen.

<?php
/**
 * Plugin Name:       我的第一个插件
 * Plugin URI:        https://yourwebsite.com/my-first-plugin
 * Description:       这是一个学习WordPress插件开发的示例插件,用于在文章底部添加自定义内容。
 * Version:           1.0.0
 * Author:            你的名字
 * Author URI:        https://yourwebsite.com
 * License:           GPL v2 or later
 * Text Domain:       my-first-plugin
 * Domain Path:       /languages
 */

De eerste simpele functionaliteit wordt geïmplementeerd.

Een klassieke functie voor beginners is het automatisch toevoegen van een tekstblok aan het eind van alle artikelen op een website. We zullen dit gebruiken in WordPress. the_content Dit wordt gerealiseerd met filter-hooks. Voeg de volgende functie onder de commentaren aan het begin van je hoofdbestand toe:

// 防止直接访问文件
if ( ! defined( 'ABSPATH' ) ) {
    exit;
}

/**
 * 在文章内容末尾添加自定义文本
 *
 * @param string $content 原始的文章内容。
 * @return string 修改后的文章内容。
 */
function mfp_add_footer_text( $content ) {
    // 判断是否是主循环且在单篇文章页面
    if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
        $custom_text = '<div class="mfp-footer-note"><p><em>Fijn dat je het hebt gelezen! Dit artikel wordt u aangeboden door “Mijn eerste plugin”.</em></p></div>';
        return $content . $custom_text;
    }
    return $content;
}
// 将函数挂载到 `the_content` 过滤器上
add_filter( 'the_content', 'mfp_add_footer_text' );

Deze code definieert een functie. mfp_add_footer_textHet ontvangt de inhoud van de artikelen. $content Als parameter wordt gebruikt om de context aan te geven. Binnen de functie wordt eerst gecontroleerd of de huidige omgeving zich bevindt op de pagina van een enkele artikel, in de hoofdloop of in de hoofdquery. Dit is om te voorkomen dat tekst ook wordt toegevoegd in de samenvatting, widgets of op andere plaatsen. Als de voorwaarden worden vervuld, wordt een aangepaste HTML-text gecreëerd en deze wordt toegevoegd aan het originele content.

In dieper gedachten over de architectuur en de beveiliging van plugins

Naarmate er meer functies worden toegevoegd aan plugins, is een goede organisatie van het codebestand van cruciaal belang. Daarnaast vormt de veiligheid de basis voor al het WordPress-development.

Aanbevolen leesmateriaal Het ontwikkelen van WordPress-plug-ins: van nul tot één, waarbij je je eerste uitbreidingsmodule maakt.

De code herstructureren met objectgerichte programming.

Om de onderhoudbaarheid en uitbreidbaarheid van het codebestand te verbeteren, wordt het aanbevolen om plugins te organiseren op objectgerichte (OOP) manier. We hebben de bovenstaande functionaliteit herstructureerd in een klasse.

// 防止直接访问文件
if ( ! defined( 'ABSPATH' ) ) {
    exit;
}

class My_First_Plugin {
    /**
     * 构造函数,初始化插件钩子。
     */
    public function __construct() {
        // 在构造方法中将方法挂载到钩子上
        add_action( 'init', array( $this, 'load_textdomain' ) );
        add_filter( 'the_content', array( $this, 'add_footer_to_content' ) );
        add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_styles' ) );
    }

/**
     * 加载插件的文本翻译域。
     */
    public function load_textdomain() {
        load_plugin_textdomain( 'my-first-plugin', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' );
    }

/**
     * 在文章内容末尾添加自定义文本。
     */
    public function add_footer_to_content( $content ) {
        if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
            $custom_text = '<div class="mfp-footer-note"><p><em>' . esc_html__( '感谢阅读!本文由“我的第一个插件”为您呈现。', 'my-first-plugin' ) . '</em></p></div>';
            return $content . $custom_text;
        }
        return $content;
    }

/**
     * 为插件添加样式。
     */
    public function enqueue_styles() {
        wp_enqueue_style( 'mfp-style', plugins_url( 'assets/css/style.css', __FILE__ ), array(), '1.0.0' );
    }
}

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

Vergeet niet dat wij… add_footer_to_content De methode gebruikt… esc_html__() Er is een functie die tekst omhult. Dit is een vertaalfunctie die ook de uitgegeven tekst op de juiste manier ontsluit (escapet), wat de beste praktijk is voor het veilig weergeven van tekst. We hebben ook een methode toegevoegd om stijlbestanden (style sheets) te laden, en ondersteuning voor tekstvelden (text fields) geïntroduceerd, zodat de plugin klaar is voor internationalisering (i18n).

Het begrijpen en implementeren van gegevensvalidatie en -ontsnapping.

Vertrouw nooit op de invoer van gebruikers of op externe data. Tijdens het ontvangen, verwerken en weergeven van data moet deze data worden gevalideerd, gereinigd en geëscapeseerd. Als je bijvoorbeeld een beheerpagina met invoerformulieren wilt maken, moet je de door WordPress beschikbare functies gebruiken voor het controleren van toegang (non-CE), het controleren van rechten en het valideren van data.

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 functionaliteit van deze plugin is relatief simpel, maar we hebben deze al gebruikt bij het genereren van HTML. esc_html__() Een escape-methode moet worden gebruikt als een plugin gegevens verwerkt die door de gebruiker zijn ingediend, bijvoorbeeld via een formulier. sanitize_text_field(), wp_kses_post() Verzamel en reinig de betreffende functies, en gebruik ze vervolgens opnieuw. wp_verify_nonce() Om de legitiemheid van de vraag te verifiëren.

Een pagina voor plug-inbeheer maken

Een volwassen plugin heeft meestal een backend-configuratiepagina nodig. We zullen leren hoe we de WordPress Settings-API gebruiken om een eenvoudige, standaard beheerpagina te creeren.

Voeg een menu met instellingen voor plugins toe.

Allereerst moeten we in het WordPress-beheerpaneel, onder het menu “Instellingen”, een submenu toevoegen. Voeg in je klasse een nieuwe methode toe en installeer deze in de constructor. add_action('admin_menu', ...) De hook roept het op.

Aanbevolen leesmateriaal Handboek voor beginners in het ontwikkelen van WordPress-plug-ins: bouw je eerste functionele plugin van scratch

/**
 * 注册插件管理页面。
 */
public function register_admin_menu() {
    add_options_page(
        __( '我的插件设置', 'my-first-plugin' ), // 页面标题
        __( '我的第一个插件', 'my-first-plugin' ), // 菜单标题
        'manage_options', // 所需权限
        'mfp-settings', // 菜单slug
        array( $this, 'display_settings_page' ) // 显示页面的回调函数
    );
}

Vervolgens voeg je dit toe in de constructor:add_action( 'admin_menu', array( $this, 'register_admin_menu' ) );

Construct een instellingenpagina en velden

Volgens de opgegeven tekst moeten we eerst de volgende stappen uitvoeren: display_settings_page Een methode die wordt gebruikt om de HTML-content van de instellingenpagina te renderen, en om met de instellingen-API een instellingsveld te registreren.

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 display_settings_page() {
    ?&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( 'mfp_settings_group' );
            do_settings_sections( 'mfp-settings' );
            submit_button();
            ?>
        <input type="hidden" name="trp-form-language" value="nl"/></form>
    </div>
    <?php
}

/**
 * 初始化插件设置。
 */
public function initialize_settings() {
    // 注册一个设置
    register_setting(
        'mfp_settings_group', // 设置组名
        'mfp_footer_text', // 选项名
        array(
            'type' => 'string',
            'sanitize_callback' =&gt; 'sanitize_text_field', // 清理回调函数
            'default' =&gt; __( '感谢阅读!本文由“我的第一个插件”为您呈现。', 'my-first-plugin' ),
        )
    );

// 添加一个设置区域
    add_settings_section(
        'mfp_main_section',
        __( '主要设置', 'my-first-plugin' ),
        null, // 可选的区域描述回调函数
        'mfp-settings'
    );

// 向区域中添加字段
    add_settings_field(
        'mfp_footer_field',
        __( '页脚文本', 'my-first-plugin' ),
        array( $this, 'render_footer_field' ), // 渲染字段的回调函数
        'mfp-settings',
        'mfp_main_section',
        array( 'label_for' =&gt; 'mfp_footer_text' )
    );
}

Je moet de termen of concepten definiëren. render_footer_field Een manier om de daadwerkelijke invoerbox te weergeven en de vorige versie te updaten… add_footer_to_content Method om dit uit te voeren uit de database-opties get_option('mfp_footer_text') De tekst wordt gelezen uit een bestand, in plaats van uit een hardgecodeerde string. Ten slotte: voeg dit toe in de constructor.add_action( 'admin_init', array( $this, 'initialize_settings' ) );

Samenvatting

Tijdens deze ‘reis’ door dit artikel hebt u vanuit nul een volledig functionerende WordPress-plugin gebouwd. U hebt geleerd hoe u de basisstructuur van een plugin maakt, hoe u WordPress-functionaliteiten kunt uitbreiden met acties en filterhaken, hoe u code op objectgerichte manier organiseert om de kwaliteit te verbeteren, hoe u veiligheidsbest practices volgt om gegevens te verifiëren en te ontsluiten, en hoe u een professionele backend-beheerinterface kunt creëren met behulp van de WordPress Settings API.

Het kernpunt van het ontwikkelen van plugins is om het hook-systeem en de datastroom van WordPress te begrijpen. Door continu te oefenen, te starten met simpele functies en steeds meer complexiteit toe te voegen, moet je altijd veiligheid, prestaties en onderhoudbaarheid voorop stellen. Naarmate je meer ervaring opdoet, zul je in staat zijn om krachtige, professionele en populaire WordPress-plugins te ontwikkelen.

Veelgestelde vragen (FAQ)

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

Je moet over solide kennis van PHP-programmering beschikken, aangezien de plugins voornamelijk in PHP zijn geschreven. Een basiskennis van HTML, CSS en JavaScript is ook nodig, omdat je met de front-end-weergave en interactie moet werken. Het belangrijkste is dat je vertrouwd bent met de kernconcepten van WordPress, zoals hooks (actions en filters), cycli, het template-systeem en database-operaties (met klassen als WP_Query en WP_User_Query).

Hoe debug en test ik mijn plugin?

Allereerst wordt sterk aanbevolen om te ontwikkelen in een lokale omgeving (zoals Local by Flywheel of XAMPP) of op een testwebsite online, om de productiewebsite niet te beïnvloeden. Schakel de debug-modus van WordPress in.wp-config.phpDe instellingen zijn gedaan in het bestand.define( 'WP_DEBUG', true );Dit zorgt ervoor dat PHP-fouten en waarschuwingen op het scherm worden weergegeven.error_log()De functie slaat aangepaste debug-informatie op in het foutenlog van de server. Voor meer complexe debugging-procedures kan je professionele debugging-pluginen gebruiken, zoals Query Monitor of Debug Bar.

Hoe kan mijn plugin worden geïntegreerd met verschillende versies van WordPress?

Tijdens het ontwikkelen moet je aandacht besteden aan de mededelingen in de officiële WordPress-documentatie over vervallen functies. Vergeet niet om functies te gebruiken die als “vervallen” zijn gemarkeerd. In het hoofdbestand van je plugin kun je dit gemakkelijk controleren.Requires at leastTested up toDeze kopinformatie geeft aan welke versie van WordPress je plugin compatibel is met. Test je plugin regelmatig op nieuwe versies van WordPress en houd de logboeken van de core-updates in de gaten, zodat je je code op tijd kunt aanpassen.

Hoe publiceer ik mijn plugin in de officiële WordPress-plugincatalogus?

Allereerst moet je ervoor zorgen dat je plugin volledig voldoet aan de officiële ontwikkelingsregels en aanvraaggevingsrichtlijnen voor plugins. Dit betreft onder andere de kwaliteit van het code, de veiligheid en de licentieovereenkomst (die moet GPLv2 of een hogere versie zijn). Vervolgens moet je op WordPress.org een SVN-repository aanvragen. Sluit de code van je plugin vervolgens op in dit SVN-repository.trunkIn de map (directory) worden de vereiste bestanden opgeslagen, en worden ook de corresponderende onderdelen (components) gecreëerd.readme.txtHet bestand moet worden opgesteld in een specifieke format. Nadat de review is voltooid, zal je plugin worden toegevoegd aan de officiële directory.