zoukankan      html  css  js  c++  java
  • wordpress模板各文件函数解析

    修改主题时发现好多WordPress主题函数都不了解,因此网上摘抄了一份放在自己博客上,便于以后好找。

    在WordPress中如何按你的意愿显示页面,关键看你是否了解WordPress主题模板页面。这里所说的主题文件是指显示页面的主题文件,而非实现评论、侧边栏等功能的主题文件。大多数用户不使用WordPress安装时自带的默认主题,他们会在互联网上下载免费主题。这是一种设计博客版式的好方法,但不是所有主题开发者都用相同的方式编写主题。主题的表现很大程度上取决于开发者用在主题上的开发时间和对WordPress的了解。

    下面我会为大家介绍设计主题页面的所有相关知识,通过这些下面的信息你甚至可以开始为自己设计一个主题。除非你是专家级的主题开发者,否则都可以从这里学到些新的东西。

    WordPress如何工作

    首先需要了解的是WordPress的模板层级,或者说是“WordPress调用页面的顺序”。 “index.php”是唯一一个所有WordPress主题的PHP文件中都必须具备的文件。“index.php”可以执行WordPress的所有单独功能。

    每当有WordPress页面被调用时,WordPress的“引擎”会判断(通过排除法)页面的类型。 这类似于询问“我在哪儿?”。 WordPress回答“我在…类型的页面上”,然后以特定顺序调用页面。 WordPress找不到需要的PHP文件时,会使用“index.php”文件来代替所需文件。 WordPress首先会寻找以下九种基本页面:

    首页
    如果WordPress判断是在首页上,会先调用“home.php”文件然后再调用“index.php”。

    日志页
    如果是(单篇)日志页,首先调用“single.php”然后默认调用“index.php”。

    “页面”页
    如果是静态页面或“页面型”页面(应用了模板的页面),WordPress首先调用“pagetemplate.php”然后默认调用“index.php”。

    “分类”页
    如果WordPress判断是分类页,则首先调用该类别编号的页面,例如“category-7.php”。找不到相应文件时可以查找“category.php”(category.php可以用于所有类别页)。如果没有“category.php”则继续查找“archive.php”,最后默认调用“index.php”。

    标签页
    如果WordPress判断是标签页,会首先加载“tag-slug.php”文件,以具体的slug(别名)为标签名。如果标签是“wordpress hacks”,那么标签别名页就是“tag-wordpress-hacks.php”。如果加载不成,WP会继续查找“tag.php”文件,该文件可用于所有标签页,然后调用“archive.php”,最后默认调用 “index.php”。

    作者页
    博客拥有多个作者时,WP会首先寻找“author.php”文件以显示作者详情。如果没有“author.php”则继续查找“archive.php”,最后默认调用“index.php”。

    存档页
    WP为之前的日志加载信息页面时,同时也加载了存档页。 WP首先加载“date.php”,其次“archive.php”,最后默认加载“index.php”。

    搜索页或404页
    若WP判断是在搜索结果页或404(页面未找到)页,会尝试加载search.php或404.php文件。如果无法加载search.php或404.php,WP仍然默认加载“index.php”。

    附件页
    附件页是所有WordPress主题模板页面中使用次数最少的一种页面类型。 WordPress通常用这些特殊的附件页来加载若干信息,这些信息解释首先查找“image.php”, “audio.php”, “video.php”, 以及“application.php”的原因。然后WP查找“attachment.php”或“single.php”,如果这两个文件不可用,默认查找“index.php”。

    WP主题模板内部运行情况
    可以用单独的index.php文件来调用以上九种类型的页面,这在上面也提到过。也可以在一些条件标签中编写代码,我在这篇文章的结尾部分会告诉大家如何操作。一个页面中可能含有很多代码,有时甚至有些混乱,这样我们要修改代码来进行设计就不太方便了。

    不过凑巧的是,就像WordPress查找九种基本页面一样,每个主题模板页面也包含九种基本的WordPress元素:

    调用页眉
    开启the loop(主循环)
    调用永久链接与(若干)meta
    用以通知WordPress应获取的信息的调用
    用以获取获取文章内容或摘要的调用
    (可能有)更多的meta
    关闭the loop(主循环)
    调用侧边栏
    调用页脚
    这是WordPress元素,能让这些元素运行的PHP代码分布在不同的地方,让你的主题版面和平面设计保持正常工作。下面我要详细介绍一下这些元素,以便大家进一步了解如何设计主题模板页面。

    调用页眉,侧边栏以及页脚

    这三种元素基本类似。 当你在模板中看到以下代码:

    <?php get_header(); ?>

    表明WordPress打开了“header.php”文件。 get_sidebar() (sidebar.php) 和 get_footer() (footer.php)也是同样的道理。你可能会有很多页眉、页脚和侧边栏,这时可以点击上面的“条件标签”查看相关内容。

    开启the loop(主循环)

    “Wordpress Loop”会在数据库中持续调用文件,直到WordPress终止调用。 “the loop”的结构随显示页面类型而变,WordPress尝试加载的每个基本类型页面都有一个“loop”。

    下面是开启the loop的代码:

    <?php if ( have_posts() ) : <?php if ( have_posts() ) : the_post(); ?>

    我们可以看到,代码被拆分开来,have_posts用以定义条件标签,while和the_post则各成一部分,但这仍然是the loop,在所有页面中基本都是这样。 多行loop时的一个用法是:用query_posts在“if have_posts”和代码的剩余部分之间放置一个参数,用来显示单篇文章、某一时段的文章、最近一篇文章或者某一类别中的文章,也可以改变the loop中迭代文章的顺序。

    调用永久链接与(若干)meta

    通过the loop的每次迭代,开放The loop的最后部分(the_post)能够激活元素数据。这里的个体数据通常是指“post meta”,尤其是永久链接(URL)、标题、时间这样的meta。大多数主题会在单篇文章内容前显示一些信息,然后在文章内容后也显示一些信息——比如文章类别和标签。

    下面是一些你可以在post meta中调用的内容: the_permalink, the_ID, the_title, the_time, the_author, the_author_email, the_author_posts_link, the_category, single_cat_title, the_tags, single_tag_titls, edit_post_link, comments_popup_link, comments_rss_link

    下面是Post meta的代码示例:

    <div class=”post” id=”post-<?php the_ID(); ?>”>
    <h2><a href=”<?php the_permalink() ?>” rel=”bookmark”><?php the_title(); ?></a></h2>
    </div>

    用以通知WordPress应获取的信息的调用

    之后WordPress会决定所显示的单篇文章内容的详细程度。文章详细程度取决于你的主题使用的是“the_content”(显示全文)或“the_excerpt”(显示摘要)。

    (可能有)更多的meta

    上面提到过,文章下方都有指定的类别或标签,有时你还可能看到“edit”链接。 一些主题甚至在文章内容后添加了date published meta。

    关闭the loop(主循环)

    代码如下:

    <?php else : ?>
    <?php endif; ?>

    这是一个多行代码,你可以在其中添加其它信息,例如“Sorry, we didn’t find anything”。你可以在侧边栏之后、调用侧边栏和页脚之前找到“next”“previous”导航链接。

    Loops

    大多数loops与我在上面所举的例子都差不多,但这并不表示你不能随意修改这些loops。 推荐大家阅读WP Codex上的文章The Loop in Action,文章中列举了存档、类别以及单篇文章以及静态首页中的the loop。

    WP Codex上the loop中也有一些在同一页面上放置多个loop的示例。 Perishable Press上有一篇关于多loop,多栏内容的精彩教程。 Perishable Press上还有一些很好的loop模板,以及一篇关于两栏水平序列文章的教程。

    (一)WordPress基本模板文件,一套完整的WordPress模板包括如下文件,但是只有index.php和style.css是不能缺少的:

    style.css : CSS(样式表)文件,不可缺少版权部分,真正CSS样式表可以放在其他文件;
    index.php : 主页模板,不可缺少;
    archive.php : Archive/Category模板,如果缺少,默认为index.php的显示;
    404.php : Not Found 错误页模板,如果缺少,默认为index.php的显示;
    comments.php : 留言/回复模板,不可缺少;
    footer.php : Footer模板,可合并到index.php;
    header.php : Header模板,可合并到index.php;
    sidebar.php : 侧栏模板,可合并到index.php;
    page.php : 内容页(Page)模板,如果缺少,默认为index.php的显示;
    single.php : 内容页(Post)模板,如果缺少,默认为index.php的显示;
    searchform.php : 搜索表单模板,可合并到index.php;
    search.php : 搜索结果模板,如果缺少,默认为index.php的显示;

    (二)基本条件判断Tag

    is_home() : 是否为主页
    is_single() : 是否为内容页(Post)
    is_page() : 是否为内容页(Page)
    is_category() : 是否为Category/Archive页
    is_tag() : 是否为Tag存档页
    is_date() : 是否为指定日期存档页
    is_year() : 是否为指定年份存档页
    is_month() : 是否为指定月份存档页
    is_day() : 是否为指定日存档页
    is_time() : 是否为指定时间存档页
    is_archive() : 是否为存档页
    is_search() : 是否为搜索结果页
    is_404() : 是否为 “HTTP 404: Not Found” 错误页
    is_paged() : 主页/Category/Archive页是否以多页显示
    (三)Header部分常用到的PHP函数

    <?php bloginfo(’name’); ?> : 博客名称(Title)
    <?php bloginfo(’stylesheet_url’); ?> : CSS文件路径
    <?php bloginfo(’pingback_url’); ?> : PingBack Url
    <?php bloginfo(’template_url’); ?> : 模板文件路径
    <?php bloginfo(’version’); ?> : WordPress版本
    <?php bloginfo(’atom_url’); ?> : Atom Url
    <?php bloginfo(’rss2_url’); ?> : RSS 2.o Url
    <?php bloginfo(’url’); ?> : 博客 Url
    <?php bloginfo(’html_type’); ?> : 博客网页Html类型
    <?php bloginfo(’charset’); ?> : 博客网页编码
    <?php bloginfo(’description’); ?> : 博客描述
    <?php wp_title(); ?> : 特定内容页(Post/Page)的标题
    (四)模板常用的PHP函数及命令

    <?php get_header(); ?> : 调用Header模板
    <?php get_sidebar(); ?> : 调用Sidebar模板
    <?php get_footer(); ?> : 调用Footer模板
    <?php the_content(); ?> : 显示内容(Post/Page)
    <?php if(have_posts()) : ?> : 检查是否存在Post/Page
    <?php while(have_posts()) : the_post(); ?> : 如果存在Post/Page则予以显示
    <?php endwhile; ?> : While 结束
    <?php endif; ?> : If 结束
    <?php the_time(’字符串’) ?> : 显示时间,时间格式由“字符串”参数决定,具体参考PHP手册
    <?php comments_popup_link(); ?> : 正文中的留言链接。如果使用 comments_popup_script() ,则留言会在新窗口中打开,反之,则在当前窗口打开
    <?php the_title(); ?> : 内容页(Post/Page)标题
    <?php the_permalink() ?> : 内容页(Post/Page) Url
    <?php the_category(’,’) ?> : 特定内容页(Post/Page)所属Category
    <?php the_author(); ?> : 作者
    <?php the_ID(); ?> : 特定内容页(Post/Page) ID
    <?php edit_post_link(); ?> : 如果用户已登录并具有权限,显示编辑链接
    <?php get_links_list(); ?> : 显示Blogroll中的链接
    <?php comments_template(); ?> : 调用留言/回复模板
    <?php wp_list_pages(); ?> : 显示Page列表
    <?php wp_list_categories(); ?> : 显示Categories列表
    <?php next_post_link(’%link’); ?> : 下一篇文章链接
    <?php previous_post_link(’%link’); ?> : 上一篇文章链接
    <?php get_calendar(); ?> : 日历
    <?php wp_get_archives() ?> : 显示内容存档
    <?php posts_nav_link(); ?> : 导航,显示上一篇/下一篇文章链接
    <?php include(TEMPLATEPATH . ‘/文件名’); ?> : 嵌入其他文件,可为定制的模板或其他类型文件
    (五)与模板相关的其他函数

    <?php the_search_query(); ?> 搜索表单的值
    <?php _e(’Message’); ?> : 输出相应信息
    <?php wp_register(); ?> : 显示注册链接
    <?php wp_loginout(); ?> : 显示登录/注销链接
    <?php wp_meta(); ?> 显示管理员的相关控制信息(为插件API HOOK用)
    <!–next page–> : 将当前内容分页
    <!–more–> : 将当前内容截断,以不在主页/目录页显示全部内容
    <?php timer_stop(1); ?> : 网页加载时间(秒)
    <?php echo get_num_queries(); ?> : 网页加载查询量
     

    显示最新文章

    <?php query_posts(’showposts=5′); ?>
    <ul>
    <?php while (have_posts()) : the_post(); ?>
    <li><a href=”<?php the_permalink() ?>”><?php the_title(); ?></a></li>
    <?php endwhile;?>
    </ul>

    显示最新评论

    <?php global $wpdb; $sql = “SELECT DISTINCT ID, post_title, post_password, comment_ID, comment_post_ID, comment_author, comment_date_gmt, comment_approved, comment_type,comment_author_url, SUBSTRING(comment_content,1,30) AS com_excerpt FROM $wpdb->comments LEFT OUTER JOIN $wpdb->posts ON ($wpdb->comments.comment_post_ID = $wpdb->posts.ID) WHERE comment_approved = ‘1′ AND comment_type = ” AND post_password = ” ORDER BY comment_date_gmt DESC LIMIT 10″; $comments = $wpdb->get_results($sql); $output = $pre_HTML; $output .= “ <ul>”; foreach ($comments as $comment) { $output .= “ <li>”.strip_tags($comment->comment_author) .”:” . “<a href=”” . get_permalink($comment->ID) . “#comment-” . $comment->comment_ID . “” title=”on ” . $comment->post_title . “”>” . strip_tags($comment->com_excerpt) .”</a></li>”; } $output .= “ </ul>”; $output .= $post_HTML; echo $output;?>

    显示热评文章

    <?php $result = $wpdb->get_results(”SELECT comment_count,ID,post_title FROM $wpdb->posts ORDER BY comment_count DESC LIMIT 0 , 10″); foreach ($result as $topten) { $postid = $topten->ID; $title = $topten->post_title; $commentcount = $topten->comment_count; if ($commentcount != 0) { ?>
    <li><a href=”<?php echo get_permalink($postid); ?>” title=”<?php echo $title ?>”><?php echo $title ?></a></li>
    <?php } } ?>

    显示文章分类

    <h2>Categories</h2>
    <ul><?php wp_list_cats(’sort_column=name’); ?></ul>

    显示归档

    <h2>Archives</h2>
    <ul><?php wp_get_archives(’type=monthly’); ?></ul>

    在侧栏显示页面列表

    <h2>Pages</h2>
    <ul><?php wp_list_pages(’title_li=’); ?></ul>

    调用Gravatar(只适应2.5以上)

    <?php if(function_exists(’get_avatar’)){ echo get_avatar($comment, ‘50?);} ?>

    显示友情链接

    <ul><?php get_links_list(); ?></ul>

    显示管理员链接

    <ul><?php wp_register(); ?>
    <li><?php wp_loginout(); ?></li>
    <li><a href=”http://www.wordpress.org/”>WordPress</a></li>
    <?php wp_meta(); ?>
    <li><a href=”http://validator.w3.org/check?uri=referer”>XHTML</a></li>
    </ul>

    在侧栏显示页面的子页面

    <?php$children = wp_list_pages(’title_li=&child_of=’.$post->ID.’&echo=0′);if ($children) { ?>
    <ul><?php echo $children; ?></ul>
    <?php } ?>

    显示Wordpress标签

    <?php the_tags(); ?>

    显示Wordpress标签云

    <?php wp_tag_cloud(’smallest=8&largest=36&’); ?>

    模板标题

    <?php ?>

    动态标题标签

    <title><?phpif (is_home()) { echo bloginfo(’name’); } elseif (is_404()) { echo ‘404 Not Found’; } elseif (is_category()) { echo ‘Category:’; wp_title(”); } elseif (is_search()) { echo ‘Search Results’; } elseif ( is_day() || is_month() || is_year() ) { echo ‘Archives:’; wp_title(”); } else { echo wp_title(”); } ?></title>

    在独立页面中运行PHP

    <?php if ( is_home() ) { include (’file.php’); } ?>

    结论
    只要掌握了一点这方面的知识,你就可以随意修改任何WordPress主题模板页面了。现在你已经充分了解了WordPress的页面和the loop的运行,就可以征服任何难题了。现在就开始你的博客主题设计之旅吧!
    --------------------------------------

    http://www.wordpress.la/anatomy-of-wordpress-theme.html

  • 相关阅读:
    发邮件
    加密解密帮助类(对称加密)
    枚举静态类
    【06月05日】A股滚动市净率PB历史新低排名
    【06月04日】A股滚动市盈率PE历史新低排名
    【06月03日】预分红股息率最高排名
    北上资金近1周流入排行榜
    最近一月研报推荐次数最多的最热股票
    【2019年05月28日】指数估值排名
    北上资金近1周流入排行榜
  • 原文地址:https://www.cnblogs.com/bojuetech/p/4837088.html
Copyright © 2011-2022 走看看