WordPress-themaontwikkeling: beheers de kernpraktijken en -optimalisaties van het bestand 'functions.php'

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

De definitie en de belangrijkste functie van het bestand `functions.php`

In een WordPress-thema:functions.phpHet is een bijzondere en krachtige bestand. In feite handelt het om een plugin-bestand dat is gespecificeerd voor een bepaald thema. Het wordt geladen wanneer het thema wordt activerd en wordt uitgeschakeld wanneer het thema wordt uitgeschakeld. De belangrijkste functie van dit bestand is om het thema te voorzien van aangepaste functies en om de werking van WordPress zelf te kunnen aanpassen, zonder dat de kernbestanden van WordPress hoeven te worden gewijzigd of dat er aparte plugins worden gemaakt. Dit betekent dat ontwikkelaars al de customisaties voor het thema kunnen beheren in één plek: van eenvoudige functies zoals het instellen van een featured image, tot complexere aanpassingen zoals het registreren van aangepaste artikeltypes, het bouwen van thema-optiespanelen, en het gebruik van hooks en filters.

Het begrijpen vanfunctions.phpHet bereik (scope) van deze functie is van cruciaal belang. De functie is alleen van toepassing op het thema waar het zich bevindt, waardoor de portabiliteit van de functie en de integriteit van het thema worden gewaarborgd. Door code te schrijven in deze bestand, kun je veilig bijna alle functies toevoegen aan je website, terwijl je de flexibiliteit voor toekomstige updates en themaveranderingen behoudt. Zowel voor beginners als voor ervaren ontwikkelaars is het een must om deze bestand grondig te bestuderen en vloeiend te beheersen; dit is een essentieel stappenplan om van het bewerken van basis-themes over te gaan naar het ontwikkelen van geavanceerde thema's.

Initial configuratie van themafuncties en veelgebruikte functies

Activatie van de themaondersteuningsfunctie

Elke moderne WordPress-thema moet aangeven welke kernfuncties het ondersteunt. Dit moet worden gedaan door…add_theme_support()Deze functie wordt gebruikt om te specificeren welke mogelijkheden je thema ondersteunt. WordPress gebruikt deze informatie om te bepalen hoe bepaalde functies worden weergegeven, zoals artikelafbeeldingen, een aangepast logo of ondersteuning voor HTML5-markeringen.

Aanbevolen leesmateriaal Handboek voor het ontwikkelen van WordPress-themes op hoog niveau: van nul een professioneel, responsief thema bouwen

if ( ! function_exists( 'mytheme_setup' ) ) {
    function mytheme_setup() {
        // 支持文章和评论的Feed链接
        add_theme_support( 'automatic-feed-links' );
        // 启用文章特色图像功能
        add_theme_support( 'post-thumbnails' );
        // 启用自定义Logo功能
        add_theme_support( 'custom-logo', array(
            'height'      => 100,
            'width'       => 400,
            'flex-height' => true,
            'flex-width'  => true,
        ) );
        // 对文章格式和页面标题的HTML5标记支持
        add_theme_support( 'html5', array( 'search-form', 'comment-form', 'comment-list', 'gallery', 'caption' ) );
        add_theme_support( 'title-tag' );
    }
}
add_action( 'after_setup_theme', 'mytheme_setup' );

Verpak de configuratiecode in een speciale omhulding of structuur.after_setup_themeZorg ervoor dat de hooks tijdens de initialisatie van het thema correct worden uitgevoerd.

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.

Registratie in het navigatiemenu en de sidebar

Een compleet thema bevat meestal een aanpasbaar navigatiemenu en een gebied voor widgets (een zijbalk). Hiervoor zijn bepaalde tools nodig.register_nav_menus()register_sidebar()Functie.

// 注册主题菜单位置
function mytheme_register_menus() {
    register_nav_menus( array(
        'primary' => __( '主导航菜单', 'mytheme' ),
        'footer'  => __( '底部菜单', 'mytheme' ),
    ) );
}
add_action( 'after_setup_theme', 'mytheme_register_menus' );

// 注册一个小工具区域
function mytheme_widgets_init() {
    register_sidebar( array(
        'name'          => __( '主侧边栏', 'mytheme' ),
        'id'            => 'sidebar-1',
        'description'   => __( '在此添加主侧边栏的小工具。', 'mytheme' ),
        'before_widget' =&gt; '<section id="%1$s" class="widget %2$s">',
        'after_widget'  =&gt; '</section>',
        'before_title'  =&gt; '<h2 class="widget-title">',
        'after_title'   =&gt; '</h2>',
    ) );
}
add_action( 'widgets_init', 'mytheme_widgets_init' );

Queuing management van scripts en styles

Om de beste praktijken voor WordPress-ontwikkeling te volgen en conflicten te voorkomen, moeten alle JavaScript- en CSS-bestanden worden ingeladen via een specifieke methode.wp_enqueue_scriptsDe hook wordt gebruikt voor het laden van content. WordPress biedt hierbij verschillende mogelijkheden.wp_enqueue_style()wp_enqueue_script()Een functie wordt gebruikt om dit doel te bereiken.

function mytheme_scripts() {
    // 引入主题的主样式表
    wp_enqueue_style( 'mytheme-style', get_stylesheet_uri(), array(), wp_get_theme()->get( 'Version' ) );

// 引入Google Fonts
    wp_enqueue_style( 'mytheme-google-fonts', 'https://fonts.example.com/family=Open+Sans&display=swap', array(), null );

// 引入自定义JavaScript文件,并依赖jQuery
    wp_enqueue_script( 'mytheme-navigation', get_template_directory_uri() . '/js/navigation.js', array( 'jquery' ), wp_get_theme()->get( 'Version' ), true );

// 为脚本局部化数据,将PHP变量安全传递到JavaScript
    wp_localize_script( 'mytheme-navigation', 'mythemeScreenReaderText', array(
        'expand'   => __( '展开子菜单', 'mytheme' ),
        'collapse' => __( '收起子菜单', 'mytheme' ),
    ) );
}
add_action( 'wp_enqueue_scripts', 'mytheme_scripts' );

Deze methode zorgt ervoor dat afhankelijkheden (zoals jQuery) op de juiste manier worden verwerkt, en het is ook gemakkelijk om de plaats waar de scripts worden geladen te bepalen (in het hoofd- of voetgedeelte van de pagina). Voor de stijl en scripts van het beheerderspaneel moet men gebruikmaken van…admin_enqueue_scriptsHook.

Diep personaliseren met hooks en filters

Verstehen van acties en filters

De kern van de uitbreidbaarheid van WordPress is in grote mate afhankelijk van zijn plugin-architectuur, oftewel de zogenoemde ‘hooks’. Er zijn twee soorten hooks: actions en filters. Actions bieden je de mogelijkheid om op specifieke momenten eigen code uit te voeren, terwijl filters het mogelijk maken om gegevens die worden overgedragen tijdens het uitvoeren van WordPress te bewerken.functions.phpDit is een uitstekende plek om deze haakjes te gebruiken.

Aanbevolen leesmateriaal Van nul tot één: een praktische handleiding voor het ontwikkelen van WordPress-thema's

Je kunt bijvoorbeeld gebruikmaken vanwp_headVoeg in de pagina-specifiche delen van het document custom code toe, of gebruik bestaande tools om dit te doen.the_contentDe filter wijzigt de uitgave van de inhoud van het artikel.

Creatie van een aangepaste artikeltype

Om contenttypen te kunnen creeren die verder gaan dan de standaardtypen “Artikel” en “Pagina”, moet je een aangepaste artikeltyp registreren. Dit gebeurt meestal in...initOutgevoerd in de hook.

function mytheme_register_portfolio() {
    $labels = array(
        'name'               => _x( '作品集', '作品集通用名称', 'mytheme' ),
        'singular_name'      => _x( '作品', '作品单数名称', 'mytheme' ),
        'menu_name'          => __( '作品集', 'mytheme' ),
    );
    $args = array(
        'labels'             => $labels,
        'public'             => true,
        'publicly_queryable' => true,
        'show_ui'            => true,
        'show_in_menu'       => true,
        'query_var'          => true,
        'rewrite'            => array( 'slug' => 'portfolio' ),
        'capability_type'    => 'post',
        'has_archive'        => true,
        'hierarchical'       => false,
        'menu_position'      => 5,
        'supports'           => array( 'title', 'editor', 'thumbnail', 'excerpt', 'comments' ),
    );
    register_post_type( 'portfolio', $args );
}
add_action( 'init', 'mytheme_register_portfolio' );

De standaardquery en -uitstelling worden gewijzigd.

Filteren kan worden gebruikt om de verschillende uitstoot van een website nauwkeurig te bepalen. Als je bijvoorbeeld op de archievenpagina alleen artikelen uit een bepaalde categorie wilt weergeven, of om de lengte van de samenvattingen te veranderen, kun je dit met filters doen.

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%
// 修改主页查询,排除特定分类
function mytheme_exclude_category_home( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( 'cat', '-5, -9' ); // 排除ID为5和9的分类
    }
}
add_action( 'pre_get_posts', 'mytheme_exclude_category_home' );

// 修改摘录长度
function mytheme_excerpt_length( $length ) {
    return 30; // 将默认的55词改为30词
}
add_filter( 'excerpt_length', 'mytheme_excerpt_length' );

Beste praktijken voor veiligheid, prestaties en onderhoud

Een sterkefunctions.phpDeze bestanden moeten niet alleen de gewenste functionaliteit bieden, maar ook rekening houden met veiligheid, prestaties en onderhoudsvriendelijkheid.

Allereerst moet alle invoer van gebruikers worden geëscapeseerd en gevalideerd. WordPress biedt een groot aantal veiligheidsfuncties aan, zoals…esc_html()esc_url()sanitize_text_field()Zorg ervoor dat wanneer dynamische gegevens naar de front-end worden gestuurd, de juiste ontsnippingsfuncties worden gebruikt.

Ten tweede: let op de organisatie van je code. Een codeblok met meer dan honderd regels…functions.phpDe best mogelijke oplossing is om de bestanden zo te structureren dat ze gemakkelijk te onderhouden zijn. Het is verstandig om ze te gebruiken als “loaders”, waardoor de code voor verschillende functies in aparte PHP-bestanden wordt opgeslagen, die zich bevinden in de map met de corresponderende thema’s.functions.phpDoor middel vanrequire_onceIntroductie.

Aanbevolen leesmateriaal WordPress-themaontwikkeling snel onder de knie krijgen: een complete handleiding, van beginner tot professional.

// 在functions.php中组织代码
require_once get_template_directory() . '/inc/theme-setup.php';
require_once get_template_directory() . '/inc/enqueue-scripts.php';
require_once get_template_directory() . '/inc/custom-post-types.php';
require_once get_template_directory() . '/inc/custom-functions.php';

Wat betreft de prestaties, moet worden vermeden om…functions.phpHet uitvoeren van tijdrovende database-opvragen of bestandsbewerkingen rechtstreeks in de code is niet verstandig, vooral niet in de code die bij het laden van elke pagina wordt uitgevoerd. Gebruik cache-mechanismen, bepaal zorgvuldig wanneer hooks moeten worden uitgevoerd, en verwijder hooks voor functies die niet meer worden gebruikt.

Ten slotte: voeg duidelijke Chinese commentaren toe aan je eigen functies en hooks, en gebruik de thema-textvakken (zoals hierboven beschreven).mythemeZorg ervoor dat alle strings die worden weergegeven aan de gebruikers internationaal zijn opgesteld. Dit zal de latere samenwerking en de lokalisatie van de inhoud aanzienlijk versoepelen.

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.

Samenvatting

functions.phpDeze bestand vormt het hart en het zenuwstelsel van het ontwikkelen van WordPress-themes. Van het ondersteunen van basisfuncties van het thema, het instellen van menu's en sidebar's, tot het standaardiseren van script- en stijlgegevens, en uiteindelijk het realiseren van diepe, invasieve vrijheid bij het aanpassen van het thema met behulp van actions en filters – deze bestand geeft ontwikkelaars de mogelijkheid om het gedrag van WordPress volledig te bepalen. Het volgen van moderne ontwikkelingspraktijken op het gebied van veilige codeering, prestatieoptimalisatie en modulaire organisatie, zorgt ervoor dat je thema optimaal werkt.functions.phpDeze file is niet alleen krachtig, maar ook robuust, gemakkelijk te onderhouden en uit te breiden. Als je deze file onder de knie hebt, betekent dat dat je de sleutel in hand hebt om van een gebruiker van vooraf gedefinieerde thema's over te gaan naar een echte thema-creator.

Veelgestelde vragen (FAQ)

Hoe kan je op veilige manier de functions.php-fail bewerken in een subtopic?

Het maken van een subthema is momenteel de veiligste en meest aanbevolen manier om de functionaliteit van een parentthema te bewerken en uit te breiden. Je kunt in de map met subthema's je eigen subthema's creeren.functions.phpDeze bestand wordt niet overschreven door updates van het overkoepelde thema, en deze bestand wordt eerst verwerkt dan het overkoepelde thema.functions.phpDe bestand is geladen. In dit bestand van de subthema kun je nieuwe functies toevoegen of functies van het parentthema overschrijven met behulp van hooks. Als je bijvoorbeeld alleen de manier van laden van de stijlen in het parentthema wilt veranderen, kun je dit doen in het bestand van het subthema.functions.phpDe hook voor het stijlqueue van het parent-thema wordt verwijderd, en daarna worden je eigen stijlen opnieuw in het queue geplaatst.

Waarom werkt de code die ik heb toegevoegd niet?

Er zijn enkele veelvoorkomende redenen waarom code niet werkt. Allereerst moet je controleren of er syntactische fouten zijn in de code. Een kleine syntactische fout in PHP kan namelijk het hele programma onwerkzaam maken.functions.phpDe uitvoering van het bestand is mislukt. Je kunt dit proberen te verhelpen door...WP_DEBUGKijk eerst of er foutmeldingen te zien zijn in het model. Daarna moet je controleren of de code op de juiste plek is geplaatst (bijvoorbeeld of de functie is gedefinieerd binnen een hook, en of die hook wel is uitgevoerd). Vervolgens moet je controleren of er geen conflicten zijn tussen de namen van functies of hooks; het is handig om aan maatgemaakte functies een unieke prefix te geven. Ten slotte moet je ervoor zorgen dat je wijzigingen zijn opgeslagen en dat de cache van de browser en WordPress is gereinigd wanneer je de pagina weer bekijkt.

Hoe voeg je aangepaste kortcodes toe in functions.php?

functions.phpHet is een veel voorkomend verzoek om kortere codes toe te voegen.add_shortcode()Deze functionaliteit kan eenvoudig worden gerealiseerd met een function. Allereerst moet je een callback-functie definiëren die de uitgegeven inhoud van de kortere code genereert, en vervolgens…add_shortcode()Registreer het.

// 定义短代码回调函数
function mytheme_contact_button_shortcode( $atts ) {
    // 解析短代码属性
    $atts = shortcode_atts( array(
        'text' =&gt; '联系我们',
        'url'  =&gt; '/contact',
    ), $atts, 'contact_button' );

// 返回安全的HTML输出
    return '<a href="/nl/' . esc_url( $atts['url'] ) . '/" class="contact-button">'`.esc_html($atts['text'])`.'</a>'// Registreer de shortcode
add_shortcode( 'contact_button', 'mytheme_contact_button_shortcode' );

Daarna kunt u dit gebruiken in artikelen, pagina's of kleine hulpmiddelen.[contact_button text="点击联系" url="/contact-us"]Het is tijd om deze kortere code te gebruiken.

Wat zijn de voor- en nadelen van het toevoegen van functies in functions.php vergeleken met het gebruik van onafhankelijke plugins?

functions.phpDe grootste voordelen van het toevoegen van functies zijn de nauwe integratie en de gemakkelijkheid in gebruik. Alles code is gebundeld met het thema, waardoor het gemakkelijk te beheren en distribueren is, vooral wanneer deze functies een essentieel onderdeel zijn van het uiterlijk en de gebruikerservaring van het thema. De nadelen zijn dat deze functies zijn verbonden aan het levenscyclus van het thema; wanneer je het thema vervangt, verdwijnen de functies ook, waardoor inhoud of functies op de website kunnen worden gemist. Onafhankelijke plugins bieden daarentegen een scheiding tussen functies en uiterlijk, zodat de functies onveranderd blijven, ongeacht welk thema je gebruikt. Dit is een betere optie voor algemene functies zoals SEO, formulieren en caching. De beste praktijk is om functies die puur op het presentatie-niveau zijn gericht (bijvoorbeeld specifieke layaoutcontrole of thema-specifieke stijluitbreidingen) apart te bewaren.functions.phpAls de functionaliteit zich bevindt op het datalayer of betreft algemene logica (bijvoorbeeld het definiëren van aangepaste artikeltypes of het versterken van het gebruikersbeheer), en dit vooral op verschillende thema's moet worden behouden, moet een aparte plugin worden gemaakt.