WordPress 主題

將 URL 對映到特定模板

要完全掌握 WordPress 主題,你必須瞭解兩個主要概念:

  1. 固定連結
  2. 模板層次結構

永久連結是永久的,不變的 URL(或連結,指向特定資源。例如:

  • example.com/about-us/(WP 中的一個頁面)
  • example.com/services/(多個專案的列表,在 WP 術語中也稱為歸檔
  • example.com/services/we-can-do-that-for-you/(個別專案)

當使用者請求 URL 時,WordPress 會對永久連結進行逆向工程,以確定哪個模板應該控制其佈局。WordPress 會查詢可以控制此特定內容的各種模板檔案,並最終優先考慮它找到的最具體的內容。這稱為模板層次結構。

一旦 WP 在層次結構中找到匹配的檢視模板,它就會使用該檔案來處理和呈現頁面。

例如:index.php(預設的“catch-all”模板)將被 archive.php(基於列表的內容的預設模板)覆蓋,而 archive-services.php 又將被 archive-services.php(專門用於名為 services 的存檔的模板檔案)覆蓋“)。

這是模板層次結構的一個很好的視覺化參考

基本主題目錄結構

一個簡單的主題看起來像這樣:

    // Theme CSS
    style.css

    // Custom functionality for your theme
    functions.php

    // Partials to include in subsequent theme files
    header.php
    footer.php
    sidebar.php
    comments.php

    // "Archives", (listing views that contain multiple posts)
    archive.php
    author.php
    date.php
    taxonomy.php
    tag.php
    category.php

    // Individual content pages
    // Note that home and frontpage templates are not recommended
    // and they should be replaced by page templates
    singular.php
    single.php
    page.php
    front-page.php
    home.php

    // Misc. Utility Pages
    index.php (a catch-all if nothing else matches)
    search.php
    attachment.php
    image.php
    404.php

單一的示例(單個帖子的模板)

<?php get_header(); ?>

<?php if ( have_posts() ) while ( have_posts() ) : the_post(); ?>
    <h1><?php the_title(); ?></h1>
    <?php the_content(); ?>
    <?php comments_template( '', true ); ?>
<?php endwhile; ?>

<?php get_sidebar(); ?>
<?php get_footer(); ?>

這裡發生了什麼事?首先,它載入 header.php(類似於 PHP include 或 require),設定 The Loop,顯示 the_titlethe_content,然後包括 comments.phpsidebar.phpfooter.php。Loop 完成繁重的工作,設定了一個 Post 物件,其中包含當前檢視內容的所有資訊。

存檔示例(多個帖子列表的模板)

<?php get_header(); ?>

<?php if ( have_posts() ) while ( have_posts() ) : the_post(); ?>
    <a href="<?php the_permalink(); ?>"<?php the_title(); ?></a>
    <?php the_excerpt(); ?>
<?php endwhile; ?>

<?php
    next_posts_link( 'Older Entries', $the_query->max_num_pages );
    previous_posts_link( 'Newer Entries' );
?>

<?php get_sidebar(); ?>
<?php get_footer(); ?>

首先,它包括 header.php,設定 The Loop,包括 sidebar.phpfooter.php。但在這種情況下,迴圈中有多個帖子,因此會顯示一個摘錄,其中包含指向單個帖子的連結。next_posts_linkprevious_posts_link 也包括在內,因此存檔可以對結果進行分頁。

帖子,頁面,自定義帖子型別和自定義欄位

開箱即用,WordPress 支援兩種型別的內容:PostsPages。帖子通常用於非分層內容,如部落格帖子。頁面用於靜態,獨立的內容,如關於我們頁面,或者公司的服務頁面,下面是巢狀的子頁面。

從 3.0 版本開始,開發人員可以定義自己的自定義帖子型別,以擴充套件 WordPress 的功能,而不僅僅是基礎知識。除了自定義帖子型別之外,你還可以建立自己的自定義欄位以附加到帖子/頁面/自定義帖子型別,從而允許你提供在模板中新增和訪問後設資料的結構化方式。請參閱: 高階自定義欄位