【基础篇】13,补充之前教程中的一些知识要点

在之前的教程中,我通过做一套非常简单的 WordPress 主题,介绍了一系列关于 WordPress 主题制作的方法和函数。对于基础篇,有一些细节略过了,有一些功能没有提到,因为这些对于基础比较差的朋友有点难度,所以放在了 中级篇 教程中。回顾整个初级篇教程,有几个知识点需要介绍但是没有介绍到,还有一个小错误,于是就在本文中总结一下。

显示更多的文章列表

在目前的主题中,在首页中,只能显示有限的文章列表内容,并没有前后翻页的功能。这样,时间比较早的文章就看不到了,现在就要加上。需要用到的代码如下:

<div id=”pagination” class=”mt10”>
<?php posts_nav_link(); ?>
</div>

其中 posts_nav_link(); 这个函数就是用于生成列表翻页的函数。这段代码通常要放在文章列表的最下面

页面翻页导航

保存一下,刷新页面,我们就可以看到了多了一个“下一页”链接,点击之后,还会出现 “上一页”

看到上一页

这种方式非常简单,但是效果有限。在实际的应用中不大,因为现在网站大都用“页码数字”的形式来翻页。但是 WordPress 并没有提供与之相关的函数,有很多插件是用于实现这个功能的,但实际上用代码也能很方便的实现。下面就是我在网上找到的一段比较好的实现代码,作者不详:

function qxzm_pagination($query_string){
global $posts_per_page, $paged;
$my_query = new WP_Query($query_string .”&posts_per_page=-1”);
$total_posts = $my_query->post_count;
if(empty($paged))$paged = 1;
$prev = $paged - 1;
$next = $paged + 1;
$range = 5; // only edit this if you want to show more page-links
$showitems = ($range * 2)+1;

$pages = ceil($total_posts/$posts_per_page);
if(1 != $pages){
echo "&lt;div class='pagination'&gt;";
echo ($paged &gt; 2 &amp;&amp; $paged+$range+1 &gt; $pages &amp;&amp; $showitems &lt; $pages)? "&lt;a  href='".get_pagenum_link(1)."' class='inactive'&gt;|&lt;&lt;/a&gt;":"";
echo ($paged &gt; 1 &amp;&amp; $showitems &lt; $pages)? "&lt;a href='".get_pagenum_link($prev)."' class='inactive'&gt;&lt;&lt;&lt;/a&gt;":"";

for ($i=1; $i &lt;= $pages; $i++){
if (1 != $pages &amp;&amp;( !($i &gt;= $paged+$range+1 || $i &lt;= $paged-$range-1) || $pages &lt;= $showitems )){
echo ($paged == $i)? "&lt;span class='current'&gt;".$i."&lt;/span&gt;":"&lt;a  href='".get_pagenum_link($i)."' class='inactive' &gt;".$i."&lt;/a&gt;";
}
}

echo ($paged &lt; $pages &amp;&amp; $showitems &lt; $pages) ? "&lt;a href='".get_pagenum_link($next)."' class='inactive'&gt;&gt;&gt;&lt;/a&gt;" :"";
echo ($paged &lt; $pages-1 &amp;&amp; $paged+$range-1 &lt; $pages &amp;&amp; $showitems &lt; $pages) ? "&lt;a href='".get_pagenum_link($pages)."' class='inactive'&gt;&gt;|&lt;/a&gt;":"";
echo "&lt;/div&gt;";
}

}
把这段代码复制到主题下面的 functions.php 中,然后在需要这个功能的地方,写上定义的这个函数,就可以实现了。

实现翻页的函数

这段代码其实也是比较好理解的,如果你有一定的 php 基础,很容就可以看出代码的实现过程。此外,这段代码还输出 html 结构,这样你就可以方便的用 CSS 定义样式了。在中级篇会详细讲解这个地方,默认的情况下效果如下。

实现翻页的效果

因为之前的 archieve.php 文件是使用 index.php 文件生成的,同时这个文件的用途也是显示文章列表,所以我们也要在这个文件的相应位置,放上这些代码。

在文章页面中显示上一篇、下一篇文章

在一个文章或者页面中,显示相邻的上下篇文章这个功能,也比较常见。我们可以使用下面的代码来实现:

<div id=”prevnext” class=”mt10 ofh”>
<div class=”fl”><?php previous_post_link(‘%link’); ?></div>
<div class=”fr”><?php next_post_link(‘%link’); ?></div>
</div>

首先定义了一个结构,然后里面有两个函数:previous_post_link(‘%link’);next_post_link(‘%link’);,这两个函数从字面意义上就可以指定,分别用来生成 上一篇、下一篇文章 链接用的。添加的位置一般在文章的底部,当然也可以在顶部添加。保存一下,我们就可以看到效果了。如果一篇文章有上一篇和下一篇文章的话,就会出现这个链接,如果没有,就不会出现。

上一篇下一篇文章的效果

由于 page.php 文件是由 single.php 文件生成的,如果我们想在页面中也有这个功能,那么我们需要在 page.php 中也加上这些函数。

当管理员登陆后显示管理工具条(AdminBar)

现有的演示主题中,当我们登陆之后,返回首页,上面什么都没有。在使用其他的主题时,登陆后台之后,应该会在页面上显示一个快捷管理条。这个管理条可以让你快速的发表文章或者修改这篇文章等等。

至于如何为这个主题添加 AdminBar ,之前写过文章:在主题中添加 AdminBar 功能 ,在这里就不再赘述了。

不同页面显示对应的标题(title)

在之前的第五节教程制作主题的头部区域中,我提到使用下面这段代码来显示标题:

<title><?php bloginfo(‘name’);  ?> <?php  bloginfo( ‘description’ ); ?></title>

这的确显示出来了标题,但是在其他页面中,标题也显示这一种形式。因为其他的页面(例如 single.php),引用了 header.php 文件,所以当你访问一篇文章的时候,浏览器标题显示的都是一样的内容,这显然是不行的。那么我们如何进行修改呢?

这里可以选择让 single.php 不引用 header.php 文件,而是把 header.php 的内容复制到 single.php 的头部,然后在 title 标签内,编写上调用当篇文章的标题。这样的做法可以解决问题,但是后期的修改不方便,也违背了 WordPress 分块机制的目的。其实我们可以使用下面这段很简单的代码解决这个问题:

<?php if(is_home()): ?>
<title><?php bloginfo(‘name’); ?> <?php bloginfo( ‘description’ ); ?></title>
<?php else: ?>
<title><?php wp_title(‘&laquo;’, true, ‘right’); ?><?php bloginfo(‘name’); ?> </title>
<?php endif ?>

这几条语句,使用了一个 if 语句,同时使用了 is_home() 这个判断函数,判断当前页面是否为首页。如果是,则显示现有的标题结构,如果不是,就调用 wp_title(‘&laquo;’, true, ‘right’); 及其参数来显示标题。这样,当访问文章或者页面等页面的时候,显示的标题就是文章标题和网站名称了,而不是原来的网站名称和网站描述了。我们把它替换到 header.php 文件中,之后就完成了

显示对应标题的代码

至此,初级篇教程就结束了,敬请期待更高级的中级篇教程,它将会以一个更加复杂的主题制作过程为主线,深入的介绍更多常用的函数,以及之前基础篇略过的细节。

本节课相关资源下载

myTheme(基础篇-13) 本节课主题下载

本系列文章

  1. 开始执行的wordpress主题教程计划
  2. 【基础篇】1、学习制作主题之前的准备
  3. 【基础篇】2、WordPress的主题机制
  4. 【基础篇】3、设计制作你的HTML主题文件
  5. 【基础篇】4、安装主题文件
  6. 【基础篇】5、制作主题的头部区域
  7. 【基础篇】6,使用主循环调用显示日志摘要等数据
  8. 【基础篇】7,制作博客的搜索模块
  9. 【基础篇】8,添加博客边栏功能
  10. 【基础篇】9,制作底部区域 footer
  11. 【基础篇】10,将现有 index.php 文件分块处理
  12. 【基础篇】11,通过 index.php 文件生成 文章页面(single.php)
  13. 【基础篇】12,通过当前的文件,生成主题其他必要文件

【基础篇】12,通过当前的文件,生成主题其他必要文件

就基础篇来讲,主题的大部分文件已经生成了,现在还剩下几个比较次要的文件:page.php、archive.php。用到的手段和技术和之前都是一样的,借此,我们再来复习一下分割生成文件的过程。

生成 page.php 文件

页面(page)和文章(single)的样式大体是相同的。很显然,我们要用已经生成的 single.php 文件来生成 page.php 文件。我们先打开一个页面看一下现在的效果。

页面的初始效果

因为目前主题中,没有 page.php 这个模板文件,所以根据前面介绍的 WordPress 主题机制 中的缺失文件替换机制,它使用的是 index.php 文件,所以只能显示出摘要。下面我们来生成 page.php 页面:

  1. 复制 single.php 文件,命名为 page.php
  2. 打开文件修改一下
    对于页面来说,通常不需要底部文章版权和作者介绍信息,因为页面使用来展示内容的,一般是一些公告之类的。此外,如果想做一个留言板这类的东西,也可以使用页面来实现,当然这个页面要带有评论模块。那么,我们只需要把原来 single.php 文件中的底部文章版权和作者介绍信息模块删掉就可以了。

修改完成后的 页面 page.php

修改完成之后,我们再打开随便一个页面,就可以看到里面的内容了。需要注意的是,这里没有显示评论模块,因为我在本地没有安装“多说”插件,所以暂时看不到评论框之类的东西。如果你在本地安装了,就会看到的。

page.php 页面效果

生成 archive.php 文件

archive.php 这个文件主要用于按照日期显示文章列表。很多博客通常在边栏增加一个类似“按月归档”的功能。

archieve 页面

当点击这些日期的时候,系统就会优先查找 archive.php 这个模板文件来显示列表。既然是文章摘要列表,那么我们应该使用 index.php 文件来生成这个文件了。过程和之前的完全相同,复制一遍,改一下名字就可以了。如果你想让它变的与众不同一点,还可以加上一些修饰之类的。例如在文章列表的最顶端加上“按月查看文章”之类的说明字样。

在本系列教程的中级篇中,还会详细讲解怎么进一步的设计这个页面,但是在初级篇,就直接复制一遍好了。这样,主题的其他必要文件就完全生成了,我们的初级篇示例主题就做好了。

本节课相关资源下载

myTheme(基础篇-12) 本节课主题下载

本系列文章

  1. 开始执行的wordpress主题教程计划
  2. 【基础篇】1、学习制作主题之前的准备
  3. 【基础篇】2、WordPress的主题机制
  4. 【基础篇】3、设计制作你的HTML主题文件
  5. 【基础篇】4、安装主题文件
  6. 【基础篇】5、制作主题的头部区域
  7. 【基础篇】6,使用主循环调用显示日志摘要等数据
  8. 【基础篇】7,制作博客的搜索模块
  9. 【基础篇】8,添加博客边栏功能
  10. 【基础篇】9,制作底部区域 footer
  11. 【基础篇】10,将现有 index.php 文件分块处理
  12. 【基础篇】11,通过 index.php 文件生成 文章页面(single.php)

【基础篇】11,通过 index.php 文件生成 文章页面(single.php)

在上一节我们讲解了如何对 index.php 文件进行分块,这节课就来讲解,如何通过这个文件,生成一个 文章模板(single.php 文件)。通过这节课,你会体验到文件分块的好处。

生成这个 文章页面模板 的步骤很简单。首先,我们先来仔细想一下,文章页面和博客首页有什么不同?除非是很特殊的设计,它们之间的不同,就在于主体区域。因为博客首页,更多的是要展示文章的信息,包括标题、时间、摘要等,通常以列表的形式出现。而具体的文章页面,就需要显示文章内容。至于其他的元素,例如头部、边栏、底部等这些都是不需要变化的。

那么生成的步骤就出来了。只需要把 index.php 复制一遍,然后命名为 single.php ,之后再修改一下这个文件,把结构改一下、添加上评论功能等,就变成了一个文章页面模板了。

修改文档结构

对于文章内容页面,为了更加方便的使用 CSS 对其进行控制,我们需要对其 结构进行修改。之前的结构

修改后的结构,已经添加了 文章信息描述 和 评论模块

之后,我们还要修改调用数据的函数。之前复制的时候,还是 the_excerpt() 这个显示文章摘要,我们现在要使用下面语句来调用全文内容

<?php the_content(); ?>

不需要任何参数,即可直接输出一篇文章的所有内容。当然,也可以为这个函数加上一些参数,这样可以根据自己的需要进行定义。更加详细的用法,请看 官方文档 或者 中文版 的。在这里,就不再赘述了。

完成上述步骤之后,我们刷新一下博客,然后随便打开一篇文章的时候,发现已经可以显示出来文章全文了。下面我们需要来进行一些样式的修饰。

添加 CSS 样式

之后可以看到文章数据之后,我们就需要对其使用 CSS 排版布局。排版主要的内容包括:文章整体布局、文章内元素的修饰、新增结构的布局等。关于文章内元素的修饰,在高级篇还会更加深入的讲解。在初级篇中,我简单的对其进行修饰一下,不对一些文章内的细节进行修饰。之后,文章页面效果图如下:

添加相应数据调用

修饰完成之后,我们需要在新增的“文章信息”模块中,添加相应的数据调用。只需要把下面一段代码复制到那个位置即可:

原创作者:<a href=”<?php echo $authordata->user_url; ?>” title=”<?php echo $authordata->display_name;?>”><?php echo $authordata->display_name;?></a><br />
原文链接:<a href=”<?php echo get_permalink($post->ID);?>” title=”<?php echo $post->post_title; ?>”><?php echo $post->post_title; ?></a><br />
版权声明:<a href=”<?php bloginfo(‘siteurl’); ?>”>© <?php bloginfo(‘name’); ?> </a> 版权所有,转载请声明版权!

显示效果如下:

上面的代码,对于有一定 PHP 基础的朋友来说,很容易理解。就是通过 WordPress 内置的几个全局对象,调取当前文章的相应信息,然后以 HTML 的方式呈现出来,于是就有了大家看到的那个效果。

添加评论功能

评论功能,是一篇文章必不可少的模块。增加评论模块,通常在 主题目录下面 新建一个名为 comments.php 的文件,然后在里面添加上相应的评论提交、评论调用显示的函数,之后在相应位置,加上调用函数。但是评论模块比较复杂,在基础篇中,就不讲解如何去手动添加评论模块,而是推荐使用第三方评论插件。

在这里推荐一下 多说 这个评论插件。在 WordPress 中安装这个插件,然后在他们官方网站上注册账号,通过密钥链接起来之后,就可以使用他们的插件了。他们定义的评论框样式美观,而且是拥有完整的评论功能,还可以使用社会化的网络登录并且同步到微博等等功能。所以推荐一下,大家可以去他们官方网站(http://duoshuo.com/)得到详细的使用教程和方法。

新建完 comments.php 之后,保持这个文档内容为空即可。然后找到主题文件中的评论功能的位置,在这里添加下面的代码:

<?php comments_template(); ?>

这个函数就是用来调用评论模块的,我们只需要做这么多即可。因为安装 多说 插件之后,它会自动检测 这个函数 然后将其内容替换成他们的评论模块。安装完多说插件,并且安装官方要求配置好之后,就会看到如下的评论框样式。

好,我们的文章页面就这样完成了。

本节课相关资源下载

myTheme(基础篇-11) 主题下载

本系列文章

  1. 开始执行的wordpress主题教程计划
  2. 【基础篇】1、学习制作主题之前的准备
  3. 【基础篇】2、WordPress的主题机制
  4. 【基础篇】3、设计制作你的HTML主题文件
  5. 【基础篇】4、安装主题文件
  6. 【基础篇】5、制作主题的头部区域
  7. 【基础篇】6,使用主循环调用显示日志摘要等数据
  8. 【基础篇】7,制作博客的搜索模块
  9. 【基础篇】8,添加博客边栏功能
  10. 【基础篇】9,制作底部区域 footer
  11. 【基础篇】10,将现有 index.php 文件分块处理

【基础篇】10,将现有 index.php 文件分块处理

WordPress 具有一套成熟的模板系统,在前面第二节 WordPress的主题机制 中介绍过它的缺失文件替换机制和分离文件分块机制。这个文件分块机制,可以极大的提高代码的重用,而且方面之后的升级和修改。本节课就来讲解如何将现有的主题文件进行分割。

到现在,我们的示例主题 myTheme 已经有三个文件了,分别是:style.css、index.php 、functions.php 三个文件,其中 index.php 文件,就是整个主题的核心文件,下面我们就要对它进行分块,将其分成 头部、主体、边栏和底部 几块。

分出头部区域

头部区域通常包含 HTML 中的 head 区域,以及博客顶部很少变化的区域(例如:logo、标题、描述)。就本示例主题中,head 区域的内容以及 div 中 id 为 header 的区域,都可以划分到头部区域中。所以,我们把它剪切出来,再在目录下面,新建一个文本文档,复制进去。保存为 utf-8 编码的文件,命名为 header.php 。保存为统一的 utf-8 编码,有助于减少网页中的乱码现象,详情可以看一下本人的这篇文章:网页编码就是那点事

之后,在 index.php 文件中的头部原来代码位置中,添加一个句代码

<?php get_header(); ?>
这句代码不需要什么参数,就直接复制上去就可以,从名字上看就可以理解,这个函数的功能是引用主题下面的 header.php 文件,包含进来。 [![](http://qxzm-img.b0.upaiyun.com/blog/2012/11/1566/header.png "分出头部区域")](http://qxzm-img.b0.upaiyun.com/blog/2012/11/1566/header.png) ## 分出主体区域 主题就是当前页面的主要区域,所以这一部分,不用像上面那样,剪切出去,然后使用函数引用进来。确定好主主体区域之后,只需要在当前文件(index.php)中,保留这部分。 主体区域,即用于表示当前页面的主要功能。例如:index.php 文件,首页文件通常包含一个文章列表,那么这个文章列表就是这个页面的主体区域;single.php 文件是用于显示具体文章内容的,所以调用文章内容以及相关信息就变成了它的主体区域。 ## 分出边栏区域 在示例主题 myTheme 中,边栏区域就是 div 元素中 id 为 sidebar 的内容区域。和分离头部区域一样,我们只需要剪切下来,然后复制到 sidebar.php 文件中(需要自己新建且保存为 utf-8 编码)。然后使用下面函数引用
<?php get_sidebar(); ?>
边栏是主体的描述,通常包括一些文章分类、友情链接等等内容。它通常也是高度可重用的模块,可以再几乎所有的网页中调用相同的内容。所以这部分要拿出来。 [![](http://qxzm-img.b0.upaiyun.com/blog/2012/11/1566/sidebar.png "分出边栏区域")](http://qxzm-img.b0.upaiyun.com/blog/2012/11/1566/sidebar.png) ## 分出底部区域 通过上面的介绍,分离底部区域还需要过多的介绍吗?剪切出来代码之后,只需要在原位置添加下面代码进行调用即可
<?php get_footer(); ?>

如果不分割

我就是不明白为什么要分割这个文件,分割成不同的区域,我可以不分吗?当然可以,但是你会遇到下面问题。

你在 index.php 文件中,修改头部文件的内容,在访问文章内容页面(使用 single.php 文件作为模板),却发现头部的内容没有变化,因为你没有在 single.php 文件中,修改相应的头部信息代码。如果你修改一处,需要把主题中所有模板文件全部修改一遍才会生效。

由于没有统一文件,你可能会根据不同的页面,对 HTML 结构进行修改或者编辑,这样会导致网站整体风格的不一致和一些意外错误。

而分割之后,上面的这些问题都将不存在。分割的优势在于提高维护的效率等,所以需要进行分割处理。

本节课相关资源下载

myTheme(基础篇-10) 主题下载

本系列文章

  1. 开始执行的wordpress主题教程计划
  2. 【基础篇】1、学习制作主题之前的准备
  3. 【基础篇】2、WordPress的主题机制
  4. 【基础篇】3、设计制作你的HTML主题文件
  5. 【基础篇】4、安装主题文件
  6. 【基础篇】5、制作主题的头部区域
  7. 【基础篇】6,使用主循环调用显示日志摘要等数据
  8. 【基础篇】7,制作博客的搜索模块
  9. 【基础篇】8,添加博客边栏功能
  10. 【基础篇】9,制作底部区域 footer

【基础篇】9,制作底部区域 footer

底部区域的制作非常简单、灵活。通常博客的底部,添加一个作者的版权声明信息等,以及页面列表等内容。

简单是因为没有什么注意事项,直接添加上内容即可。灵活是因为你可以根据你的需要等,随意的添加内容、函数调用等。

至于复杂的相关函数调用等,我会在以后的文章中讲解,但是本系列教程中的实例主题 myTheme 中,底部写的非常精简,就是一句话而已,所以实现起来就很容易了,直接保持现有的状态即可!

本系列文章

  1. 开始执行的wordpress主题教程计划
  2. 【基础篇】1、学习制作主题之前的准备
  3. 【基础篇】2、WordPress的主题机制
  4. 【基础篇】3、设计制作你的HTML主题文件
  5. 【基础篇】4、安装主题文件
  6. 【基础篇】5、制作主题的头部区域
  7. 【基础篇】6,使用主循环调用显示日志摘要等数据
  8. 【基础篇】7,制作博客的搜索模块
  9. 【基础篇】8,添加博客边栏功能
     

【基础篇】8,添加博客边栏功能

通常的博客都有边栏功能,边栏通常放置文章分类、友情链接等等信息。本节课讲解如何添加博客的边栏相关功能。在 WordPress 系统中,不得不提到的一个强大的功能,那就是 “小工具” ,即在后台中,找到 “外观” 选项下面的 “小工具”。当一款主题支持小工具的时候,我们只需要配置一下小工具,把需要的模块拖动进去,就可以在博客中显示出来。

对于初学者来说,本文暂时不讲解复杂的边栏相关的函数使用,而是直接介绍如何为主题添加“小工具”这个功能的支持。这样就可以实现快速定义博客的边栏。

为主题添加小工具功能,需要两个步骤:1,在 functions.php 文件中声明注册这个功能。2,在主题模板的相应位置,添加对边栏的调用

在 functions.php 文件中声明这个功能

需要用到 register_sidebar 这个函数。这个函数用于注册一个边栏小工具,当然还有一个函数 register_sidebars 与之类似,但是可以注册多个边栏小工具。但是如果你想在主题中,加入多个边栏小工具,我更推荐的是 register_sidebar 函数,因为它可以自己定义更多的输出信息,注册多个,只需要复制几遍即可,更加灵活。

下面介绍一下这个函数的相关参数:

'name'          => __( 'Sidebar name', 'theme_text_domain' ),
'id'            => 'unique-sidebar-id',
'description'   => '',
'class'         => '',
'before_widget' => '<li id="%1$s">',
'after_widget'  => '</li>',
'before_title'  => '<h2>',
'after_title'   => '</h2>' );
  • name:设置这个边栏的名称,在之后的主题中的数据调用中,会用到这个名称。
  • id :用于在 WordPress 内部对这个特定的边栏小工具进行标记,必须是唯一的值,同主题不能有两个相同的 id。
  • description:这个边栏小工具的描述,填写之后,在后台小工具选项配置的时候,可以看到当前工具的描述。
  • class:当前边栏小工具在生成的时候,在 HTML 结构中,加入的 class 属性,这样可以自定义接口,方便 CSS 对其样式的控制。
  • before_widget:在小工具生成的内容前面加上什么?默认加上 li 标签。
  • after_widget:同上。
  • before_title:在后台小工具设置中,添加小工具之后,可以设置小工具的标题,这个属性是为设置的标题包裹什么标签?默认 h2.
  • after_title:同上。
    这个函数还是比较简单的,参数也都容易理解。那么在主题中,想声明一个边栏,就可以编写下面代码:
    if ( function_exists(‘register_sidebar’) ){ //先判断当前 WordPress 是否支持边栏小工具功能
    register_sidebar(array( //以数组的方式,传递参数
    ‘name’ => ‘小工具’,
    ‘id’ => ‘sidebar1’,
    ‘description’ => ‘拖动小工具会在边栏显示出来’,
    ));
    }

    你也可以编写更多的参数,例如制定元素包裹的标签等等,但是在这里,为了演示,其他属性均保持默认。

添加到 functions.php 文件之后,我们登录后台会发现小工具已经可以用了,并且显示出来了设置的信息。

这时,我们就可以把左边的内容拖动到右边去,即可显示出相应的功能。例如拖动“搜索”会生成一个搜索框,拖动“链接”会生成一个有情链接列表。但是刷新主题之后,并没有出现,因为这时候我们还没有在主题中调用这个边栏数据。

在主题中调用边栏数据

声明完成之后,我们找到主题,在相应的位置使用 下面一句代码即可调用某边栏数据:

<?php if ( !function_exists(‘dynamic_sidebar’) || !dynamic_sidebar(‘小工具’) ) : ?><?php endif; ?>

这句代码的意思就是:首先检测是否存在边栏小工具功能,如果存在,检测是否有 “name” 为 “小工具” 的小工具。如果有(即在 functions.php 声明过了)就调用它的数据。即后面的单引号中的内容,就是在 functions.php 文件中声明的 sidebar 的 name 参数值。

在本系列教程的演示主题 myTheme 中,我们需要添加到 id 为 sidebar 的元素中,添加在下面。要注意的是,由于采用了默认的参数,所以每个小工具将会以 li 标签标记,为了符合 W3C 的标准,我们需要在外面加上 ul 标签。

在后台拖动小工具到边栏,配置一下,然后刷新首页就可以看到添加好的小工具内容了。这样,我们的边栏功能就实现了。

为主题添加多个小工具功能

再扩展的多说一些。小工具这个功能非常的使用,而且功能很多。我们可以在主题中添加多个小工具功能,这样修改主题的相关内容,直接在后台编辑小工具即可。例如:在底部添加小工具功能,想修改底部版权文字等,直接通过后台小工具进行编辑就可以了。

前面也说过,添加多个小工具可以使用 register_sidebars 但是我更推荐的是复制多遍 register_sidebar 这个函数,因为它可以对每个边栏都进行描述,让别人更容易看懂。

我们只需要把上面的代码,复制一遍:

if ( function_exists(‘register_sidebar’) ){
register_sidebar(array(
‘name’ => ‘小工具’,
‘id’ => ‘sidebar1’,
‘description’ => ‘拖动小工具会在边栏显示出来’,
));
register_sidebar(array(
‘name’ => ‘底部’,
‘id’ => ‘footer’,
‘description’ => ‘这里是底部的小工具’,
));
}

然后重新配置一下参数,特别要注意的是,name 和 id 一定不能和其他小工具相同,否则会产生数据调用冲突。之后像上面一样,在相应的位置,加上调用代码即可,当然要修改后面单引号里面的内容为要调用数据的 name 参数值。

本节课相关资源下载

myTheme(基础篇-8) 主题下载

本系列文章

  1. 开始执行的wordpress主题教程计划
  2. 【基础篇】1、学习制作主题之前的准备
  3. 【基础篇】2、WordPress的主题机制
  4. 【基础篇】3、设计制作你的HTML主题文件
  5. 【基础篇】4、安装主题文件
  6. 【基础篇】5、制作主题的头部区域
  7. 【基础篇】6,使用主循环调用显示日志摘要等数据
  8. 【基础篇】7,制作博客的搜索模块

【基础篇】7,制作博客的搜索模块

搜索模块几乎成为了信息性网站的标配组件,对于博客来说,更是必不可少的东西。有了搜索就可以快速的定位你的文章。本节就来讲解如何制作博客的搜索模块。

制作搜索表单

搜索模块的实质就是一个表单而已,将搜索的内容,提交给 WordPress ,然后由系统查询返回结果。别告诉我你连一个 HTML 的表单都写不出来,如果真的,请先回去学习一下 HTML 吧,因为这是制作主题必备的基本能力。下面我直接给出一个搜索表单。

<form method="get" action="">
      <input type="text" name="s"  />
      <input type="submit" value="GO" />
</form>
上面就是一个非常简单的搜索表单,有一个 文本框 和一个 提交按钮。WordPress 系统的搜索模块,接受 get 方式发送的数据,同时要注意它的 action 地址,为博客的首页。同时要注意,对于搜索框,必须要对它设置 name 属性值为 s ,这样 WordPress 才能接收搜索字符串。所以,一个可用的 WordPress 搜索表单应该这样写:
<form method="get" action="<?php bloginfo('home'); ?>/">
        <input type="text" name="s"  />
        <input type="submit" value="GO" />
</form>

进一步的优化

单纯的一个表单是不太好的,我们可以加一些修饰,这种修饰包括交互性的修饰、外观的修饰。为了尽量简单照顾初学者,这里不讲外观的修饰,尽量不涉及 CSS 设计相关的内容。下面说一下搜索框的简单的交互性修饰。

通常,我们需要在打开页面的时候,自动将光标聚焦到 搜索框 中,这样可以让用户在敲击键盘的时候,可以自动的在输入框中输入,而不需要让用户手动找到搜索框。实现这个效果,需要为表单加上 autofocus 属性。

此外,我们通常希望能告诉用户,这是一个搜索框,最好的方法就是在搜索框中填写说明文字,当用户点击聚焦的时候,文字自动消失。实现这个效果,可以通过两种方法:1,HTML5 的 placeholder 属性。2,通过一段 JavaScript 代码。第一种方法很简单,直接把说明文本当做这个属性的属性值,即可显示出来。但是这是 HTML5 中新增的属性,所以在早期的浏览器中,不会被支持。那样的话就不会显示说明文字了。所以我更推荐的是下面的这段 JavaScript 代码:

onblur=”if (this.value ==’’) this.value=’搜索一下’” onfocus=”this.value=’’” onclick=”if (this.value==’搜索一下’) this.value=’’”

稍懂 JavaScript 的朋友就能看出来这段代码的意思,即:当光标激活或者点击文本框的时候,判断值是否为空,如果为空,就让值变成“搜索一下”。当焦点移出文本框的时候,会检测文本框的内容,如果为空,就自动变成“搜索一下”。如果你实在是看不懂,就不用管了,直接复制上去就可以了。

最终的版本

我们在 myTheme 主题中,找到边栏模块(id=“sidebar”),在下面新建一个用于搜索的 div 块,然后把代码复制上去:

<form method=”get” action=”<?php bloginfo(‘home’); ?>/“>
<input type=”text” name=”s” onblur=”if (this.value ==’’) this.value=’搜一下又不会怀孕…’” onfocus=”this.value=’’” onclick=”if (this.value==’搜一下又不会怀孕…’) this.value=’’” autofocus />
<input type=”submit” value=”GO” />
</form>

这样就完成了一个简单的、没有样式的博客搜索模块了。

完成之后,现在就可以搜索一下看一下效果了哦!

本节课相关资源下载

myTheme(基础篇-7) 主题下载

本系列文章

  1. 开始执行的wordpress主题教程计划
  2. 【基础篇】1、学习制作主题之前的准备
  3. 【基础篇】2、WordPress的主题机制
  4. 【基础篇】3、设计制作你的HTML主题文件
  5. 【基础篇】4、安装主题文件
  6. 【基础篇】5、制作主题的头部区域
  7. 【基础篇】6,使用主循环调用显示日志摘要等数据

【基础篇】6,使用主循环调用显示日志摘要等数据

在前面的教程中,我们已经做出来了一个简单的头部,包括 CSS 文件的引入、文档的声明、添加网站标题副标题等。今天的教程,将要讲解如何以列表的方式显示博客中的文章。

认识 WordPress 的 主循环

我们想要达到的目的和效果,就是在博客的首页中,显示出来博客中现有的文章的标题、摘要、文章相关信息。通过前面的学习,我们了解到了 Wordpress 的函数机制,即使用函数调用数据库中的各种信息。可想而知,对于文章的标题、摘要、相关信息等,肯定也是通过函数来调用的。

但是现在就出来了一个问题。这类的函数不同于其他的函数,例如调用网站标题的函数,它只会返回一个确定的值,那就是数据库中的博客标题。但是这些调用文章标题等信息的函数不同。因为每个博客的文章数据都有很多,如果我添加了一个调用文章主题的函数,那么系统会显示众多文章中的哪一篇文章的相关数据呢?

所以 WordPress 系统有一个主循环机制。主循环机制就是为了解决这个问题,我们把显示文章的 HTML 结构、调用相关内容的函数等,写进主循环中,执行后查看源文件会发现,写进主循环的内容,会被重复很多遍(具体显示多少,在后台进行配置),但是在原先调用函数的位置会把文章数据调用插入进去。

于是可以这样认识主循环:循环调用数据库中的每一篇文章,把定义在主循环的内容,复制一下,把当前循环到的文章的相应数据插入到调用函数中,完成这第一篇文章之后,就继续按照这个步骤循环下一篇文章。这样就形成了一个文章列表。

主循环的结构和用法

主循环的结构实际上就是一段简单的 PHP 判断和循环代码:

<?php if(have_posts()) : ?>
<?php while(have_posts()) : the_post(); ?>
主循环里面的循环内容以及各种数据调用函数
<?php endwhile; ?>
<?php else: ?>
文章调用出错的处理
<?php endif; ?>

上面的代码比较乱,因为保留了 PHP 的标签,现在我将它整理一下,仅仅保留 PHP 的语句:

if(have_posts()):
while(have_posts()) : the_post();
主循环里面的循环内容以及各种数据调用函数
endwhile;
else:
文章调用出错的处理
endif;

懂一点点编程基础的人,一看就可以看出来,这就是一个简单的 if 判断语句,里面有一个 while 循环语句,然后不断的循环调用文章数据。这里面有两个重要的函数:have_posts()the_post()

其实从名字中,就可以看出来,第一个函数是判断这个博客是否有符合调用条件的文章,使用 if 语句来判断,如果有符合条件的文章的时候,才会调用主循环来进行下一步的操作。如果没有的话,直接跳到后面进行错误处理。

在下面的 while 语句中,再次进行了测试,当有文章的时候,才进行循环。之后的 the_post() 函数,就是调用了当前循环到的文章数据,表示下面的代码,都会对这个当前循环到的文章数据,进行数据调用显示。

应用主循环输出文章的信息

上面介绍了主循环的原理和结构,下面就要应用到我们的主题 myTheme 中。在这个演示的主题中,要循环的结构有一个 class 属性 article,所以要在这里和它的父结构之间,插入这段主循环的起始代码。

在这个 class 为 article 的 div 元素的结尾,加上主循环的结束代码。

这样,就会把包裹在主循环中的数据重复显示。在之前设计主题的阶段,我添加了两个文章摘要,现在我已经把第一个使用主循环包裹起来了,所以第二个可以直接删掉了。下面我们要使用对应的数据调用函数,替换掉里面的演示数据。这里,我直接给出相应的函数,关于函数功能的解释,在后面说。

具体代码如下:

            <?php if(have_posts()) : ?><?php while(have_posts()) : the_post(); ?>
<div>
<h1><a href=”<?php the_permalink(); ?>”><?php the_title(); ?></a></h1>
<div><?php the_excerpt(); ?></div>
<div>作者 : <?php the_author(); ?> 时间 : 20<?php the_time(‘y年m月d日’) ?> 文章分类 : <?php the_category(‘, ‘); ?>
</div>
</div>
<?php endwhile; ?>
<?php else: ?>
<?php echo ‘系统没有找到相应的文章!!’; ?>
<?php endif; ?>

将代码修改成这样之后,再打开我们的本地的 WordPress 就可以看到效果了:

如果在浏览器中随便输入几个参数,这样 WordPress 就无法查询到相应的文章。于是就出现错误信息。

上例中涉及的函数解析

the_permalink()

这个函数用来输出当前文章的 “固定链接”,输出的是链接地址。将其加入 a 中的 href 属性,即可创建跳转到本文内容的超链接。

the_title()

这个函数用来输出当前文章的 文章名称。可以配合上一个函数,做成超链接,点击打开相应文章。

the_excerpt()

这个函数用来输出当前文章的摘要信息。在 WordPress 后台编写文章的时候,是可以设置摘要内容的(你需要打开右上方的“显示选项”,启用摘要功能),它会显示当前文章的摘要。如果当前文章没有设置摘要,那么将会截取 前55个字符 作为摘要内容,并且在后面加上省略号。更加具体的用法,可以查看官方的文档。此外,这个函数可能会在某些版本中失效或者显示出全文,如果你遇到我说的这种情况,可以查看我之前写过的文章:解决wp首页无法显示摘要而显示全文的方法

the_author()

这个函数用来输出当前文章的作者名称。

the_category()

这个函数用来输出当前文章所在的分类目录。通常配合多个参数使用。在上面的代码中,添加了参数 ‘,’。功能是,当本文存在多个 分类目录 的时候,将使用 ‘,’ 来分割当前目录。如果想了解更多的参数,可以百度搜索,或者查看官方文档

the_time()

这个函数用来输出当前文章的发布时间。在上例中,使用了参数 ‘y年m月d日’ 表示输出的信息格式为:XX年XX月XX日。

本节课相关资源下载

myTheme(基础篇-6) 主题下载

本系列文章

  1. 开始执行的wordpress主题教程计划
  2. 【基础篇】1、学习制作主题之前的准备
  3. 【基础篇】2、WordPress的主题机制
  4. 【基础篇】3、设计制作你的HTML主题文件
  5. 【基础篇】4、安装主题文件
  6. 【基础篇】5、制作主题的头部区域

【基础篇】5、制作主题的头部区域

上节课的时候,我们了解接触到了第一个函数。在这节课中,我将会讲解更多的有关头部的 WordPress 函数,并且教你打造一个完整、规范的头部。

这里的头部,主要分为两部分:

  1. HTML 文档中的 <head> 区域
  2. 主题中的顶部(通常包含博客名称、描述、导航等内容)

HTML 文档的 <head> 区域

众所周知,HTML 文档中,<head> 区域用来描述这个文档的各种信息,大部分的内容,都是看不见的,只有一个<title>元素,在标题栏上可以看见。但是并不是它不重要,这里 面包含文档声明,也是很重要的地方。与这块有关的,有很多函数等,在【基础篇】,我直说几个简单的,可以满足基本功能即可。在后面的【中级篇】教程中,我会更详细的讲解更多的函数和相关用法。

将以下代码复制进 head 标签内

<title><?php bloginfo(‘name’);  ?> <?php  bloginfo( ‘description’ ); ?></title>
<meta http-equiv=”Content-Type” content=”text/html; charset=<?php bloginfo( ‘charset’ ); ?>” />
<link rel=”stylesheet” type=”text/css” href=”<?php bloginfo( ‘stylesheet_url’ ); ?>” />

简单的介绍一下相关功能。

<title>标签:

作为网页的标题,我们通常使用博客标题和博客描述作为博客首页的标题。所以我们使用了<?php bloginfo(‘name’); ?> <?php bloginfo( ‘description’ ); ?>这两个函数。但是在实际应用中,你会发现一个问题,如果就这样做了,所有的博客页面,全部都是相同的“博客标题 博客描述”。关于这个问题,我会单独拿出来在后面进行讨论。

<meta>标签:

声明文档的编码,WordPress默认的编码就是 utf-8 ,所以我们尽可以大胆写上utf-8。但是在官方主题中,还是用了<?php bloginfo( ‘charset’ ); ?>这个函数,来获取博客编码。所以我们需要这样写。

<link>标签:

加载必须的style.css文件。<?php bloginfo( ‘stylesheet_url’ ); ?>这个函数在之前的文章中,提到过,在这里不再赘述。

主题中的顶部

在本系列的demo主题,顶部只有一个网站标题和网站的副标题描述。所以我们就需要使用<?php bloginfo(‘name’); ?> <?php bloginfo( ‘description’ ); ?>这两个函数,替换掉之前我们的文本,即

这里还有个细节需要注意,在博客名称的地方,我使用了一个超链接,指向的是一个“#”,现在要把它修改成博客首页,则需要使用这个

<?php bloginfo(‘siteurl’); ?>

用它替换 href 属性中的 # 。

好了,头部的处理就这样完成了,我们可以在浏览器中访问一下。这时候,就可以看到标题、网站标题、网站描述变了。你在后台中修改相应的信息,刷新之后,相应的也会变。

本节课相关资源下载

myTheme(基础篇-5) 本节课主题下载

本系列文章

  1. 开始执行的wordpress主题教程计划
  2. 【基础篇】1、学习制作主题之前的准备
  3. 【基础篇】2、WordPress的主题机制
  4. 【基础篇】3、设计制作你的HTML主题文件
  5. 【基础篇】4、安装主题文件

【基础篇】4、安装主题文件

在前面的几个教程中,我们已经设计出了主题的模板、样式,同时也添加了模拟数据,现在我们要做的就是把现有模板文件安装到 WordPress 中,这样有两个好处

  1. 添加函数调用之后,刷新即可显示相应数据,方便对数据的规划。
  2. 还有其他各种好处。
    到了这个步骤,你就会发现 远程调试 和 本地调试 的区别了。远程调试,需要不断的在远程服务器上修改文件,然后刷新速度还要看网速等;本地调试直接复制,然后使用文本编辑器直接打开编辑即可,刷新加载速度也非常快。所以推荐在本地进行调试。

安装主题

WordPress 主题安装相信大家都不陌生,我们只需要把上节课只做好的 “myTheme” 文件夹复制到 “wp-contentthemes” 文件目录下面,然后把 Html 文件后缀修改成 PHP 即 index.php,一个文件夹有了index.php 和 style.css 这两个文件,才能被系统识别。之后我们登录后台,找到 “外观-》主题” 就可以看到我们的 “myTheme” 主题了。

你会发现你制作的这个主题显示和其他下载的主题显示的不同,标准主题中,需要在 style.css 文件中添加一些信息,同时还要生成缩略图。关于这一部分,将会在 【中级篇】 中进行讲解。

启用主题

点击启用之后,我们再访问我们博客的首页,就可以发现,已经显示出来我们之前的模拟数据了。但是完全没有 CSS 的样式效果。

原因很简单,我们之前的模板中,引用 style.css 文件的时候,直接用的相对目录

<link rel=”stylesheet” type=”text/css” href=”style.css” />

href 属性直接指向了 style.css 文件,指向的是 主题 文件下面的 style.css 文件,当我们访问博客首页的时候,就无法加载到这个 style.css 文件了。

正确的做法是,使用 绝对链接 到你的 style.css 。这里,我们需要将原来模板中的 <link>标签的 href 属性改成 http://localhost/cms/wp/wp-content/themes/myTheme/style.css 。这里包含你的网址和 CSS 文件的绝对地址。这样就正常了,但是这样做有很多问题:

  • 使用你的模板的时候,需要修改这个属性的值,把前面的网址改成你的博客网址。
  • 修改模板名称的时候,我们同样需要修改这个属性的值。
  • 以及其他麻烦。
    你懂这种代码,修改起来还比较容易,但是面对不懂的用户呢?你让他们如何修改?所以我们就需要想出解决方法。

如果说,我可以使用某种东西,然后它就自动得到当前网站的地址,加上当前主题的目录名,自动的生成这个地址,那么这些问题都会迎刃而解。

WordPress 的主题机制以及为我们准备好了这样的东西,那就是 WordPress 主题函数。WordPress 以及帮我们准备好了大量的函数,来调用这些数据。我们只需要插入主题文件中即可。

style.css 文件调用函数

我们只需要在原来模板的 href 属性中,将原来的 “style.css” 换成 “<?php bloginfo( ‘stylesheet_url’ ); ?>” 就可以了。

下面,潜行者m带着你简单分析一下这个函数

<?php bloginfo( ‘stylesheet_url’ ); ?>

首先,WordPress 是 PHP 开发的,所以执行函数的时候,都需要用 PHP 标签括起来,例如:

<?php …….. ?>

其次,这里面的函数名是 bloginfo(); 这是 WordPress 内置的函数,其功能就是调用各种博客相关数据的,这些数据通常在 “WordPress 后台 》 设置 》 常规” 里面进行设置。这个函数有很多参数,例如上面的那个参数 “stylesheet_url” ,就是调用了 style.css 的绝对地址。所以我们插入这个函数之后,WordPress 的主题机制会运行这些函数,将博客数据替换出来。

这是我们学习的第一个函数,我这里只是简单的讲解一下,在后面的教程中,我将会更加详细的对参数以及用法进行解析。如果你想超前学习,可以看一下本人之前的关于 bloginfo(); 函数的常用参数文章:wordpress中bloginfo()函数详解

添加修改之后,我们可以看到,页面已经恢复正常了

学习重点

经过这一个小事情之后,我们可以明确一下学习重点。那就是各种常用 WordPress 函数的参数以及使用方法,之后插入模板文件中,就可以显示 WordPress 的数据了,也就达到了制作主题的目的了。

本节课相关资源下载

myTheme 主题下载地址 : >>点击这里

之前的系列文章

  1. 开始执行的wordpress主题教程计划
  2. 【基础篇】1、学习制作主题之前的准备
  3. 【基础篇】2、WordPress的主题机制
  4. 【基础篇】3、设计制作你的HTML主题文件