Basics van WordPress-pluginontwikkeling
WordPress plugins zijn sets van onafhankelijke PHP-scripts die de kernfuncties van WordPress uitbreiden. Ze bieden ontwikkelaars de mogelijkheid om nieuwe functies toe te voegen of het bestaande gedrag van een website te veranderen, zonder de kernbestanden van WordPress te hoeven aanpassen. Een plugin kan bestaan uit één enkele bestand, of uit een complexe map met meerdere bestanden, scripts en styleheets.
Het begrijpen van de basisstructuur van een plug-in.
Het meest belangrijke bestand van een plugin is het hoofdbestand van de plugin. Dit bestand moet een specifieke plugin-head-commentaar bevatten, waarmee WordPress de plugin kan herkennen. De plugin-head bevindt zich meestal aan het begin van het bestand en bevat informatie als de naam van de plugin, een beschrijving, de versie, de ontwikkelaar, etc. Een voorbeeld van een hoofdbestand voor een plugin met de naam “Mijn Groetplugin” is als volgt: my-greeting-plugin.php De opening van... kan er als volgt uitzien:
<?php
/**
* Plugin Name: 我的问候插件
* Plugin URI: https://example.com/my-greeting-plugin
* Description: 一个简单的插件,用于在网站前台显示问候语。
* Version: 1.0.0
* Author: 开发者名称
* License: GPL v2 or later
* Text Domain: my-greeting-plugin
*/ Naast de plugin-head (de bovenste delen van het plugin-bestand) kun je de functionaliteiten van het plugin gaan schrijven. Alles plugin-code moet worden opgesloten in conditionele statements, om directe toegang te voorkomen en zo securityproblemen te vermijden. Daarnaast moet worden gezorgd dat de code alleen wordt uitgevoerd in een WordPress-omgeving.
Aanbevolen leesmateriaal Van nul beginnen: bouw je eerste WordPress-plugin。
Plugin-directory en bestandsorganisatie
Voor plugins met eenvoudige functionaliteiten is één PHP-bestand voldoende. Maar naarmate de functionaliteit toeneemt, is een goede organisatie van de bestanden van belang. Een typisch plugin-verzeichnis kan de volgende structuur hebben:
- my-plugin/ (Master directory)
- my-plugin.php (Primary plugin file)
- uninstall.php (Uninstallation script)
- includes/ (Directory waar de belangrijkste functionaliteiten of functies zijn opgeslagen)
- admin/ (Directory waar de code voor het backend-beheer is opgeslagen)
- public/ (Directory waar de code voor de front-end van de website is opgeslagen)
- assets/ (Directory waar JavaScript-, CSS- en afbeeldingsbestanden zijn opgeslagen)
- languages/ (Directory waar de internationale vertalingen zijn opgeslagen)
Deze modulaire structuur maakt de code eenvoudiger te onderhouden, te testen en te gebruiken in samenwerking.
Core development concepts: Hooks en filters
Het kernpunt van het ontwikkelen van WordPress-plug-ins is het “Hook”-systeem. Hooks bieden je de mogelijkheid om je eigen code op bepaalde momenten tijdens het uitvoeren van WordPress in te voegen, waardoor je de standaardwerking kunt veranderen of uitbreiden. Er zijn twee belangrijke types hooks: Action Hooks en Filter Hooks.
Functies toevoegen met action-hooks
Action hooks worden uitgevoerd wanneer een bepaald evenement plaatsvindt, bijvoorbeeld wanneer een artikel wordt gepubliceerd, een gebruiker inlogt of een beheerpagina wordt geladen. Ze retourneren geen waarde aan de oproeper, maar dienen alleen om een bepaalde actie uit te voeren. Je kunt ze dus gebruiken om specifieke taken of processen te automatiseren. add_action() De functie “monteert” zichzelf op een actie-hook.
Als je bijvoorbeeld een persoonlijke tekst wilt toevoegen aan de voet van de frontpage van je website, kun je dit doen met... wp_footer Deze actie-hook: In het hoofdbestand van het plugin kun je dit op de volgende manier schrijven:
Aanbevolen leesmateriaal Ultimatumgids voor het ontwikkelen van WordPress-plug-ins: van nul tot een zelfgemaakte functionaliteit。
function myplugin_add_footer_text() {
echo '<p style="text-align:center;">Fijn dat je deze website gebruikt!</p>';
}
add_action( 'wp_footer', 'myplugin_add_footer_text' ); Als WordPress dit punt bereikt… wp_footer Wanneer de locatie wordt bepaald, wordt automatisch de service opgeroepen die je hebt geregistreerd. myplugin_add_footer_text Functie.
Inhoud bewerken met filterhooks
Filterhooks worden gebruikt om gegevens te bewerken. Ze geven je de mogelijkheid om de gegevens te veranderen voordat deze naar de database of de browser worden gestuurd. De filterfunctie moet de gewijzigde waarden teruggeven. add_filter() Een functie voor het registreren van filters.
Een veel voorkomend voorbeeld is het wijzigen van de titel van een artikel. Stel je voor dat je wilt dat er automatisch een merkteken (™) wordt toegevoegd aan de titel van alle artikelen. Hiervoor kun je gebruikmaken van… the_title Filter:
function myplugin_modify_post_title( $title, $post_id ) {
// 确保只在主循环且不是管理后台中修改
if ( ! is_admin() && in_the_loop() ) {
$title = $title . ' ™';
}
return $title;
}
add_filter( 'the_title', 'myplugin_modify_post_title', 10, 2 ); De parameters hier 10 Dit betreft de prioriteit (hoe lager het nummer, des eerder wordt de actie uitgevoerd).2 Dit betekent dat onze callback-functie twee parameters accepteert.$title 和 $post_id)。
Een pagina voor plug-inbeheer maken
Veel plugins vereisen een instellingenpagina in het WordPress-beheerpaneel, zodat gebruikers opties kunnen instellen. WordPress biedt een uitgebreide API aan voor het creeren van hoofdmenues en submenues.
Beheerdersmenu op bovenste niveau toevoegen
Je kunt gebruikmaken van add_menu_page() De functie maakt een apart beheermenu voor je plugin. De functie vereist meerdere parameters, waaronder de paginatitel, het menu-itemtitel, de gebruikersrechten, de menu-naam, en een callback-functie.
Aanbevolen leesmateriaal De volledige gids voor het ontwikkelen van WordPress-plug-ins: van beginner tot expert, met praktische tutorials。
De volgende code toont hoe je een eenvoudige topmenu-pagina kunt toevoegen:
function myplugin_add_admin_menu() {
add_menu_page(
'我的插件设置', // 页面标题
'我的插件', // 菜单标题
'manage_options', // 所需权限(管理员)
'myplugin-settings', // 菜单别名(URL中的slug)
'myplugin_settings_page', // 用于输出页面内容的回调函数
'dashicons-admin-generic', // 菜单图标(使用Dashicons)
30 // 菜单位置
);
}
add_action( 'admin_menu', 'myplugin_add_admin_menu' );
// 定义输出页面内容的回调函数
function myplugin_settings_page() {
?>
<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
// 输出设置字段和安全 nonce 字段
settings_fields( 'myplugin_options' );
do_settings_sections( 'myplugin-settings' );
submit_button( '保存设置' );
?>
<input type="hidden" name="trp-form-language" value="nl"/></form>
</div>
<?php
} Maak een optie met behulp van de settings API.
Het handmatig verwerken van formulierinzendingen en -verificatie is tijdrovend en onveilig. WordPress biedt via zijn API een gestandaardiseerde manier om instellingen te registreren, te verifiëren en op te slaan. Hiervoor worden drie belangrijke functies gebruikt:register_setting()、add_settings_section() 和 add_settings_field()。
Het volgende voorbeeld toont hoe je een instellingengroep en een tekstveld registreert:
function myplugin_settings_init() {
// 注册一个新的设置组 “myplugin_options” 到 “reading” 页面(这里我们用自己的页面)
register_setting(
'myplugin-settings', // 选项组,通常与页面别名一致
'myplugin_options', // 存储在 wp_options 表中的选项名
'myplugin_sanitize_callback' // 可选的清理回调函数
);
// 在页面中添加一个区域
add_settings_section(
'myplugin_section_main', // 区域的ID
'主要设置', // 区域标题
'myplugin_section_callback', // 区域描述的回调函数
'myplugin-settings' // 页面别名
);
// 向区域中添加一个字段
add_settings_field(
'myplugin_field_greeting', // 字段ID
'问候语', // 字段标签
'myplugin_field_greeting_callback', // 用于输出字段HTML的回调函数
'myplugin-settings', // 页面别名
'myplugin_section_main', // 区域ID
[ 'label_for' => 'myplugin_field_greeting' ] // 额外参数
);
}
add_action( 'admin_init', 'myplugin_settings_init' );
// 字段HTML的回调函数
function myplugin_field_greeting_callback() {
$options = get_option( 'myplugin_options' );
$value = isset( $options['greeting'] ) ? $options['greeting'] : '你好,世界!';
echo '<input type="text" id="myplugin_field_greeting" name="myplugin_options[greeting]" value="' . esc_attr( $value ) . '" class="regular-text" />';
} Sicherheid van plugins en beste praktijken
Een populaire plugin ontwikkelen waarbij veiligheid en de kwaliteit van het code een topprioriteit zijn, is van belang. Onveilige plugins kunnen namelijk een opening bieden voor aanvallen op een website.
Datavalidatie, -reiniging en -ontsnapping
Vertrouw nooit op gegevens die door gebruikers worden ingevoerd of uit een database komen. Voor het verwerken van gegevens moet deze gegevens eerst worden gevalideerd (validated), gesaniteerd (sanitized) en geëscapeerd (escaped).
- Verificatie: Kontroleren of de gegevens voldoen aan de verwachte formaten of regels (bijvoorbeeld of het een e-mailadres of een cijfer is). Hierbij kunnen functies worden gebruikt als…
is_email()、ctype_digit()Of een reguliere expressie. - Clean-up: Voordat gegevens worden opgeslagen in een database of worden gebruikt voor andere doeleinden, moeten onveilige of onnodige elementen uit de gegevens worden verwijderd. Voor verschillende soorten gegevens worden geschikte clean-up-functies gebruikt.
sanitize_text_field()(Gebruikt voor tekst)sanitize_email()(Gebruikt voor e-mailadressen)intval()(Gebruikt voor hele getallen.) - Escaping: Zorg ervoor dat gegevens veilig worden gecodeerd wanneer deze worden uitgegeven naar HTML, JavaScript of een URL, om zo aanvallen met cross-site scripting (XSS) te voorkomen. Gebruik hierbij functies als…
esc_html()、esc_attr()、esc_url()和wp_kses()。
Als je bijvoorbeeld de groetopties opslaat en vervolgens weer uitvoert die we eerder hebben gemaakt:
// 在保存设置时的清理回调函数中
function myplugin_sanitize_callback( $input ) {
$sanitized = [];
if ( isset( $input['greeting'] ) ) {
// 清理文本输入
$sanitized['greeting'] = sanitize_text_field( $input['greeting'] );
}
return $sanitized;
}
// 在前台输出问候语时
function myplugin_display_greeting() {
$options = get_option( 'myplugin_options' );
$greeting = isset( $options['greeting'] ) ? $options['greeting'] : '你好,世界!';
// 在输出到HTML前进行转义
echo '<div class="greeting">'`. esc_html($greeting).`'</div>';
} Internationalisatie ondersteunen implementeren
Om je plugin beschikbaar te maken voor gebruikers overal ter wereld, is het belangrijk om internationaalization (i18n) te ondersteunen. Dit betekent dat alle teksten die worden gebruikt door de gebruiker in functies voor vertaling moeten worden opgeslagen, zodat ze gemakkelijk kunnen worden vertaald naar andere talen.
WordPress gebruikt het GNU gettext-framework. De belangrijkste vertaalfuncties zijn… __()(Used to obtain the translated string) and _e()Je moet een unieke tekstdomain instellen voor je plugin. De tekstdomain is al gedefinieerd in de plugin-head.
In je code moet je dit op de volgende manier gebruiken:
// 获取翻译后的字符串并赋值给变量
$message = __( '感谢你使用我的插件!', 'my-greeting-plugin' );
// 直接输出翻译后的字符串
_e( '设置已成功保存。', 'my-greeting-plugin' );
// 带占位符的翻译
printf(
__( '欢迎,%s!', 'my-greeting-plugin' ),
esc_html( $username )
); Vervolgens kun je gebruikmaken van een tool als Poedit om deze strings uit het codebestand te halen en te genereren. .pot Templatebestanden: vertalers kunnen er mee verschillende talenversies van een tekst van maken. .po 和 .mo De bestanden worden vervolgens in het plugin geplaatst. /languages/ Catalogus.
Samenvatting
Het ontwikkelen van WordPress-plug-ins is een krachtig en flexibele gebied dat ontwikkelaars de mogelijkheid biedt om WordPress dieper te personaliseren en uit te breiden. Het begint met het begrijpen van de basisstructuur van plug-ins en het hook-systeem, gaat verder met het creeren van interactieve beheerinterfaces, en eindigt met het naleven van strenge veiligheids- en internationale standaarden. Elke stap is essentieel voor het bouwen van kwalitatief goede, onderhoudsbare en populaire plug-ins. Vergeet niet dat het belangrijk is om de rijke API's van WordPress te gebruiken in plaats van deze te omzeilen. Door het modulair organiseren van je code, het zorgvuldig verwerken van gegevens en vanaf het begin rekening te houden met multilingualiteit, zal je plugin niet alleen krachtig zijn, maar ook veilig, professioneel en klaar voor wereldwijde gebruik.
Veelgestelde vragen (FAQ)
Een WordPress-plugin bestaat minstens uit een paar bestanden. De meest voorkomende bestanden zijn:
Een plugin vereist in principe maar één PHP-bestand. Zodra dit bestand de juiste commentaren voor de pluginheader (Plugin Header Comment) bevat, herkent en activeert WordPress de plugin in de lijst met beschikbare plugins in de achtergrond. Dit ene bestand kan al het nodige code voor de plugin bevatten.
Hoe voorkom je dat de namen van plugins met die van andere plugins conflicteren?
Om te voorkomen dat de namen van functies, klassen of constanten in conflict komen met andere plugins of thema's, moet je unieke prefixen gebruiken. Meestal kan dit prefix gebaseerd zijn op de naam of afkorting van je plugin. Als je bijvoorbeeld een plugin heet “Awesome Slider”, kun je bijvoorbeeld het prefix ‘aws’ gebruiken. as_ 或 awesome_slider_ Als prefix voor alle functies en klassen. Voor de namen van klassen kan men een unieke, ruimtewijzige (namespace-based) structuur overwegen.
Hoe worden de gegevens in de database verwijderd wanneer een plugin wordt uninstalled?
WordPress biedt twee manieren om de opruimingswerkzaamheden na het uninstallen van een plugin te regelen. De eerste manier is om een uninstall-hook te registreren; dit doe je in het hoofdpluginbestand van je plugin. register_uninstall_hook() De functie bepaalt een callback-functie die de door de plugin gecreerde databanken en opties verwijdert. De tweede, en tevens meer aan te raden, methode is om een aparte (onafhankelijke) component of functie te maken voor het verwijderen van deze gegevens. uninstall.php File: Wanneer een gebruiker een plugin verwijdert via de WordPress-beheerpanel, wordt de code uit deze file automatisch uitgevoerd door WordPress. In deze file moet je de constante waarden controleren. WP_UNINSTALL_PLUGIN Worden de plugins eerst gedefinieerd, en worden de gegevens daarna veilig verwijderd?
Hoe moet ik JavaScript- en CSS-bestanden toevoegen aan mijn plugin?
Je moet de queue-functies die WordPress biedt gebruiken om scripts en styleheets op de juiste manier te toevoegen, in plaats van ze rechtstreeks in het HTML-tekenbestand uit te geven. <script> 或 <link> Taggen. Voor front-end-resources wordt dit gebruikt. wp_enqueue_script() 和 wp_enqueue_style() Functies, en deze worden vervolgens geïntegreerd in wp_enqueue_scripts Op de actie-haken. Voor de resources in het beheerderspaneel worden ze gemonteerd. admin_enqueue_scripts Op de haak. Dit zorgt ervoor dat de afhankelijkheden correct worden verwerkt en dat dubbele laden van dezelfde bron wordt voorkomen.
Hoe kun je bij het ontwikkelen van een plugin debuggen?
Allereerst moet je zorgen dat… wp-config.php De WordPress-debogagemode is in het bestand ingeschakeld. WP_DEBUG De constante is ingesteld op... trueJe kunt ze ook allemaal tegelijkertijd activeren. WP_DEBUG_LOG(Registreren van fouten in een bestand) en WP_DEBUG_DISPLAY(Fout wordt weergegeven op het scherm.) Gebruik dit. error_log() De functie slaat aangepaste debug-informatie op in het serverlogboek. Daarnaast kan je de JavaScript- en AJAX-verzoeken debuggen met de console en het netwerkpaneel van de browserdevelopertools. Voor complexe logica kun je professionele PHP-debugging-hulpmiddelen gebruiken, zoals Xdebug.
De volgende stap, wat moeten we als volgende doen?
Voor meer informatie en praktische kennis
De volgende content is relevant voor het onderwerp van dit artikel en is geschikt voor verder lezen. Het kan vaak effectief zijn om eerst het artikel te lezen dat het dichtst bij uw huidige vraagstuk staat en vervolgens geleidelijk aan artikelen over aanverwante onderwerpen te bekijken.
- Hoe kies je en maak je je eigen perfecte WordPress-thema?
- WordPress-pluginontwikkelingsgids: van nul tot één: maak je eerste eigen plugin
- Wat is een WordPress subtheme?
- Werken als WordPress-pluginontwikkelaar: een volledig handboek van nul tot één
- Van nul naar één: een volledige handleiding en praktische tips voor het bouwen van professionele websites met WordPress.