爲何要開發WordPress主題?php
WordPress主題由一系列文件和樣式表單組成,這些文件和樣式表單共同做用生成WordPress網站的外觀。每一個主題都不一樣,用戶能夠經過這些主題爲所欲爲地更換本身網站的外觀。那麼爲何咱們要本身開發WordPress主題呢?css
WordPress主題也有不少好處:html
咱們本身開發WordPress主題緣由還在於:瀏覽器
建立 WordPress 主題其實不難,只要你從如今開始認真學習這個教程,從零一步一步開始,你就會成爲一個 WordPress 主題製做高手,至少你會修改現有主題。服務器
下面是一個從零開始製做 WordPress 主題的教程,它會一步一步教你如何製做 WordPress 主題。 看到一個網上的WordPress蠻好的教程,挺適合初學者。分享一下:網絡
小結:app
1. WordPress 主題教程:從零開始製做 WordPress 主題less
1)網絡上已經有不少關於製做 WordPress 主題的教程,而且 WordPress 官方網站上也有指導文章。可是當你不懂這方面的術語的話,這些教程可能不必定會幫助你,甚至還會誤導你,因此這個教程會真正從零開始教你如何建立 WordPress 主題。ide
2)本地安裝 WordPress。模塊化
3)服務器上安裝一個測試版的 WordPress。
4)代碼編輯工具。 NotePad++ ,DW。
5)FTP 工具。
6)至少配備三種瀏覽器,Microsoft Internet Explorer、Mozilla Firefox、Google Chrome,版本暫時不限,用於測試網頁是否顯示正常。
2.WordPress 主題裏面的模版文件介紹
主題的位置:D:\xampp\htdocs\wordpress\wp-content\themes
建立一個新的文件夾,命名 daliu。
頁面 |
主題文件中是否必須存在 |
做用 |
備註 |
archive.php |
非必須 |
通用文件:標籤頁、分類頁、自定義分類頁、存檔頁 |
控制存檔、分類、日期的輸出頁面。其實這些內容是能夠單獨控制的,不過大部分模版都不把它們分開對待。 |
author.php |
非必須 |
做者存檔頁 |
|
author-bio.php |
|
|
|
attachment.php |
非必須 |
附件頁 |
|
category.php |
非必須 |
分類頁 |
|
comments.php |
|
|
|
content.php |
|
|
|
content-link.php |
|
|
|
content-none.php |
|
|
|
content-page.php |
|
|
|
content-search.php |
|
|
|
date.php |
非必須 |
時間存檔頁 |
|
footer.php |
基本文件 |
通常是用來輸出頁腳信息的,好比放些模版做者,版權信息之類。 |
|
functions.php |
非必須 |
主題函數文件,自定義頭部,進入後臺主題設置能夠看到,可擴展性至關強。 |
|
header.php |
基本文件 |
用來輸出標題和菜單項,同時html文件的頭信息也放在這 |
|
home.php |
基本文件 |
首頁 |
|
image.php |
|
|
|
index.php |
必須 |
通用文件:首頁、文章頁、分類頁、存檔頁、頁面、404頁面、搜索結果頁、附件頁 |
index.php模板文件靈活易用,能夠存儲關於頁眉、側邊欄、頁腳、內容、類別、查找、錯誤以及訪問者請求的頁面的全部引用信息。index.php還能夠劃分紅模塊化的模板文件,每一個模塊分擔部分系統任務。用戶不指定模板文件時,WordPress會使用內置的默認文件。 |
page.php |
基本文件 |
|
|
readme.txt |
基本文件 |
|
|
screenshot.png |
基本文件 |
從WP2.0開始,模版選擇會提供縮略圖,這個文件就是縮略圖文件。 |
給你的主題界面截個圖,命名爲screenshot.png,大小300 * 225,放置到主題目錄下做爲主題縮略圖 |
search.php |
基本文件 |
|
|
sidebar.php |
基本文件 |
用於輸出側欄內容。 |
|
single.php |
基本文件 |
通用文件:附件頁、文章頁 |
|
search.php |
基本文件 |
搜索結果頁 |
|
style.css |
必須 |
主題樣式以及說明文件 |
全部全部頁面的具體表現樣式都由這個文件來控制。 |
tag.php |
非必須 |
標籤頁 |
|
taxonomy.php |
非必須 |
自定義分類頁 |
|
404.php |
基本文件 |
404出錯信息,當訪問者輸入了一個不存在的地址就會看到這個頁面,能夠在這裏寫一些有用的提示,或者直接給個404 error。 |
|
必須就是主題必須包含此文件不然沒法正常運行,非必須則是無關緊要的文件,按需本身求來考慮是否須要建立該文件。通用文件則是能夠適用於多種不一樣類型的文件,我在文件名後面都包含了適用的頁面類型。
3. 開始製做一個簡單的主題,須要的文件是 index.php ,style.css 和圖screenshot.png
style.css 文件的內容:
/*
Theme Name: 這裏填主題名稱
Theme URI: 這裏填主題介紹的網址,沒有就填你的博客網址吧
Description: 這裏填主題的簡短介紹
Version: 版本號
Author: 做者名
Author URI: 做者的網址
Tags: 標籤,多個用半角逗號隔開
*/
1 /* 2 Theme Name: daliu_it 3 Theme URI: http://www.cnblogs.com/liuhongfeng/ 4 Description: ITbolg 5 Version: 1.0 6 Author: daliu_it 7 Author URI: http://www.cnblogs.com/liuhongfeng/ 8 9 */
index.php的基本結構:
index.php 是由 4 個模板文件組成: header.php,index.php,sidebar.php 和 footer.php。
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)的標題
<!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"> <title> <?php bloginfo('name'); ?> <?php wp_title(); ?> </title> <meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php bloginfo('charset'); ?>" /> <meta name="generator" content="WordPress <?php bloginfo('version'); ?>" /> <!-- leave this for stats please --> <link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); ?>" type="text/css" media="screen" /> <link rel="alternate" type="application/rss+xml" title="RSS 2.0" href="<?php bloginfo('rss2_url'); ?>" /> <link rel="alternate" type="text/xml" title="RSS .92" href="<?php bloginfo('rss_url'); ?>" /> <link rel="alternate" type="application/atom+xml" title="Atom 0.3" href="<?php bloginfo('atom_url'); ?>" /> <link rel="pingback" href="<?php bloginfo('pingback_url'); ?>" /> <?php wp_get_archives('type=monthly&format=link'); ?> <?php //comments_popup_script(); // off by default ?> <?php wp_head(); ?> </head> <body> </body> </html>
說明:
<?php – 開始 PHP 代碼
bloginfo(’stylesheet_url’) – 調用 style.css 文件所在的路徑的函數
; – 中止調用函數。分號是用來結束一個 PHP 語句。
?> – 結束 PHP 代碼
在index.php文件中的body標籤進行演示如何調用這些標籤來顯示內容:
<body> 1.調用博客連接: <a href="#"><?php bloginfo('name'); ?></a> </br> 2.博客名加上連接 : <a href="<?php bloginfo('url'); ?>"><?php bloginfo('name'); ?></a> </br> 3.給博客的標題添加 H1 的標籤: <h1 ></a><a href="<?php bloginfo('url'); ?>"><?php bloginfo('name'); ?></a></h1> </br> 4.添加博客描述 <h1 ></a><a href="<?php bloginfo('url'); ?>"><?php bloginfo('name'); ?></a></h1> <?php bloginfo('description'); ?> <br/> 5.添加 DIV 標籤 <div> <h1 > <a href="<?php bloginfo('url'); ?>"><?php bloginfo('name'); ?></a> </h1> <?php bloginfo(’description’); ?> </div> <br/> 6.添加 Header DIV 標籤 <div id=」header」> <h1 > <a href="<?php bloginfo('url'); ?>"><?php bloginfo('name'); ?></a> </h1> <?php bloginfo(’description’); ?> </div> <br/> </body>
4. 如何調用函數來顯示日誌和文章等信息。主循環+php函數。
主循環結構:
if(have_posts()) – 檢查博客是否有日誌。
while(have_posts()) – 若是有日誌,那麼當博客有日誌的時候,執行下面 the_post() 這個函數。
the_post() – 調用具體的日誌來顯示。
endwhile; – 這裏用於關閉 while()
endif; – 關閉 if()
第一,if(have_posts()) 檢查博客是否有日誌,
第二,while(have_posts()) 執行 the_post() 去調用日誌。而 Else 是當博客徹底沒有日誌的時候執行的。
主循環結構代碼:
1 <?php if(have_posts()) : ?> 2 3 <?php while(have_posts()) : the_post(); ?> 4 5 <?php endwhile; ?> 6 7 <?php endif; ?>
日誌相關函數:
<?php the_title(); ?> 用來調用日誌標題
<?php the_permalink(); ?> 用來調用每篇日誌地址
<?php the_content(); ?> 調用了 日誌的內容
<?php the_ID(); ?> 調用日誌的ID號
<?php the_title(); ?> 來輸出文章標題
<?php echo mb_strimwidth(get_the_title(), 0, 38, '...'); ?> 輸出了字符串的第0位到第38位,根據主題的不一樣能夠自行設置該數值,另外多餘長度部分使用「…」 代替。
日誌的元數據(Postmetadata):日期(date),分類(categories),做者(author),評論數(number of comments),以及其餘和日誌有關係的信息。
<?php _e('Filed under:'); ?> 是調用冒號「:」的代碼;
<?php the_category(', ') ?> 用來調用日誌的在的全部類別;
<?php _e('by'); ?> 。若是你建立的是私人用的的主題, by 外面的 _e() 不是必須的,最後加上 _e() 以便你的主題可翻譯化。
<?php the_author(); ?> 輸出當前日誌做者的名字。
<?php comments_popup_link('No Comments »', '1 Comment »', '% Comments »'); ?>
日誌的元數據函數參數解釋:
調用一個彈出的留言窗口,若是沒有激活, 則只是簡單的顯示留言列表。
No Comments » 是在沒有留言的時候顯示的。
1 Comment » 是用於當恰好只有1條留言時候。
% Comments &187; 是用於當有多於一條留言的時候。
好比:8 Comments »。百分號 % 用來顯示數字。» 是用來顯示一個雙層箭頭 »。
<?php edit_post_link('Edit', ' | ', ''); ?> 當咱們以管理員或者做者身份登陸的的時候纔可見。
簡單顯示一下基本的日誌元數據:
<p class="postmetadata">
<?php _e('Filed under:'); ?>
<?php the_category(', ') ?>
<?php _e('by'); ?>
<?php the_author(); ?><br />
<?php comments_popup_link('No Comments »', '1 Comment »', '% Comments »'); ?>
<?php edit_post_link('Edit', ' | ', ''); ?>
</p>
<?php posts_nav_link(); ?> 調用後一頁和前一頁的連接。
<?php posts_nav_link('in between','befor','after'); ?> 也能夠給這個函數3個參數,分別給連接的中間,前面和後面的設置字符第1個參數是顯示在後一頁和前一頁連接的中間。第2個參數顯示在前面。第3個參數顯示在後面。
說明:
默認狀況下,若是沒有超過10篇日誌的話,是不會顯示導航連接,若是沒有超過10篇日誌,依然想看到導航連接,登陸到管理界面,在 設置 > 閱讀 頁面,把它設置爲比全部日誌少一篇。如,有6篇日誌,就設置爲5。
完整的顯示一篇日誌相關信息:
1 <div id=」container」> 2 3 <?php if(have_posts()) : ?><?php while(have_posts()) : the_post(); ?> 4 5 <div class=」post」 id=」post-<?php the_ID(); ?>」> 6 <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> 7 </div> 8 <div class=entry> 9 <?php the_content(); ?> 10 11 <p class="postmetadata"> 12 <?php _e('Filed under:'); ?> 13 <?php the_category(', ') ?> 14 <?php _e('by'); ?> 15 <?php the_author(); ?><br /> 16 <?php comments_popup_link('No Comments »', '1 Comment »', '% Comments »'); ?> 17 <?php edit_post_link('Edit', ' | ', ''); ?> 18 </p> 19 20 </div> 21 22 <?php endwhile; ?> 23 24 <?php endif; ?> 25 <div class="post" id=」post-<?php the_ID(); ?>」 > 26 <?php _e('NOT Found'); ?> 27 </div> 28 <div class="navigation"> 29 <?php posts_nav_link('in between','before','after'); ?> 30 </div> 31 32 </div>
5. 側邊欄,如何顯示分類連接。
<?php wp_list_cats(); ?> – 調用分類連接列表
<?php wp_list_pages(); ?> 窗體化(widgetize)側邊欄。
<?php _e('Archives'); ?> – 子標題文本
<?php wp_get_archives('type=monthly'); ?> – 按月調用存檔列表連接,並把每一個連接放入 <li> 和 </li> 標籤中。
<?php get_links_list(); ?> 添加友情連接列表
說明:
默認的分類是 Uncategorized。若是你沒有把日誌發佈到多個分類下面,那麼你的列表連接列表應該是隻有一個連接 Uncategorized。
sort_column=name – 把分類按字符順序排列
optioncount=1 – 顯示每一個分類含有的日誌數
hierarchial=0 – 不按照層式結構顯示子分類,這就解釋了爲何子分類連接是列在列表中第一級。
& – 每次增長另外一個參數的時候,需在它以前要輸入 & 用來把和現有的參數區分開。如 & – 在 sort_column 和 optioncount之間。
<?php wp_list_pages('depth=3&title_li=<h2>Pages</h2>'); ?>
有四級頁面連接。因爲佈局或者設計的緣由使得不能在側邊欄處理那麼多級別的連接。爲了限制顯示列表的層數,增長了 depth 這個參數,並把它設置爲 3:(若是你只有一個 about 頁面連接,你將不會注意有什麼不一樣。)
簡單的調用一下分類目錄:
<div class="sidebar">
<ul>
<?php wp_list_pages('depth=3&title_li=<h2>Pages</h2>'); ?>
<li>
<h2><?php _e('Categories'); ?></h2>
<ul>
<?php wp_list_cats('sort_column=name&optioncount=1&hierarchical=0'); ?>
</ul>
</li>
</ul>
</div>
完整的調用分類目錄,存檔,分級頁面等信息:
<div class="sidebar">
<ul>
<?php wp_list_pages('depth=3&title_li=<h2>Pages</h2>'); ?>
<li>
<h2><?php _e('Categories'); ?></h2>
<ul>
<?php wp_list_cats('sort_column=name&optioncount=1&hierarchical=0'); ?>
</ul>
</li>
<li>
<h2><?php _e('Archives'); ?> </h2>
<ul>
<?php wp_get_archives('type=monthly'); ?>
</ul>
</li>
<?php get_links_list(); ?>
</ul>
</div>
5. 搜索框
<?php include(TEMPLATEPATH . '/searchform.php'); ?>
include() – 導入任何你想導入的文件。這和使用 WordPress 模板函數去調用模板文件是不一樣的,由於 include() 只是簡單導入已經存在的文件。這裏是調用在 searhform.php 文件中的代碼。被導入的信息應該在一個博客上基本不會被改變的。
TEMPLATEPATH – 主題文件夾的位置,這裏是:wp-content/themes/daliu_it
‘/searchform.php’ – 文件名:/searchform.php
在 TEMPLATEPATH 和 「/searchform.php」 中間的點把它們鏈接起來,因此最終獲得:wp-content/themes/daliu_it/searchform.php
<div class="sidebar"> <ul> <li id="search"> <?php include(TEMPLATEPATH . '/searchform.php'); ?> </li> <?php wp_list_pages('depth=3&title_li=<h2>Pages</h2>'); ?> <li> <h2><?php _e('Categories'); ?></h2> <ul> <?php wp_list_cats('sort_column=name&optioncount=1&hierarchical=0'); ?> </ul> </li> <li> <h2><?php _e('Archives'); ?> </h2> <ul> <?php wp_get_archives('type=monthly'); ?> </ul> </li> <?php get_links_list(); ?> </ul> </div>
6. 日曆框
<?php _e('Calendar'); ?> 日曆
<?php get_calendar(); ?> 調用日曆函數,輸出一個日曆
<li id=」calendar」> <?php _e('Calendar'); ?> <?php get_calendar(); ?> </li>
7. 元數據:註冊,登入,登出。
<?php wp_register(); ?> 這個函數能產生一組 <li> 和 </li> 標籤,若是你沒有登錄,它顯示註冊(Register)連接,若是登陸了,它顯示的是 站點管理(Site Admin)的連接。
<?php wp_loginout(); ?> 不會產生列表元素標籤,因此須要咱們手工輸入列表元素標籤,當你沒有登陸的時候,獲得的是 登陸(Login) 的連接,當已經登陸的時候,獲得的是登出(Logout)連接。
<?php wp_meta(); ?>
<li> <h2><?php _e('Meta'); ?></h2> <ul> <?php wp_register(); ?> <li> <?php wp_loginout(); ?> </li> <?php wp_meta(); ?> </ul> </li>
上面的功能基本告一段落了。
上一下完整的代碼:
style.css的完整代碼以下:
/* Theme Name: daliu_it Theme URI: http://www.cnblogs.com/liuhongfeng/ Description: ITbolg Version: 1.0 Author: daliu_it Author URI: http://www.cnblogs.com/liuhongfeng/ */
index.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"> <title> <?php bloginfo('name'); ?> <?php wp_title(); ?> </title> <meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php bloginfo('charset'); ?>" /> <meta name="generator" content="WordPress <?php bloginfo('version'); ?>" /> <!-- leave this for stats please --> <link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); ?>" type="text/css" media="screen" /> <link rel="alternate" type="application/rss+xml" title="RSS 2.0" href="<?php bloginfo('rss2_url'); ?>" /> <link rel="alternate" type="text/xml" title="RSS .92" href="<?php bloginfo('rss_url'); ?>" /> <link rel="alternate" type="application/atom+xml" title="Atom 0.3" href="<?php bloginfo('atom_url'); ?>" /> <link rel="pingback" href="<?php bloginfo('pingback_url'); ?>" /> <?php wp_get_archives('type=monthly&format=link'); ?> <?php //comments_popup_script(); // off by default ?> <?php wp_head(); ?> </head> <body> 1.調用博客連接: <a href="#"><?php bloginfo('name'); ?></a> </br> 2.博客名加上連接 : <a href="<?php bloginfo('url'); ?>"><?php bloginfo('name'); ?></a> </br> 3.給博客的標題添加 H1 的標籤: <h1 ></a><a href="<?php bloginfo('url'); ?>"><?php bloginfo('name'); ?></a></h1> </br> 4.添加博客描述 <h1 ></a><a href="<?php bloginfo('url'); ?>"><?php bloginfo('name'); ?></a></h1> <?php bloginfo('description'); ?> <br/> 5.添加 DIV 標籤 <div> <h1 > <a href="<?php bloginfo('url'); ?>"><?php bloginfo('name'); ?></a> </h1> <?php bloginfo(’description’); ?> </div> <br/> 6.添加 Header DIV 標籤 <div id=」header」> <h1 > <a href="<?php bloginfo('url'); ?>"><?php bloginfo('name'); ?></a> </h1> <?php bloginfo(’description’); ?> </div> <br/> 7.主循環代碼: <div id=」container」> <?php if(have_posts()) : ?><?php while(have_posts()) : the_post(); ?> <div class=」post」 id=」post-<?php the_ID(); ?>」> <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> </div> <div class=entry> <?php the_content(); ?> <p class="postmetadata"> <?php _e('Filed under:'); ?> <?php the_category(', ') ?> <?php _e('by'); ?> <?php the_author(); ?><br /> <?php comments_popup_link('No Comments »', '1 Comment »', '% Comments »'); ?> <?php edit_post_link('Edit', ' | ', ''); ?> </p> </div> <?php endwhile; ?> <?php endif; ?> <div class="post" id=」post-<?php the_ID(); ?>」 > <?php _e('NOT Found'); ?> </div> <div class="navigation"> <?php posts_nav_link('in between','before','after'); ?> </div> </div> 8. 側邊欄 <div class="sidebar"> <ul> <li id="search"> <?php include(TEMPLATEPATH . '/searchform.php'); ?> </li> <li id=」calendar」> <?php _e('Calendar'); ?> <?php get_calendar(); ?> </li> <li> <h2><?php _e('Meta'); ?></h2> <ul> <?php wp_register(); ?> <li> <?php wp_loginout(); ?> </li> <?php wp_meta(); ?> </ul> </li> <?php wp_list_pages('depth=3&title_li=<h2>Pages</h2>'); ?> <li> <h2><?php _e('Categories'); ?></h2> <ul> <?php wp_list_cats('sort_column=name&optioncount=1&hierarchical=0'); ?> </ul> </li> <li> <h2><?php _e('Archives'); ?> </h2> <ul> <?php wp_get_archives('type=monthly'); ?> </ul> </li> <?php get_links_list(); ?> </ul> </div> </body> </html>
searchform.php的完整代碼以下:
<form method="get" id="searchform" action="<?php bloginfo('home'); ?>/">
<div>
<input type="text" value="<?php echo wp_specialchars($s, 1); ?>" name="s" id="s" size="15" /><br />
<input type="submit" id="searchsubmit" value="Search" />
</div>
</form>
8. functions.php 的應用
<?php if ( function_exists('dynamic_sidebar') && dynamic_sidebar() ) : else : ?>
<?php endif; ?>
9. 底部信息,版權之類。
<div id=」footer」> <p> Copyright © 2014 <?php bloginfo(’name’); ?> </p> </div>