wordpress主题开发教程
一、主题开发步骤
简单的说,开发一个wordpress分以下几步:
- 在wp-content/themes/文件夹下创建属于你自己的主题文件夹
- 然后在主题文件夹下创建2个必须的基本文件 index.php 和style.css
- 接着根据需要创建其他模板和文件及利用wordpress内置的函数在模板中动态显示内容
- 最后登陆后台在外观中启用我们创建的主题就可以了
当然,还有个简便的方法就是把wordpress默认的主题复制一份,然后在其基础上二次开发就OK了。
二、主题的剖析
WordPress主题目录位于 wp-content/themes/。主题目录拥有所有样式文件、模板文件、可选的函数文件 (functions.php)、JavaScript 文件、图片等。比如说一个叫做 “test” 的主题就会放在 wp-content/themes/test/目录里。
WordPress 主题一般由三种文件构成:
- 样式表文件 style.css, 控制着页面的外观。
- 函数文件 (functions.php)。
- 模板文件,它控制着从数据库中调出的数据所呈现的外观。
1、主题样式表
style.css为该主题的主题样式,该样式文件须在文件开头以注释的形式列出主题的详细信息。
如:
/*
Theme Name: ykqTheme
Theme URI: yuankeqiang.lofter.com
Author: ykq
Tag : hehe
…….
*/
这样启用主题后wordpress会自动读取该主题的相关信息,我们可以在后台->外观->主题->主题详情 来查看我们我们的主题信息。
缩略图来自哪里:
在主题目录创建一张图片重命名为screenshot.png或者screenshot.jpg,wordpress会自动读取该图片为主题的缩略图。
还有一个样式rtl.css:
作用是如果网站的阅读方向是自右向左的,他会自动被包含进来。你可以使用 the RTLer 插件来生成这个文件。
2、函数文件
一个主题可以使用一个函数文件,位于主题的根目录,叫做 functions.php。
这个文件就像一个插件, 如果它位于你正在使用的主题里的话,他在你的主题初始化的时候就会自动加载(后台页面和前台页面都一样加载)。对于这个文件的建议:
- 启用主题功能,例如:侧边栏,菜单,文章缩略图,文章格式,自定义标题栏。
- 定义用于模板文件中的函数。
- 设置一个选项菜单,让网站拥有者可以自定义颜色,样式,和你的主题的其他特性。
3、模板文件
模板是一些PHP文件,不同的模板代表不同的页面:
常见模板如下:
4、自定义单页模板
我们可以自定义页面模板page.php,创建一个自定义页面需要首先创建一个文件,建议文件的命名为page-{name}.php,
假设我们创建一个公司简介的页面,自定义页面可以叫做page-about.php。在page-about.php的文件顶部必须写上页面名称:
<?php /* Template Name: 公司简介 */ ?>
这样我们创建页面的时候就可以选择我们自定义的模板:
注意:我们可以在主题文件夹的任何地方创建页面模板,若模板文件很多的话我们可以创建一个文件夹如page-templates,然后将模板文件都放到该文件夹下。
5、包含模板
为了加载其他模板(除了 header, sidebar, footer 这些已经被预先定义了加载命令的例如 get_header())到某个模板中,你可以使用 get_template_part()。这利于主题的代码重用。
三、Wordpress 常用函数
1.bloginfo() 显示博客信息。根据参数不同,可以显示博客信息中不同的部分。
bloginfo(‘name’); 输出博客名
bloginfo(‘url’); 输出博客url
bloginfo(‘description’); 输出博客描述
bloginfo(‘rss2_url’); 输出博客RSS2.0 feed地址 如:https://www.a.com/feed
bloginfo(‘template_url’); 输出博客模板地址
bloginfo(‘charset’); 输出编码方式
示例:使用bloginfo()函数常见组合
Copyright © <a href="<?php%20bloginfo('url');?>" title="<?php bloginfo('description');?>"><?php bloginfo('name');?></a>
注意:bloginfo() 是输出这些值,如何只想获取使用 get_bloginfo(),参数一样
2.wp_title() 显示页面标题。如果是文章页面显示文章标题,分类页面显示分类名称。
<?php wp_title(‘_’,true,’right’); ?>
第1个参数:标题和其余部分之间的分割符,默认是>>
第2个参数:是bool值,如果是true则输出标题,如果是false则返回标题。
第3个参数:right表示分割符在标题后面
示例:在header.php添加如下代码
<title>
<?php wp_title('_',true,'right'); ?>
<?php bloginfo('name'); ?>-<?php bloginfo('description'); ?>
</title>
3.wp_get_archives() 文章存档
<?php wp_get_archives('type=monthly&format=html&show_post_count=1&limit=10');?>
第1个参数:type=monthly 按月显示文章存档,可以使用 yearly、daily、weekly 等代替monthly表示按年、日、周显示文章存档
第2个参数:format=html 使用通用的HTML中<li>格式化文章列表
第3个参数:show_post_count=1 是否显示文章数,该参数是bool值
第4个参数:limit=10 显示文章存档的最大数量为10,超过不显示
4.wp_list_categories() 文章分类
<?php wp_list_categories('orderby=name&order=ASC&show_count=1&use_desc_for_title=1&feed=订阅&exclude=2,5&number=10');?>
第1个参数:orderby=name 按分类名称的字母先后顺序显示分类信息,可以将name换成id
第2个参数:order=ASC 按分类名称的字母升序显示分类信息,将ASC改为DESC表示按降序
第3个参数:show_count=1 显示分类文章数
第4个参数:use_desc_for_title=1 每个分类超链接添加title属性为分类描述
第5个参数:feed=订阅 每个分类信息旁边添加一个名为”订阅”的超级链接,提供该分类的RSS订阅
第6个参数:exclude=2,5 显示分类中去除id为2和5的分类,也可以用include=2,5表示显示id为2和5分类
第7个参数:number=10 只显示最前的10个分类
5.get_the_category() 返回当前文章所属的类别的若干属性所组成的一个数组,该数组包含以下内容
<?php $category = get_the_category($id); ?>
$id(可选)文章的ID编号,默认值为$post->ID (当前文章的ID编号)。
返回值
cat_ID 分类ID编号 (也可以保存为 ‘term_id’)
cat_name 类别名称 (也可以保存为 ‘name’)
category_nicename:别名,存储在slug字段
category_description 分类描述 (也保存为’description’)
category_parent 当前分类的父类别的ID编号。’0′ 表示没有父类别。(同样也可以保存为 ‘parent’)
category_count 该分类有多少文章 (也可以保存为 ‘count’)
显示第一个类别的名称
<?php
$category = get_the_category();
echo $category[0]->cat_name;
?>
显示多个分类名称(当一个篇文章有多个分类的时候)
<?php
$cat = get_the_category();
foreach($cat as $key=>$category)
{
echo $category->cat_name.'<br/>';
}
?>
显示分类的所有内容
<?php $categories = get_the_category(); var_dump($categories);?>
通过get_the_category()函数我们就可以在文章的循环外获取分类的内容,这样我们就可以用在很多的功能中,比如可以在每篇文章下面添加一个相关文章列表。
6.the_category() 输出当前文章所属的类别名称,而且文章类别的超链接形式
在函数中使用分隔符等参数来格式化输出。
如 the_category(‘-‘),若当前文章属于两个以上分类,可以显示为:分类1-分类2。
如果只属于有个分类,则显示为分类1
7.category_description() 以当前分类id输入,得到该分类描述
<?php echo category_description(get_the_category()[0]->cat_ID); ?>
8.is_home() 判断当前页面是否是首页,如果是首页,则返回TRUE
该函数用来控制博客侧边栏的显示方式,经常使用如下代码段:
<?php
if(is_home()){
echo "首页显示内容";
}else{
echo "非首页显示内容";
}
?>
9.is_archive() 判断是不是存档页面
is_archive()用以判断当前显示的内容是否是博客存档页面,比如按日期的存档,或者按分类的存档,等等;其和is_home()函数一样,返回一个Bool值。
10.is_page() 是否是博客的独立页面
is_page()函数判断当前显示的内容是否是博客的独立页面(page),如“本站WordPress”、“关于本站”等页面;它也返回一个Bool值。
我们可以在模板中通过该函数判断当前是否是一个独立页面,从而决定是否为当前显示的文章显示发布时间等等。
11.is_paged()
该函数用以判断当前文章是否因为内容过多而分页显示;需要注意的是,如果你在写文章时手动添加了标签,来强制分页的话,该函数并不会因此而返回TRUE。
12.is_page_template()
is_page_template()函数需要跟一个参数,通常以如下方式使用:
is_page_template(’guestbook.php’);
藉此判断当前显示的独立页面(page)是否使用了参数所示的模板guestbook.php;如果不跟参数,函数返回当前独立页面是否使用了模板。
13.is_single()
is_single()用以判断当前显示的页面内容是否是一篇单独的文章。其后面可以跟三种参数,一种是文章ID;一种是文章题目(title);一种是文章名称(slug,文章题目的一种简短说明形式);或者可以将三种参数组合使用,藉此来判断当前页面内容是否是具体的某篇文章。
一个简单的例子如下,我们可以通过如下几种方式判断当前显示的内容是否是本文:
is_single(‘808’);
is_single(‘用好WordPress不可不知的函数(二)’);
is_single(‘functions-must-known- using-wordpress-second’);
is_single(‘808′,’用好WordPress不可不知的函数(二)’,’functions-must-known-using-wordpress-second’);
在这里,本站需要对上述最后一种方式做些说明:该函数后跟三个参数时,有优先级,如果第一个参数符合条件,则返回TRUE;否则,则返回FALSE;貌似后面的参数并没有什么意义。
14.is_category()
该函数用以判断当前显示的页面内容是否是一个分类页面,如网站相关;其中无需参数。函数返回一个Bool值。
15.is_tag()
is_tag()用以判断当前显示的页面是否是一个标签页面,比如WordPress;其后也不需要跟参数。该函数同样返回一个Bool值。
16.is_date()
此函数用以判断当前显示的内容是否为按时间归档的页面,比如2009年四月,或者2009年4月8日,等等。
17.is_day()、is_month()、is_year()
这些函数用以判断当前显示的内容是否为按天、按月、按年份归档的页面。它们和is_date()类似,只不过将归档时间更具体化而已。
18.is_author()
该函数用以判断当前显示的内容是否为以作者名归档的页面,比如本站的admin作者页面。
19.is_admin()
is_admin()函数用以判断当前是否在控制面板页面,或者管理员面板页面。
20.get_bloginfo()
和bloginfo()函数实现近乎相同的功能。主要用来显示博客的信息;而且根据后跟参数的不同,会输出博客的不同信息。
其后不跟参数时,get_bloginfo()可以显示博客名称,形如“本站”;
后跟其他参数时,可以显示对应的信息,比如get_bloginfo ( ‘description’ )用以显示博客描述信息;
其他还可以使用的参数包括name、url、wpurl以及admin_email等等。但因为其与bloginfo()函数实现相同的结果,所以,在bloginfo能够实现的情况下,本站不推荐使用get_bloginfo()函数。
21.query_posts() 控制哪些文章会在页面上显示
如query_posts(“cat=3,6&cat=-5,-10”)表示取分类ID为3和6的文章显示,不取分类ID为5和10的文章显示;
如query_posts(“order=ASC&showposts=10&offset=1&orderby=date&posts_per_page=5”)意义如下:
(1)order=ASC表示按照升序排列,取为DESC则表示按降序;
(2)showposts=10则表示获取10篇文章;
(3)offset=1表示取最新的文章;
(4)orderby=date表示将文章按照日期排序;
(5)posts_per_page=5表示每页显示5篇文章。
需要注意的是该函数只是将文章内容从MySQL数据库中查询出来,要将其显示,还需要与其他语句配合,比如一个经常在侧边栏中使用的形式如下:
如上的这段代码用以在侧边栏的指定位置上显示最新的5篇文章。
<li>
<h2>显示最新5篇文章</h2>
<?php query_posts('showposts=5&offset=1'); ?>
<ul>
<?php while(have_posts()):the_post();?>
<li><a href="<?php%20the_permalink();?>" title="<?php the_title();?>">
<?php the_title(); ?>
</li>
<?php endwhile;?>
</ul>
</li>
22.get_posts() 控制哪些文章会在页面上显示。和query_posts()相同参数,只是使用有固定形式
<?php
$lastposts=get_posts('numberposts=5');
foreach($lastposts as $post) : setup_postdata($post);
?>
<h2><a href="<?php%20the_permalink();%20?>" id="post-<?php the_ID();?>"><?php the_title(); ?></h2>
<?php the_content();?>
<?php endforeach;?>
23.wp_list_cats() 已废弃,被wp_list_categories()替代
24.get_calendar()
get_calendar()函数用以在WordPress上显示日历,日历样式和使用widget显示的效果相同,如下图所示:
其后可以跟一个BOOL参数,用以控制日历上方星期的显示样式。但经本站测试,在中文状态下,使用TRUE或FALSE参数,日历的显示效果并没有什么区别。
25.wp_list_bookmarks() 友情链接
<?php wp_list_bookmarks('orderby=link_id&title_before=<div>&title_after=</div>'); ?>
26.get_links()、wp_get_links() 已废弃
和wp_list_bookmarks()相同的功能
27.wp_list_pages()将页面名称以超链接的显示
注意:只能显示页面,不能显示分类和其他元素.
wordpress还没有出现自定义菜单功能时,用作改函数做网站导航使用或修饰侧边栏。
<?php wp_list_pages('title_li=&sort_column=menu_order&include=470,475&depth=1&'); ?>
28.wp_tag_cloud()显示WordPress博客的标签
<?php wp_tag_cloud('smallest=8&largest=22&number=30&orderby=count'); ?>
各参数的意义如下:
(1) smallest=8用来设置标签云中显示出来的所有标签中,计数最少(最少文章使用)的标签的字体大小为8;
(2) largest=22用来设置标签云的所有标签中,计数最多(最多文章使用)的标签的字体大小为22;
(3) number=30设置标签云中显示的最多标签数量为30;
(4) orderby=count设置标签云中标签的排序方式为计数(默认),而不是名称(相应参数为name,widget调用时的默认值)。
其他常用的参数还包括include和exclude,用来设置在标签云中是否包含或去除ID为某数字的标签。
29.wp_register()
wp_register()函数用以向管理员显示“站点管理”超链接;或者当WP博客开放了注册时,向未登陆的用户显示“注册”超链接。
<?php wp_register(); ?>
该函数不需要什么参数,唯一可能用到的参数形式如wp_register(‘前’,’后’),可以在如上显示的超链接文字的前后分别显示一个“前”字和一个“后”字。当然,你可以据此发挥想象力来个性化自己网站的管理或注册链接。
技巧:WP博客开放了注册
30.wp_loginout()
显示一个“登录”链接,如果已登录过,则显示“退出”链接
31.wp_logout_url()、wp_login_url()
从WordPress 2.7版本开始,提供了这里的两个函数。它们分别用来获取WP博客退出或登录超链接,然后,我们使用获得的超链接即可编写如下代码,来对WP博客的登录和退出链接进行灵活设置:
<a href="<?php%20echo%20wp_logout_url();%20?>">点击这里退出</a>
<a href="<?php%20echo%20wp_login_url();%20?>">点击这里登录</a>
当然,要想实现完美的效果,还需要对访客的登录状态进行判断,使用一个if语句,根据登录状态显示相应的菜单项。
32.wp_meta()、wp_head()、wp_footer()
wp_meta()在wp_register(),wp_loginout()函数后面,方便插件的调用(WP主题为WP插件留下的API Hook)
wp_head()在</head>标签前,方便插件调用
wp_footer()在</body>标签前,方便插件调用
33.get_recent_posts() 获取最新日志
需要安装“中文WordPress工具箱”
WordPress中文工具箱_WordPress主题开发工具-PHP文档类资源-CSDN下载中文WordPress工具箱,很多地方也都介绍了,它是为了解决官方WordPress没有照顾WordPress主题开发工具更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/star20100906/2763349?utm_source=bbsseo
34.get_recent_comments() 最新评论
需要安装“中文WordPress工具箱”
35.get_recentcomments()
该函数是在安装了WP-RecentComments插件之后才具有的功能,与如上34中的函数类似。
该函数原型如下:
get_recentcomments(int num, int size)
num 最新评论数量 size 评论内容长度
36.wp_get_post_tags()
该函数用来在某个文章页面或者根据某篇文章的ID来获取该文章的(无超级链接)Tag,获取的结果被放置到一个tag数组中。一个常见的使用方式如下:
<?php
if (is_single())
{
$keywords = "";
$tags = wp_get_post_tags($post->ID);
foreach ($tags as $tag )
{$keywords = $keywords . $tag->name . ",";}
echo $keywords;
}
?>
首先判断是否是单文章页面,如果是,则据当前文章的ID($post->ID)来获取当前文章的tag,然后取得其name($tag->name),并将其组合输出。
37.single_cat_title()、single_tag_title()
这两个函数用来获取分类页面和tag页面的title,其通常的使用方式如:
然而,除此之外,single_cat_title()还可以用来在tag页面上获取当前页面的title;但single_tag_title()却不可用于获取分类页面的title。
38.get_settings()、get_option()
此二函数与get_bloginfo()类似,使用方法也相同,可以通过后跟各种参数来获取WordPress博客的相关信息。
比如如下的调用方式:
get_settings(‘name’)或get_option(‘name’)
可以用来获取当前WordPress博客的标题。
40.get_header()、get_footer()、get_sidebar()和comments_template()
用来在WordPress主题中获取并包含相应的文件的。比如:
(1) get_header()用来包含当前主题文件夹下的header.php;
(2) get_footer()用来包含主题文件夹下的footer.php;
(3) get_sidebar()用来包含主题文件夹下的sidebar.php;
因为一个主题中可以使用多个sidebar。形如get_sidebar(‘up’)的调用方法可将sidebar-up.php侧边栏模板文件包含到主题中。
(4) comments_template()用来包含comments.php。
需要注意的一点是,如果当前主题文件夹下缺少对应的文件,则函数会使用wp-content/themes/default/文件夹下的对应文件代替。
除了以上几个函数之外,在主题中如果想包含一个具体的文件,还可以使用如下方式:
include(TEMPLATEPATH . ‘/***.php’)
可以将当前主题文件夹下名为***.php的文件包含进来;其中TEMPLATEPATH是当前主题文件夹地址的一个引用(不含末尾的/,所以需要添加上)。
41.have_posts()、the_post()
在wordpress循环中使用,用以获取所有文章。
通常会在模板 index.php、archive.php 存档模板、single.php 文章详细页模板 等页面使用。
使用如下:
<?php if(have_posts()):?>
<?php while(have_posts()):the_post(); ?>
标题:<?php the_title();?>
内容:<?php the_content();?>
<?php endwhile; ?>
<?php else: ?>
未找到文章
<?php endif; ?>
也可以将前两行组合起来(其他地方不变)
<?php if(have_posts()):while(have_posts()):the_post();?>
42. the_title() 和the_title_attribute() 输出文章标题
<?php
//输出文章标题
//参数1:标题前内容
//参数2:标题后内容
//参数3:是否显示
the_title('当前文章','的评论是',true);
the_title_attribute('before=当前文章&after=的评论是&echo=true');
?>
43、single_post_title()输出文章标题、 single_tag_title()输出tag标题、single_cat_title()输出分类标题
<?php
//输出文章标题
//参数1:标题前内容
//参数2:是否显示
single_post_title('当前文章:',true);
//也可以不显示标题,将标题传给一个变量
$tt=single_post_title('当前文章:',false);
echo($tt);
?>
44、the_ID() 获取并显示文章ID号,该函数只能在Wordpress的大循环内使用
<?php
$id=the_ID();
echo($id);
?>
45、get_the_ID() 获取文章ID号
46、the_time() 获取并显示时间、get_the_time 获取时间,该函数只能在Wordpress的大循环内使用
<?php the_time('Y-m-j H:i:s'); ?>
赞赏
微信赞赏支付宝赞赏