Basics van WordPress-pluginontwikkeling en het opzetten van een ontwikkelingsomgeving
Het kernpunt van het ontwikkelen van WordPress-plug-ins is het uitbreiden van de basisfuncties van WordPress, en dit begint allemaal met een goed georganiseerde ontwikkelomgeving. Een plugin bestaat in feite uit één of meerdere PHP-bestanden die zijn opgeslagen in de installatie-map van WordPress./wp-content/plugins/In de map vind je alle plugins. Elke plugin moet een hoofdbestand hebben. De commentaren die zich aan het begin van dit bestand bevinden vormen de “identiteitsgegevens” van de plugin en worden gebruikt om het WordPress-systeem de basisinformatie over de plugin mee te delen.
Een typisch commentaar in het begin van een plugin looks als volgt:
<?php
/**
* Plugin Name: 我的第一个WordPress插件
* Plugin URI: https://example.com/my-first-plugin
* Description: 这是一个用于演示的简单插件。
* Version: 1.0.0
* Author: 开发者名称
* Author URI: https://example.com
* License: GPL v2 or later
* Text Domain: my-first-plugin
*/ Deze commentaar is van cruciaal belang, omdat hij ervoor zorgt dat de plugin wordt weergegeven op de “Plugins”-pagina in het WordPress-administratiecentrum.Text DomainVoor internationaal gebruik, om de vervolgende vertaalmogelijkheden voor te bereiden.
Aanbevolen leesmateriaal Volledig handboek voor het ontwikkelen van WordPress plugins: een praktische handleiding van nul tot live publicatie。
Configuratie van het lokale ontwikkelingsmilieu
Voordat je met het coderen begint, is het efficiënt en veilig om een lokale ontwikkelomgeving op te zetten. Het wordt aanbevolen om tools als XAMPP, MAMP, Local by Flywheel of Docker te gebruiken om een lokale server te instellen met Apache/Nginx, MySQL en PHP. Zorg ervoor dat je PHP-versie overeenkomt met de vereisten van de huidige versie van WordPress (meestal wordt PHP 7.4 of een hogere versie aanbevolen).wp-config.phpActiveren in ChinaWP_DEBUGMogelijkheden en patronen die worden gebruikt tijdens het ontwikkelingsproces helpen om fouten snel op te sporen en te corrigeren.
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true ); // 将错误日志保存到 /wp-content/debug.log
define( 'WP_DEBUG_DISPLAY', false ); // 不在页面上显示错误信息 Core architectuur van plugins en het hookmechanisme
Het begrijpen van het WordPress-hookmechanisme is essentieel voor het ontwikkelen van plugins. Hooks bieden je de mogelijkheid om je plugin op specifieke momenten in de kernprocessen van WordPress te integreren en daar custom code uit te voeren. Er zijn voornamelijk twee soorten hooks: Actions en Filters.
Action hooks en filter hooks
Action Hooks bieden je de mogelijkheid om code uit te voeren wanneer een bepaald evenement plaatsvindt. Denk hierbij aan het sturen van een notificatie-e-mail na het publiceren van een artikel of het bijhouden van een log wanneer een gebruiker inlogt.add_action()Er is een functie beschikbaar om je eigen functie te registreren voor een bepaald actie-hook (action hook).
function myplugin_send_notification( $post_id ) {
// 当文章发布时,执行发送通知的逻辑
wp_mail( '[email protected]', '新文章已发布', '文章ID:' . $post_id );
}
// 将 myplugin_send_notification 函数挂载到 ‘publish_post’ 这个动作钩子上
add_action( 'publish_post', 'myplugin_send_notification' ); Filter hooks bieden je de mogelijkheid om de gegevens die worden overgedragen tijdens een bepaald proces te bewerken. Je kunt bijvoorbeeld de weergave van artikelinhoud aanpassen of de teruggegeven waarde van een bepaalde functie veranderen.add_filter()Een functie voor het registreren van filters.
function myplugin_modify_content( $content ) {
// 在文章内容的末尾追加一段自定义文本
$custom_text = '<p><em>Fijn dat je het hebt gelezen! Dit artikel is toegevoegd door mijn plugin.</em></p>';
return $content . $custom_text;
}
// 将 myplugin_modify_content 函数挂载到 ‘the_content’ 这个过滤器钩子上
add_filter( 'the_content', 'myplugin_modify_content' ); Constructeer de hoofdklasse van het plugin.
Hoewel eenvoudige plugins alleen uit enkele functies kunnen bestaan, wordt het sterk aanbevolen om een objectgerichte (OOP) benadering te gebruiken om de functionaliteit van de plugin te verpakken in een hoofdclass. Dit bevordert de modulariteit en onderhoudbaarheid van het codebestand, en voorkomt namelijk namenconflicten. Dit is de beste praktijk in het ontwikkelen van moderne WordPress-plugins.
Aanbevolen leesmateriaal WordPress-themaontwikkeling voor beginners: bouw je eerste thema van scratch。
class My_First_Plugin {
public function __construct() {
// 在构造函数中挂载所有的钩子
add_action( 'init', array( $this, 'register_shortcode' ) );
add_action( 'admin_menu', array( $this, 'add_admin_page' ) );
}
public function register_shortcode() {
add_shortcode( 'greeting', array( $this, 'render_greeting' ) );
}
public function render_greeting( $atts ) {
return '<h3>Hallo, WordPress!</h3>';
}
public function add_admin_page() {
add_menu_page(
'我的插件设置',
'我的插件',
'manage_options',
'my-plugin-settings',
array( $this, 'render_admin_page' )
);
}
public function render_admin_page() {
echo '<div class="wrap"><h2>Plugin-instellingenpagina</h2><p>Dit is de beheerinterface.</p></div>';
}
}
// 初始化插件
new My_First_Plugin(); Creëer een beheerinterface en kortere codes.
Een goed uitgerust plugin moet meestal met de gebruiker kunnen interageren. Dit betekent dat het webbeheerders toegang biedt tot achtergrondinstellingen en dat contenteditoren eenvoudige manieren hebben om bepaalde functies te gebruiken via de front-end.
Een backend-instellingenpagina bouwen
WordPress biedt een uitgebreide API aan voor het maken van backend-menues en sub-menues.add_menu_page()、add_submenu_page()Op de instellingenpagina kun je de WordPress Settings API gebruiken om opties veilig te registreren, te verifiëren en op te slaan. Dit is veiliger dan wanneer je dit handmatig doet.$_POSTDe gegevens moeten veel veiliger en betrouwbaarder zijn.
public function add_admin_page() {
add_options_page(
'我的插件选项', // 页面标题
'我的插件', // 菜单标题
'manage_options', // 权限要求
'my-plugin-options', // 菜单slug
array( $this, 'options_page_html' ) // 回调函数,用于输出页面HTML
);
// 注册设置、节和字段
add_action( 'admin_init', array( $this, 'register_settings' ) );
}
public function register_settings() {
register_setting( 'myplugin_options_group', 'myplugin_option_name' );
add_settings_section( 'myplugin_section_id', '主要设置', null, 'my-plugin-options' );
add_settings_field( 'myplugin_field_id', '示例字段', array( $this, 'field_html' ), 'my-plugin-options', 'myplugin_section_id' );
}
public function field_html() {
$option = get_option( 'myplugin_option_name' );
echo '<input type="text" name="myplugin_option_name" value="' . esc_attr( $option ) . '" />';
}
public function options_page_html() {
if ( ! current_user_can( 'manage_options' ) ) return;
?>
<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_group' );
do_settings_sections( 'my-plugin-options' );
submit_button();
?>
<input type="hidden" name="trp-form-language" value="nl"/></form>
</div>
<?php
} De functionaliteit van kortere codes implementeren
Shortcodes bieden een goede manier om gebruikers in artikelen of pagina's eenvoudig plug-in-functies te kunnen integreren.add_shortcode()De functie wordt geregistreerd, en de callback-functie ontvangt de attributen.$atts) en de inhoud ($contentDeze functie neemt parameters op en returneert de uiteindelijke inhoud die moet worden weergegeven.
public function register_shortcodes() {
add_shortcode( 'display_latest_posts', array( $this, 'render_latest_posts' ) );
}
public function render_latest_posts( $atts ) {
// 设置默认属性,并使用 shortcode_atts 合并用户传入的属性
$attributes = shortcode_atts( array(
'count' => 5,
'category' => '',
), $atts );
$args = array(
'posts_per_page' => intval( $attributes['count'] ),
'post_status' => 'publish',
);
if ( ! empty( $attributes['category'] ) ) {
$args['category_name'] = sanitize_text_field( $attributes['category'] );
}
$query = new WP_Query( $args );
$output = '<ul>';
while ( $query->have_posts() ) {
$query->the_post();
$output .= '<li><a href="/nl/' . get_permalink() . '/">'. get_the_title() . '</a></li>';
}
wp_reset_postdata();
$output .= '</ul>';
return $output;
} Plugin-beveiliging, prestaties en voorbereiding op publicatie
Tijdens de laatste fase van de ontwikkeling moet je ervoor zorgen dat het plugin veilig, efficiënt is en gemakkelijk te distribueren is. Het negeren van deze aspecten kan leiden tot securitylekken, een trager werkende website of een slechte gebruikerservaring.
Beveiliging en datavalidatie
Alles data dat vanuit gebruikers of externe bronnen (zoals URL-parameters, formulierinvoer of databases) wordt ontvangen, is onbetrouwbaar. Het is noodzakelijk om deze data te verifiëren, te reinigen en te ontsnappen (te ‘escape’) met de verschillende functies die WordPress biedt.
* 验证(Validation):检查数据是否符合预期格式(如是否为邮箱、数字),使用is_email()、intval()etc.
* 清理(Sanitization):在数据保存到数据库之前,移除其中不安全的字符,使用sanitize_text_field()、sanitize_email()、wp_kses_post()etc.
* 转义(Escaping):在将数据输出到HTML、JavaScript或URL之前,对其进行编码,防止XSS攻击,使用esc_html()、esc_js()、esc_url()、esc_attr()etc.
Voor database-operaties moet u altijd gebruikmaken van…$wpdbDe door de klasse geboden methoden worden gebruikt.prepare()Vraagstellingen worden parametergevend uitgevoerd om SQL-injecties te voorkomen.
Aanbevolen leesmateriaal Het principe van CDN-versnelling en een praktische handleiding: hoe je het beste contentdistributienetwerk kiest voor jouw website.。
Prestatieoptimalisatie en latere onderhoud
Prestaties zijn essentieel voor de gebruikerservaring. Vermeid het uitvoeren van tijdrovende queries of verwerkingstaken bij het laden van elke pagina. Voor data die niet vaak verandert, kun je de Transients API van WordPress gebruiken voor het opslaan van deze gegevens.
$data = get_transient( 'myplugin_expensive_data' );
if ( false === $data ) {
$data = // ... 执行复杂的数据库查询或远程API调用 ...
set_transient( 'myplugin_expensive_data', $data, HOUR_IN_SECONDS ); // 缓存1小时
} Om internationale en lokale ondersteuning te bieden voor plugins, moet gebruik worden gemaakt van...__()、_e()De `wrap`-functie omhult al het tekstuele materiaal dat voor de gebruiker zichtbaar is, en...load_plugin_textdomain()De taalbestand wordt geladen. Het is ook belangrijk om het levenscyclus van de plugin goed te plannen en de code voor de activering (activation) te schrijven.register_activation_hook)、 uitschakelen (register_deactivation_hook) en ontmaken (register_uninstall_hookDe logica voor het verwerken van hooks wordt gebruikt om database-tabellen te creeren of te verwijderen, en om opties te schoonmaken.
Verbinding voor publicatie voorbereiden: documenten en pakketten
Voordat je het publiceert, maak je een gedetailleerde…readme.txtDe bestanden moeten voldoen aan de officiële specificaties van WordPress, waaronder een beschrijving van het plugin, instructies voor het installeren, antwoord op veel voorkomende vragen en een logboek met updates. Dit is de introductiepagina van je plugin in het WordPress-pluginverzeichnis. Zorg ervoor dat de structuur van je pluginverzeichnis duidelijk is, dat alleen essentiële bestanden zijn opgenomen, en dat je het plugin gebruikt in een standaard ZIP-indeling pakket.
Samenvatting
Het ontwikkelen van WordPress-plug-ins is een proces waarbij ideeën worden omgezet in functionele onderdelen van een website. Dit gebeurt op basis van een diepe begrijping van de kernarchitectuur van WordPress, met name van het hook-systeem. De eerste stappen om te beginnen zijn het opzetten van een ontwikkelomgeving en het schrijven van de basiscode voor het plug-in. Vervolgens is het belangrijk om ervaring op te doen met het gebruik van action- en filter-hooks. Het organiseren van de code op objectgerichte manier zorgt voor een grotere onderhoudsvriendelijkheid van het project. Een veilige achtergrondinterface wordt gecreëerd met behulp van de Settings API, terwijl flexibele front-end-functies worden geboden door het gebruik van kortere code. Het is essentieel om tijdens het ontwikkelproces altijd rekening te houden met beste praktijken op het gebied van veiligheid (verificatie, schoonmaken van gegevens, encoding), prestaties (caching, optimalisatie van queries) en internationalisering. Ten slotte is het belangrijk om gedetailleerde documentatie voor te bereiden, zodat je een professioneel, betrouwbaar en populair WordPress-plug-in kunt maken.
Veelgestelde vragen (FAQ)
Welke programmeeringsvaardigheden zijn nodig om een WordPress-plugin te ontwikkelen?
De belangrijkste vereiste is vloeiendheid in PHP, aangezien WordPress zelf, evenals zijn plugins en thema's, zijn geschreven in PHP. Daarnaast moet men een basiskennis hebben van HTML, CSS en JavaScript, om de front-end-interfaces en interactieve logica van de plugins te kunnen bouwen. Als er complexe database-operaties worden uitgevoerd, is ook basiskennis van SQL nodig.
Hoe voorkom ik dat de plugin die ik ontwikkeld heb conflicten vertoont met andere plugins?
De belangrijkste methode is om de unieke aard van de namen van je functies, klassen, variabelen en andere identificatoren te garanderen. De beste praktijk is om objectgericht te programmeren en al het codegedrag in één klasse te verpakken. Voor functies en globale variabelen kun je unieke prefixen gebruiken; bijvoorbeeld afkortingen of namen van plugins als prefix.myplugin_function_name或MyPlugin_ClassName。
Waarom heeft mijn plugin een menu toegevoegd in de achtergrond, maar wordt er op de pagina gemeld dat “u geen voldoende toegang hebt om deze pagina te bekijken”?
Dit komt doordat er tijdens de oproep...add_menu_page()Wanneer je een dergelijke functie gebruikt, zijn de ingestelde parameter 'Capability' niet correct. Je moet ervoor zorgen dat de derde parameter (de toegangrechten) overeenkomt met de rechten van de huidige gebruiker. Voor instellingen die alleen toegankelijk zijn voor beheerders, worden deze rechten meestal anders gedefinieerd.‘manage_options’Je kunt de functie opnieuw gebruiken in de callback-functie.current_user_can( ‘manage_options’ )Controleer dit.
Hoe kan ik vertaalsupport toevoegen aan mijn plugin?
Allereerst moet de juiste instelling worden gemaakt in de commentaren bovenin het hoofdbestand van het plugin.Text Domain(zoals)my-pluginVervolgens wordt dit gebruikt…__( ‘Text’, ‘my-plugin’ )或_e( ‘Text’, ‘my-plugin’ )De functie bevat alle strings die moeten worden vertaald. Ten slotte worden deze strings vertaald wanneer het plugin wordt initialiseerd (bijvoorbeeld...).initIn gebruik tijdens de actieload_plugin_textdomain()Er bestaan functies om taalbestanden te laden. Je kunt tools gebruiken als Poedit om deze taalbestanden te creeren..potTemplatebestanden en.po/.moVertaalde bestand:
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.
- Gids voor het opzetten van een website: van nul tot een volledig begrip van het moderne webontwikkelingsproces
- Hoe kies je en maak je je eigen perfecte WordPress-thema?
- WordPress-pluginontwikkelingsgids: van nul tot één: maak je eerste eigen plugin
- 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.