标题:wordpress模板各文件函数解析 浏览:166 时间:2009年05月25日 (10:47 上午) 分类:互聯網 标签:Wordpress 作者:shine 评论:没有评论
修改主题时发现好多WordPress主题函数都不了解,因此网上摘抄了一份放在自己博客上,便于以后好找。 在WordPress中如何按你的意愿显示页面,关键看你是否了解WordPress主题模板页面。 这里所说的主题文件是指显示页面的主题文件,而非实现评论、侧边栏等功能的主题文件。大多数用户不使用WordPress安装时自带的默认主题,他们会在 互联网上下载免费主题。 这是一种设计博客版式的好方法,但不是所有主题开发者都用相同的方式编写主题。 主题的表现很大程度上取决于开发者用在主题上的开发时间和对WordPress的了解。 下面我会为大家介绍设计主题页面的所有相关知识,通过这些下面的信息你甚至可以开始为自己设计一个主题。 除非你是专家级的主题开发者,否则都可以从这里学到些新的东西。 WordPress如何工作 首先需要了解的是WordPress的模板层级,或者说是“WordPress调用页面的顺序”。 “index.php”是唯一一个所有WordPress主题的PHP文件中都必须具备的文件。“index.php”可以执行WordPress的所有单独功能。 每当有WordPress页面被调用时,WordPress的“引擎”会判断(通过排除法)页面的类型。 这类似于询问“我在哪儿?”。 WordPress回答“我在…类型的页面上”,然后以特定顺序调用页面。 WordPress找不到需要的PHP文件时,会使用“index.php”文件来代替所需文件。 WordPress首先会寻找以下九种基本页面: 首页 日志页 “页面”页 “分类”页 标签页 作者页 存档页 搜索页或404页 附件页 WP主题模板内部运行情况 不过凑巧的是,就像WordPress查找九种基本页面一样,每个主题模板页面也包含九种基本的WordPress元素: 调用页眉 调用页眉,侧边栏以及页脚 这三种元素基本类似。 当你在模板中看到以下代码: <?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(); ?>”> 用以通知WordPress应获取的信息的调用 之后WordPress会决定所显示的单篇文章内容的详细程度。 文章详细程度取决于你的主题使用的是“the_content”(显示全文)或“the_excerpt”(显示摘要)。 (可能有)更多的meta 上面提到过,文章下方都有指定的类别或标签,有时你还可能看到“edit”链接。 一些主题甚至在文章内容后添加了date published meta。 关闭the loop(主循环) 代码如下: <?php else : ?> 这是一个多行代码,你可以在其中添加其它信息,例如“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样式表可以放在其他文件; (二)基本条件判断Tag is_home() : 是否为主页 <?php bloginfo(’name’); ?> : 博客名称(Title) <?php get_header(); ?> : 调用Header模板 <?php the_search_query(); ?> 搜索表单的值 显示最新文章 <?php query_posts(’showposts=5′); ?> 显示最新评论 <?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 .= “\n<ul>”; foreach ($comments as $comment) { $output .= “\n<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 .= “\n</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) { ?> 显示文章分类 <h2>Categories</h2> 显示归档 <h2>Archives</h2> 在侧栏显示页面列表 <h2>Pages</h2> 调用Gravatar(只适应2.5以上) <?php if(function_exists(’get_avatar’)){ echo get_avatar($comment, ‘50?);} ?> 显示友情链接 <ul><?php get_links_list(); ?></ul> 显示管理员链接 <ul><?php wp_register(); ?> 在侧栏显示页面的子页面 <?php$children = wp_list_pages(’title_li=&child_of=’.$post->ID.’&echo=0′);if ($children) { ?> 显示Wordpress标签 <?php the_tags(); ?> 显示Wordpress标签云 <?php wp_tag_cloud(’smallest=8&largest=36&’); ?> 模板标题 <?php /* Template Name: Portfolio */ ?> 动态标题标签 <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’); } ?> 结论 |
|