WordPress主题制作全过程(五):制作header.php

日期: 标签:SEOWordPress教程主题制作 178 条留言
如需帮忙改代码,或者WordPress二次开发、PHP网站建设等需求,可联系我购买付费服务:  点此联系我
文章目录

你可以尝试用文本编辑器打开从WordPress主题制作全过程(三):HTML静态模板制作下载到的 .html 文件,不知道你有没有发现他们头部的代码都非常的相似呢?其实我们可以提取这部分相似的代码,放到一个单独的文件header.php中,各个页面想用这部分代码的时候再用php的include()或者WordPress的get_header()包含进去,省的每个页面里面都要写这部分代码,更改起来也可以达到一改全改的目的。

再次提醒:如果你不打算动手编写代码,这个系列教程就别看了,对你无益!

接着我们上次创建的主题目录wp-content\themes\Aurelius,在该目录下新建一个php文件header.php,我们提取出index.php中的头部代码复制粘贴到header.php中,下面的代码就是目前header.php中的所有代码了(当然不同主题的头部代码都是不一样,在你实际的项目中可以自定决定):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head profile="http://gmpg.org/xfn/11">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Aurelius | Blog</title>
<!-- Stylesheets -->
<link rel="stylesheet" href="./style.css" type="text/css" media="screen" />
</head>
<body>
<div id="wrapper" class="container_12 clearfix">
	<!-- Text Logo -->
	<h1 id="logo" class="grid_4">Aurelius</h1>
	<!-- Navigation Menu -->
	<ul id="navigation" class="grid_8">
		<li><a href="contact.html"><span class="meta">Get in touch</span><br />
			Contact Us</a></li>
		<li><a href="blog.html" class="current"><span class="meta">Latest news</span><br />
			Blog</a></li>
		<li><a href="index.html"><span class="meta">Homepage</span><br />
			Home</a></li>
	</ul>
	<div class="hr grid_12 clearfix"> </div>
	<!-- Caption Line -->
	<h2 class="grid_12 caption clearfix">Our <span>blog</span>, keeping you up-to-date on our latest news.</h2>
	<div class="hr grid_12 clearfix"> </div>

再用文本编辑器打开index.phparchive.phpcontact.phpfull_width.phppage.phpsingle.php,删掉以上类似代码,改成:

<?php get_header(); ?>

好,现在打开你的测试博客主页,看看我们制作的主题是否还可以正常工作,答案是可以的,跟原来几乎没什么两样,但还是一片混乱。get_header()就相当于将header.php中的代码拷贝到当前的php文件。接下来,我们将仔细探讨header.php中的动态内容。header.php将会被所有的模板页面(主页、分类页、页面、标签页等)所包含,所以header.php中代码应该是动态,适合不同页面的,所以这里面需要用到PHP代码,而不是单纯的HTML。下面让我们一起来修改header.php

1、更改<title>

我们都知道不同页面的title都是不一样,而且title的设置还会直接影响到SEO的效果,所以这里应该谨慎设置。下面提供一种SEO优化的title写法,将<title>Aurelius | Blog</title>改成:

<title><?php if ( is_home() ) {
		bloginfo('name'); echo " - "; bloginfo('description');
	} elseif ( is_category() ) {
		single_cat_title(); echo " - "; bloginfo('name');
	} elseif (is_single() || is_page() ) {
		single_post_title();
	} elseif (is_search() ) {
		echo "搜索结果"; echo " - "; bloginfo('name');
	} elseif (is_404() ) {
		echo '页面未找到!';
	} else {
		wp_title('',true);
	} ?></title>

以上添加的php代码运用了条件判断,针对不同的页面采用不同title,这里解释一下这几个条件标签。

  • is_home():当前页面为主页时返回true
  • is_category():当前页面为分类页时返回true
  • is_single():当前页面为单文章页时返回true
  • is_page():当前页面为单页面时返回true
  • 更详细的内容参阅WordPress文档:条件标签

到目前为止,可能你对这些条件判断标签还没有深入的认识,也搞不懂到底是用了这些标签会对主题造成怎样的影响的,随着我们教程的进一步深入,你会慢慢理解的。如果你不喜欢上面title的写法,可以自行上网搜索相关代码:WordPress SEO title

2、更改样式表style.css路径

在此之前你看到的首页都是混乱的,原因是还没加载css样式。现在我们一起把样式加上。你可以在header.php中找到这一段代码:

<link rel="stylesheet" href="./style.css" type="text/css" media="screen" />

聪明的你可能问:wp-content\themes\Aurelius目录下不是已经有一个 style.css 吗?那为什么 header.php 没有加载css呢?结果你是可以看到的,页面一篇混乱,可以确定确实没有加载到css。因为这是WordPress的主题,是要被WordPress的主程序调用,经过层层解析才能把你的博客显示出来,而不是简简单单的html静态网页文件。正确的改法:

<link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); ?>" type="text/css" media="screen" />

bloginfo('stylesheet_url')输出的是你的主题css文件绝对网址,如http://localhost/wp/wp-content/themes/Aurelius/style.css,WordPress程序会自动识别你的WordPress安装地址,当前启用的主题,自动输出这个style.css链接。现在你可以试着更改一下,然后刷新一下你的博客首页,查看网页源代码,style.css的链接是不是变成你的了?页面是否可以正常显示了呢?

如果你的css文件不是style.css,且不是在主题根目录下,那怎么办呢?我们可以用<?php bloginfo('template_url'); ?>来获取主题根目录的URL,如你的主题css文件是abc.css,那么我们可以这样写:<?php bloginfo('template_url'); ?>/abc.css,如果是在子目录css下那就这样:<?php bloginfo('template_url'); ?>/css/abc.css。同样加载js文件也是这样。

不过,还有几张图片的路径不对,还不能显示出来,现在我们一起用文本编辑器打开index.phparchive.phpcontact.phpfull_width.phppage.phpsingle.php,给这些图片加上正确的URL,搜索代码,将所有的:src="images/,批量替换成src="<?php bloginfo('template_url'); ?>/images/。现在再刷新你的主页,看文章的缩略图是否可以正常显示。<?php bloginfo('template_url'); ?>用于输出主题目录的URL。

3、添加pingback

至于什么是pingback,你可以在搜索引擎中输入关键字:WordPress pingback,就可以得到你想要的答案了。如果你需要这个功能,可以在<head>里面添加以下代码:

<link rel="pingback" href="<?php bloginfo('pingback_url'); ?>" />

4、更改博客名称和描述

header.php,下面两行代码用于显示博客名称和描述:

<h1 id="logo" class="grid_4">Aurelius</h1>
<h2 class="grid_12 caption clearfix">Our <span>blog</span>, keeping you up-to-date on our latest news.</h2>

上面是静态代码,现在做如下修改:

<h1 id="logo" class="grid_4"><a href="<?php echo get_option('home'); ?>/"><?php bloginfo('name'); ?></a></h1>
<h2 class="grid_12 caption clearfix"><?php bloginfo('description'); ?></h2>

现在你的博客首页看到的就是你博客名称和描述了,并且logo也是一个链接指向你的博客首页。我们这里说说这些php代码的作用。

  • <?php echo get_option('home'); ?>  输出你的博客首页网址
  • <?php bloginfo('name'); ?>  输出你的博客名称
  • <?php bloginfo('description'); ?>  输出博客描述

博客名称和描述可以在WordPress管理后台 - 设置 - 常规那里更改。以后制作你自己的WordPress主题的时候,你可参照上面的说明对你的主题进行修改。

5、添加订阅feed链接

相信每个已发布的WordPress博客主题都会提供feed订阅,当然我们的主题也应该提供这样的功能。在</head>之前添加以下代码:

<link rel="alternate" type="application/rss+xml" title="RSS 2.0 - 所有文章" href="<?php echo get_bloginfo('rss2_url'); ?>" />
<link rel="alternate" type="application/rss+xml" title="RSS 2.0 - 所有评论" href="<?php bloginfo('comments_rss2_url'); ?>" />

6、添加wp_head

有些插件需要在网页头部执行一些类如添加一些js或css的动作,要让这些插件能够正常的工作,也让你的主题有更好的兼容性,你应该添加wp_head()函数。打开header.php,在</head>前面添加以下代码即可:

<?php wp_head(); ?>

现在打开你的博客主页,查看源代码,</head>前面是不是多了以下类似代码(这些都是wp_head()的功劳):

<link rel="EditURI" type="application/rsd+xml" title="RSD" href="http://ludou.co.tv/blog/xmlrpc.php?rsd" />
<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="http://ludou.co.tv/blog/wp-includes/wlwmanifest.xml" /> 
<link rel='index' title='露兜实验室' href='http://ludou.co.tv' />
<meta name="generator" content="WordPress 2.9.2" />

7、添加Description 和 Keywords

关于添加网页描述和关键字,可以查看我之前写过的文章:WordPress使用经验(一)独立的Description 和 Keywords

8、显示菜单栏

目前菜单栏有Home、Blog和Contact Us几个菜单,不过这些都是静态的内容,并不是你博客上的页面。现在我们将菜单栏换成你的菜单,这里只在菜单栏中列出页面page,当然你也可以再放置分类,根据你的喜好来吧,将header.php中:

<ul id="navigation" class="grid_8">
	<li><a href="contact.html"><span class="meta">Get in touch</span><br />
		Contact Us</a></li>
	<li><a href="blog.html" class="current"><span class="meta">Latest news</span><br />
		Blog</a></li>
	<li><a href="index.html"><span class="meta">Homepage</span><br />
		Home</a></li>
</ul>

改成:

<ul id="navigation" class="grid_8">
	<?php wp_list_pages('depth=1&title_li=0&sort_column=menu_order'); ?>
	<li <?php if (is_home()) { echo 'class="current"';} ?>><a title="<?php bloginfo('name'); ?>"  href="<?php echo get_option('home'); ?>/">主页</a></li>
</ul>

具体如何在菜单栏显示分类,你可以看这篇文章,有什么问题再给我留言:WordPress 分类做导航栏,并高亮显示

另外,可以参考这两个函数的说明(英文):

下面两篇文章介绍了WordPress菜单的制作方法,也可以参考:

9、刷新缓存

<body>前面,</head>后面添加PHP代码,用于提高程序运行效率:<?php flush(); ?>

总结

好了,本次练习到此结束!现在总结一些今天讲到的比较重要的知识点:

  • <?php get_header(); ?> 从当前主题文件夹中包含header.php文件
  • is_home(),is_single(),is_category()等几个条件判断标签
  • <?php bloginfo('stylesheet_url'); ?> 输出主题文件夹中style.css文件的路径
  • <?php bloginfo('pingback_url'); ?> 输出博客pingback网址
  • <?php bloginfo('template_url'); ?> 输出博客主题目录URL
  • <?php echo get_option('home'); ?> 输出你的博客首页网址
  • <?php bloginfo('name'); ?> 输出你的博客名称
  • <?php bloginfo('description'); ?> 输出博客描述
  • <?php wp_head(); ?> 用于包含WordPress程序输出头部信息
  • <?php wp_list_categories(); ?> 用于列出博客分类页
  • <?php wp_list_pages(); ?> 用于列出博客页面

到目前为止你的博客还只能看到主页,不要灰心,凡事一步一个脚印,以后教程会慢慢深入的。最后提供经过本次修改后的Aurelius主题文件,你可以用文本编辑器打开看看,跟你修改的文件比较比较(尤其是header.php),看看你改得怎么样?

下载此文件

WordPress主题制作全过程完整列表:

-- 完 --

本文采用 「CC BY-NC-SA 4.0」创作共享协议,转载请标注以下信息:
原文出处:露兜博客 https://www.ludou.org/create-wordpress-themes-header.html
露兜
ourwindow@163.com  QQ 825533758   微信号 ludou364939

业余编程爱好者,主业是贝壳工艺品商人,感兴趣可以到我的淘宝店看看:海叔贝爷

178 条留言

点此留言
1 2 3 4 70
  1. jkrt

    你好,我是想问一个相对无关的问题,我在境外网站上下载的主题安装然后激活后后台页面就变成空白页面了,首页也是,怎么都调不好,打开看index.php 是如下的代码:
    {block content}

    {if $wp->isBlog and $blog and $blog->content}
    <div class="entry-content blog-content">
    {!$blog->content}
    </div>
    {/if}

    {if $wp->havePosts}

    {loop as $post}
    {includePart parts/post-content}
    {/loop}

    {includePart parts/pagination, location => nav-below}

    {else}

    {includePart parts/none, message => empty-site}

    {/if}
    这就是全部代码,这代码正常吗,还有就是委托你帮忙修改的话,你是怎么收费的

  2. 小床

    我想问一下栏目页是怎么做的,就是archives.php的那个,那个不同的分类是怎么对应不同标题哪些的

  3. PAN

    挺好,终于初步大略知道HTML怎么转化过来了

  4. 安好

    求发个category.php页面制作的教程

  5. 阿萧

    <img src="<?php bloginfo('stylesheet_url'); ?>../image/cont2.jpg" alt="" >
    图片为什么还是出不来。。。。。

    • 露兜

      @阿萧 自己查看网页源代码。看看图片链接是否正确,看你的链接中用了 ../

      • 阿萧

        @露兜 对了,是不是所有的文件名都是固定的?刚开始用,还不是很理解0.0。
        我写了好几个页面 ,感觉和它的有冲突。。。

        • 露兜

          @阿萧 文件名必须是固定的,请看第二节介绍

  6. MeTime

    你好,我按照你写的,修改了页面导航代码,但是却只有首页的导航栏是高亮显示,点击其他分页时候,没有高亮显示。我的其他导航栏目是页面

    • 露兜

      @MeTime 请参考新教程:https://www.ludou.org/wordpress-create-navigation-menu.html

  7. 十四

    貌似没有搜索search页面制作。楼主的博客很好学到很多东西。。。。

  8. wangftr

    看完之后想要好好地学习下wordpress了

  9. helloworld

    感谢楼主分享的干货, 楼主,那些get_header()似乎要引入文件才能用,按照你的做页面刷新不出来,函数显示未定义,我引入了 "………/wp-config.php" 就可以了

  10. Jianrry

    请问当我更改样式表style.css路径为<link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); ?>" type="text/css" media="screen" />时,删除主题文件夹里面的style.css文件后,为什么主题仍然可以正常显示?

    • 露兜

      @Jianrry 你的服务器设置了缓存,缓存到你的浏览器了。试试清楚浏览器的浏览记录,或CTRL + F5强制刷新

  11. haoxing49

    收获很大,很感谢你的分享

  12. Aerry

    请问一下,如何不输出主题路径?我的意思是在源代码隐藏主题路径

  13. Bronson

    <?php echo get_option('home'); ?> 输出你的博客首页网址
    请问一下这里的echo起什么作用,我尝试删掉echo,好像不影响链接的功能。

    • 露兜

      @Bronson 打印首页地址,如果没有echo,你的查看html代码,href中会是空的,空的链接在有些浏览器被识别成首页,但是这是不正确的。

  14. zwxxs

    把所有 .php 的代码开头相似的部分换成 <?php get_hearder();?> 之后,打开主页,就变成了空白,什么都没有。哪里出错了?

    • 露兜

      @zwxxs 注意打开php.ini中的display_error选项,设置为 On
      这样会显示php的错误信息,以便查找到底是哪里出错了

  15. zwxxs

    老师您好?我打开index.php、archive.php、contact.php、full_width.php、page.php和single.php,删掉开头部分的类似代码,再写上 :<?php get_hearder();?> .然后去查看主页时,成了空白,我是不是弄错了?

    • 露兜

      @zwxxs 你可以参考文章末尾给出的修改后他的文件,用文本编辑器打开看看,跟你修改的文件比较比较,是否有什么不同?

  16. 墨慈丶

    感谢博主大大,今天在学wp的二次开发,看了这篇文章入门正好,教程做的很用心,万分感谢!

  17. 张淡腾

    在wordpress3.1以后做模板的时候,制作完头部文件header.php,并在里面添加

    1
    <?php wp_head(); ?>
    有时候会出现在火狐浏览器下面的顶部空出一部分空白的区域,IE下正常。
    开始认为是编码格式造成的,于是修改所有模板的编码为utf-8无bom格式,因为php在处理BOM头的时候,有时候存在错误,可能造成你在使用 header 或 session_start 之类的函数时,出现 文件已经输出的错误等。但是修改完之后问题依然存在。
    后来发现这个问题只存在于WP3.1版本之后,3.1之后WP出了一个新的功能就是在首页显示一条管理员工具栏。而模板制作后出现空白的地方大小更好和这个工具栏大小一样。所以猜测是这个工具条的影响。
    那么要如何删除这个功能:
    1、在function.php中添加下面这行代码就能实现:

    1
    add_filter( 'show_admin_bar', '__return_false' );
    2、第二种是通过控制台按用户进行设定,操作步骤为:登录WP后台,进入【用户】–【我的资料】,在显示管理工具栏里面,取消【在浏览站点时】选项。
    ok,这样就就可以解决顶部空白问题了。

  18. babytime

    在添加订阅信息时,教程说在html页面进行更改,可是所有页面都改成了PHP了呀,而且PHP里面没有看到head标签

    • 露兜

      @babytime 不太清楚你讲的是什么意思。
      不过PHP文件中也可以写html代码。
      本文所有修改均是修改header.php这个文件,这个文件的初始代码,见本文开头处提取出来的html代码,这段代码中有</head>

1 2 3 4

发表留言