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 的功能,而不仅仅是基础知识。除了自定义帖子类型之外,你还可以创建自己的自定义字段以附加到帖子/页面/自定义帖子类型,从而允许你提供在模板中添加和访问元数据的结构化方式。请参阅: 高级自定义字段