30款精美简洁免费WordPress 主题

2012年年30款最佳精美简洁免费免费WordPress主题。

1.Axis

演示 | 下载

2. Big Square

演示 | 下载

free-wordpress-themes-01

3. The Morning After

演示 | 下载

free-wordpress-themes-02

4. Skeptical

演示 | 下载

free-wordpress-themes-03

5. JournalCrunch

演示 | 下载

free-wordpress-themes-04

6. Diary/Notebook

演示 | 下载

free-wordpress-themes-05

7. LightenMag

演示 | 下载

free-wordpress-themes-06

8. Delicate

演示 | 下载

free-wordpress-themes-07

9. Shaken Grid

演示 | 下载

free-wordpress-themes-08

10. Basico Dark

演示 | 下载

free-wordpress-themes-09

11. WordPress Anniversary Theme

演示 | 下载

free-wordpress-themes-10

12. Heliumified Reloaded

演示 | 下载

free-wordpress-themes-11

13. Magasin Uno Reloaded

演示 | 下载

free-wordpress-themes-12

14. Free Magazine Style WP Theme – Agency

演示 | 下载

free-wordpress-themes-13

15. Lucky Guess

演示 | 下载

free-wordpress-themes-14

16. ecoNews

演示 | 下载

free-wordpress-themes-15

17. Simplista WordPress Theme

演示 | 下载

free-wordpress-themes-16

18. Revolt Theme

演示 | 下载

free-wordpress-themes-17

19. Forsy

演示 | 下载

free-wordpress-themes-18

20. Reporter

演示 | 下载

free-wordpress-themes-19

21. WMag – premium magazine theme

演示 | 下载

wmag-premium-theme

22. Corporattica

演示 | 下载

free-wordpress-themes-21

23. Pengbo’s Inspiration

演示 | 下载

free-wordpress-themes-22

24. Owesome WordPress Theme

演示 | 下载

free-wordpress-themes-23

25. Pretty Face Theme

演示 | 下载

free-wordpress-themes-24

26. Framed Redux

演示 | 下载

free-wordpress-themes-20

27. Suburbia

演示 | 下载

free-wordpress-themes-26

28. Obscure

演示 | 下载

free-wordpress-themes-27

29. Casual

演示 | 下载

free-wordpress-themes-28

30. Bright Sky

演示 | 下载

free-wordpress-themes-29

31. Define

演示 | 下载

free-wordpress-themes-30

 

原文:http://www.cnblogs.com/lhb25/archive/2012/06/13/30-best-free-wordpress-themes-2011.html

 

php程序设计标准

介绍

标准化的重要性

如果在某些层面的标准造成了每个人的困扰,标准化可以让他们有个共同的游戏规则。
这份文件历经了许多专桉、公司的验证,正确的说法应该是经过了数週的争执。
这份文件避免了特殊的个人风格而且可以随时视情况调整。
正确的观点

当一个专桉尝试着遵守公用的标准时,会有以下好处:
程式设计人员可以瞭解任何程式码,弄清楚程式的状况
新人可以很快的进入状况
防止新接触php的人基于节省时间创造出一套自己的风格终其一生
防止新接触php的人一次次的犯同样的错误
在一致的环境下,人们可以减少犯错的机会
程式设计人员有了共同的敌人 🙂
错误的观点

现在轮到错误的观点了:
标准通常很愚蠢,因为它是不懂PHP的人所制定的
标准通常很愚蠢,因为它跟我做的不一样
标准降低了创造力
标准在长期互相合作的人群中是没有必要的
标准强调了太多结构
总之人们忽视标准
讨论

从许多专桉的经验中得知,採用程式设计标准可以让专桉进行的顺利些。
不过标准是成功的必要条件吗?当然不是!
但他们是有帮助的,我们需要任何可以取得的帮助!
老实说,大部分对于特定标准的争执多来自于自负不已的人。
在合理的标准中很少有所谓的技术缺陷,只是习惯的问题罢了。
所以脑子活一点,控制那样的自负思想,并且记得任何专桉都是基于一个团队的努力。

解释

惯例

在本文档中使用“要”字所指的是使用本规范的所有专桉需要遵守规定的标准。
使用“应该”一词的作用是引导个别专桉标准的组成,请依照词义适当的包含、排除或组合需求。

“也许”一词相近于“应该”,通常指的是次要的需求。

标准的执行

首先应该在开发小组的内部找出所有的最重要的元素,也许标准对您的状况还不够恰当。它可能已经概括了重要的问题,也可能还有人对其中的某些问题表示强烈的反对。 🙂
无论如何,只要最后顺利的话,人们将成熟的明白这个标准是合理的,然后其他的程式设计人员也会发现它的合理性,并觉得带着一些疑问去遵循这个标准是值得的。

如果没有配合的意愿,可以把这个标准改为要求,所有的程式码都必须基于这个编准做检验。

如果没有经过检验,唯一的解决方桉会困扰不断。
认同观点

不可能
也许可能,但是相当的薄弱与无趣
这是事实,我也已经告诉过你了
这是我先想到的
本来就应该这样
如果您带着否定的成见而来看待事物的话,请您保持开放的思想。
你仍可以做出它是废话的结论,但是做 出结论的方法就是你必须要能够接受不同的思想。请您给自己一点时间去做到它。
命名规则

合适的命名

命名是程式规划的核心。古人相信只要知道一个人真正的名字就会获得凌驾于那个人之上不可思议的力量。
只要你为事物想到正确的名字,将会为你自己以及后来的人带来比程式码更强的力量。别笑!

一个名称是事物在它所处的生态环境中一个长久而深远的结果,只有了解系统的程式设计人员知道如何建立”适合”这个系统的名称。如果名称恰当,许多事情就自然而然结合在一起,关係因此明确,意义因此容易传达,可以预期一般人心中所推论的结果。

如果您发现自己所有的命名都是东西与命令,您也许需要重新检视自己的设计。

物件名称

命名前记得确定它的用途,如果您无法想出它的用途,这表示您在这个设计中考虑的还不够
名称如果使用超过三个英文单字以上的组合字,这表示在您的系统中使用了令人困惑的变数元件。请重新检视您的设计,试着用一个CRC连线来确认您的物件是否比它们应该有的可信度更高。
避免被诱导为物件带来包含来源物件名称的命名,物件应该是独立的,不管它来自于哪裡。后置字元(Suffixes)在这种情况是非常有用的。例如,如果您的系统使用了 agents 这个词,能够换成像是 DownloadAgent 之类的词将会传达更多确定的资讯。
方法和函数命名

通常每个方法与函数都会执行一个动作,所以名称应该清楚的表达它会做什麽:用 CheckForErrors() 取代 ErrorCheck(), DumpDataToFile() 取代 DataFile()。这也会让函数与资料物件更容易辨别。
后置字元在下面情况是很好用的:
Max – 用来表示某件事物可以使用的最大值
Cnt – 用来计算数值的变数目前的数字
Key – 关键值
例如: RetryMax表示最大重试次数, RetryCnt 表示目前重试次数

前置字元在下面情况是很好用的:
Is – 询问一个关于某事物的问题,这样一来其他人看到Is 就会知道这是个问题
Get – 取得一个数值
Set – 设定一个数值
例如: IsHitRetryLimit.
缩写词不要全部使用大写字母

当遇到使用全部大写的英文单字比使用大小写溷用的单字更能够表达意义时,别理它!

使用: GetHtmlStatistic.
而不是: GetHTMLStatistic.
解释

当名称中包含缩写字时人们似乎有着非常不一样的直觉,最好只选定一个策略来让名称完全在人们的预料之中。
例如 NetworkABCKey ,要分辨C是来自于 ABC 而且 K 是来自于 key 容易造成困扰。有些人不在意,而其他人则非常讨厌这麽命名,所以您将会发现在不同的程式码中有着不同的规则,您将会因此永远不知道如何称呼某个事物。
范例

class FluidOz // 不要用 FluidOZ
class GetHtmlStatistic // 不要用 GetHTMLStatistic
物件(Class)命名

使用首字大写的单字来区隔组合字,单字的其他字母则为小写
名称的第一个字是大写
不要使用底线 (‘_’)
解释

在所有不同的命名策略中,许多人发现这样子可以让大部分人妥协
范例

class NameOneTwo
class Name
物件库(Class Library)命名

现在名称空间变成广为使用的工具,名称空间用来避免物件在不同的厂商与团体间发生名称冲突的情形
当您未使用名称空间时,通常在物件名称前会加上唯一的前置字元,两个字元就够了,更长的也可
范例

John Johnson的完整资料结构库可以使用前置字元JJ ,所以物件变成:
class JjLinkList
{
}
方法(Method)命名

使用与物件一样的规则
解释

在所有不同的命名策略中,许多人发现这样子可以让大部分人妥协
范例

class NameOneTwo
{
function DoIt() {};
function HandleError() {};
}
物件属性(Class Attribute)命名

物件成员属性名称应该以’m’开头
在’m’之后使用与物件一样的命名规则
‘m’ 通常出现在任何前置字元之前,像是代表参照的 ‘r’
解释

开头加个 ‘m’ 可以避免与方法的名称冲突,方法与属性的名称经常很相近,特别是对于存取者
范例

class NameOneTwo
{
function VarAbc() {};
function ErrorNumber() {};
var $mVarAbc;
var $mErrorNumber;
var $mrName;
}
方法参数(Method Argument)命名

第一个字元必须用小写
在第一个字元后的所有单字应该像物件名称一样使用首字大写
解释

您可以轻易的辨识出哪个变数在变数之间传递
范例

class NameOneTwo
{
function StartYourEngines(&$someEngine, &$anotherEngine) {
$this->mSomeEngine = $someEngine;
$this->mAnotherEngine = $anotherEngine;
}

var $mSomeEngine;
var $mAnotherEngine;
}
变数(Variable)命名

全部使用小写字母
使用底线 ‘_’ 区隔不同的单字
解释

这样一来程式码中的变数将清楚明瞭
所有的变数看起来都不一样且在程式码中可以辨识
范例

function HandleError($errorNumber)
{
$error = new OsError;
$time_of_error = $error->GetTimeOfError();
$error_processor = $error->GetErrorProcessor();
}
阵列元件(Array Element)

阵列元件名称依循变数的规则

使用底线 ‘_’ 区隔不同的单字
不要使用减号 ‘-‘ 做为单字的区隔
解释

如果使用减号 ‘-‘ 做为单字区隔,程式会产生使用跳脱字元的警告讯息
范例

$myarr[‘foo_bar’] = ‘Hello’;
print “$myarr[foo_bar] world”; // 将会输出: Hello world
$myarr[‘foo-bar’] = ‘Hello’;
print “$myarr[foo-bar] world”; // 警告讯息
单引号或双引号

使用单引号或双引号来存取阵列的元件
不要使用包含跳脱字元的引号
解释

除了神奇引号外,如果阵列没有使用引号,一些 PHP 的设定会输出警告讯息
范例

$myarr[‘foo_bar’] = ‘Hello’;
$element_name = ‘foo_bar’;
print “$myarr[foo_bar] world”; // 将会输出: Hello world
print “$myarr[$element_name] world”; // 将会输出: Hello world
print “$myarr[‘$element_name’] world”; // 语法错误
print “$myarr[“$element_name”] world”; // 语法错误
参照变数(Reference Variables)与函数传回参照( Functions Returning References)

参照应该以字元’r’开头.
解释

这样一来在变数种类之中容易区分
它可以确定哪个方法返回可更改物件,哪个方法返回不可更改物件
范例

class Test
{
var $mrStatus;
function DoSomething(&$rStatus) {};
function &rStatus() {};
}
全域变数(Global Variables)

全域变数应该使用前置字元 ‘g’
解释

知道变数的作用范围是很重要的
范例

global $gLog;
global &$grLog;
定义(Define)命名与全域常数( Global Constants)

全域常数应该使用全部大写的组合字,并且用底线 ‘_’ 区隔
解释

全域常数一直以来都是用这个方式命名,您必须要小心避免与系统预设常数冲突
范例
define(“A_GLOBAL_CONSTANT”, “Hello world!”);
静态变数

静态变数也许可以用前置字元 ‘s’
解释

知道变数的作用范围是很重要的
范例

function test()
{
static $msStatus = 0;
}
函数(Function)命名

在C GNU大会上讨论的结果,PHP的函数命名全部使用小写字母且以底线 ‘_’ 做为区隔
解释

这样一来函数就会跟物件相关名称有很大的差异
范例

function some_bloody_function()
{
}
错误返回检测规则

检查所有系统呼叫传回的错误讯息,除非您要忽略错误。
每个系统错误讯息都包含系统错误文字
大括弧 {} 规则

在三种主要的大括弧配置策略中,有两种是比较被接受的,而下面的第一种通常是比较多人採用的:
将开始的大括弧放在关键字的下一行,而结束的大括弧放在最后且独立的一行中:
if ($condition) while ($condition)
{ {
… …
} }
传统的UNIX程式码会把开始的大括弧与关键字放在同一行,而结束的大括弧放在最后且独立的一行中:
if ($condition) { while ($condition) {
… …
} }
解释

虽然两种格式都可以被接受,但是许多人还是觉得第一种比较舒服;至于为什麽,那就是心理学家研究的范围了
大家宁可选择第一种格式的理由比心理学家还多,如果您使用的文字编辑器(例如 VI)支援大括弧的对称显示,第一种会比较好。理由是,当您想知道一个大区块中程式码结束的位置,您可以移到开始的括弧点一下,编辑器会自动找到结束的括弧。例如:

if ($very_long_condition && $second_very_long_condition)
{

}
else if (…)
{

}
在区块间移动您只需要在开始的括弧点一下,您不需要捲动画面就可以让游标很快的在区块间来回。
缩排/跳位/空格 规则

在每一层用四个空白当缩排
不要使用跳位键( tabs ),使用空白;大部分的编辑器都可以将跳位转换为空白
使用刚好的缩排即可,不要滥用。没有明确的规则限制最多可以使用几层缩排,不过如果缩排的层次大于4或5层,您也许需要将程式码作适当的切割
解释

当其他人使用了不同的跳位键设定,就会因此无法(难以)阅读或列印,因此空白会比跳位键好
大部分的PHP应用程式使用4个空白
大部分的编辑器预设也是4个空白
许多人尝试要去限制最多可以使用的缩排阶层数,但是通常无法落实。我们相信程式设计人员会聪明的选择巢状程式码的深度
范例

function func()
{
if (something bad)
{
if (another thing bad)
{
while (more input)
{
}
}
}
}
小括弧()的关键字与函数规则

不要将小括弧放在关键字的旁边,记得加个空白
将小括弧放在函数名称的旁边
非必要时别在传回值放上小括弧
解释

关键字不是函数,如果将小括弧放在关键字的旁边(不加空白),关键字跟函数会容易造成浑淆
范例

if (condition)
{
}

while (condition)
{
}

strcmp($s, $s1);

return 1;
别在物件架构期做实际的工作

别在物件的建构子中执行实际的工作,建构子应该只有拿来组态变数且/或执行不能够发生错误的工作
例如在完成组态的物件中建立一个方法 Open() 时,Open() 应该在物件完成组态后才去呼叫它

解释

建构子无法传回错误讯息
范例

class Device
{
function Device() { /* initialize and other stuff */ }
function Open() { return FAIL; }
};

$dev = new Device;
if (FAIL == $dev->Open()) exit(1);
让函数重複执行

函数不应该保留静态变数,以避免函数被重覆执行
If Then Else 格式

配置

这是任由程式设计人员决定的,不同的括弧配置看起来只会有些许的差异;通常会像这样:
if (condition) // Comment
{
}
else if (condition) // Comment
{
}
else // Comment
{
}
如果您的程式码有else if ,加个 else 的区块来找到没有处理过的情况,或许可以在此放个记录,即使它不需要任何矫正的动作
条件格式

尽可能将常数放在运算子左边,例如:
if ( 6 == $errorNum ) …

其中一个理由是当您少了一个等号时系统会产生错误讯息;第二个理由是当您希望寻找变数中放了什麽数值时,您可以在开始的地方找到,而不是在结束的地方。这需要一点时间适应,但是这真的很有帮助!

switch 格式

如果一个条件的程式会同时执行下一个条件的程式(注意看范例的第一个case没有break),记得加个备注
default 不管怎麽样都应该保留,如果不应该有预设值记得在裡面放入错误讯息
如果您需要建立变数,将程式码放在区块中
范例

switch (…)
{
case 1:

// FALL THROUGH

case 2:
{
$v = get_week_number();

}
break;

default:
}
continue,break 与?:的使用时机

Continue 与 Break

Continue 与 break 就像是 gotos 一样,所以放在这边
Continue 与 break 跟 goto 一样尽可能不要去用它

使用 continue 有两个比较主要的问题:

它也许会略过测试的条件
它也许会略过增加或减少的程式码
下面这个例子中两个问题都会发生:

while (TRUE)
{

// A lot of code

if (/* some condition */) {
continue;
}

// A lot of code

if ( $i++ > STOP_VALUE) break;
}
注意:要让程式设计人员无法轻易的找出问题 ,”很多的程式码”是必要的
在上面的例子中,我们可以说:在同一个迴圈中同时使用 continue 与 break 必然会是个灾难

?:

这会发生问题的原因在于,人们总是喜欢在? 跟 : 之间塞进大量程式码;下面有几个清楚的规则可以遵循:
在条件的叙述中使用小括弧,藉此与其他程式码产生区隔
测试的动作最好是单纯的函数
不要把 then 与 else 的描述放在同一行,儘管它是可以放在一起
范例

(condition) ? funct1() : func2();

or

(condition)
? long statement
: another long statement;
定义区块的对齐

定义的区块应该要对齐
解释

清楚
相近的变数组态区块应该做同样的对齐
符号 “&” 应该放在靠近变数类型的地方,而不是名称
范例

var $mDate
var& $mrDate
var& $mrName
var $mName

$mDate = 0;
$mrDate = NULL;
$mrName = 0;
$mName = NULL;
一行一个描述

即使描述之间是相当的接近,还是应该将它分成一行一个描述
短方法

方法的程式码应该限制在一个页面(画面)可以看到的数量
解释

因为每个方法代表着完成一个目标所需要的技术
大部分没有使用到的参数最后都会变成 false
实际的函数呼叫会比没有还慢,但是必须要想清楚再决定 (是否要这麽早将程式码最佳化)
放一个空值( Null )的描述

即使迴圈不需要其他描述,在 for 或 while 的描述中记得放上一个空值( Null )的内容,这样才能够清楚的知道程式是刻意这样子做而不是忘记输入
while ($dest++ = $src++)
; // VOID
如果测试值不为零则不要做为 if 的预设值

不要将不为零的测试值当预设值,例如:
if (FAIL != f())
会比下面这样好:
if (f())
即使 FAIL 也等于数值零,会让PHP判断为错误( false )。如果其他人决定要将错误的回传值定义为 -1 而不是 0 时,一个明确的测试值会很有帮助。又即使比较的数值一定不会改变,明确的比较运算还是必要的!例如 if (!($bufsize % strlen($str))) 应该改写为 if (0 == ($bufsize % strlen($str))) 来反应测试值的自然数(不是布林数)。经常发生一个错误是使用 strcmp 来测试字串是否相等,结果就永远不会是预设值。
不为零的测试值经常被当做 if 的预设值,而这样子其他函数或程式就会受到下面这样的限制:

回传值为 0 才是 false,其馀免谈
这样子对于回传值为 true 的情况太过广泛,等于呼叫一个 IsValid(), 而非 CheckValid()
自相矛盾的布林类型

不要用1 (TRUE, YES, etc.)来检查布林数值,将它改为不等于0 (FALSE, NO, etc.)。因为大部分的函数保证会在 false 的情况时传回 0 ,但是true 的状况会传回任何不为零的数值,所以…

if (TRUE == func()) { …
应该要改写为
if (FALSE != func()) { …
避免嵌入式工作

嵌入式工作可以节省时间与空间,但是某些人认为这样子除了让程式码变的庞大且难以阅读外没有更好的优点。
while ($a != ($c = getchar()))
{
process the character
}
++ 与 — 两个运算子是使用指派描述来完成运算,所以在很多情况下执行函式会有些副作用;使用嵌入式指派描述也许会增加执行效能,但是你必须同时考虑加速与不容易维护两种结果,例如:

$a = $b + $c;
$d = $a + $r;
不应该写成
$d = ($a = $b + $c) + $r;
即使后者可以节省一个週期,在长时间的执行中,加速器的成熟会让两者的差异会越来越小;不过后者在维护上会较困难
重複使用您以及其他人努力的成果

如果没有适当的基础架构,在不同的专桉之间重複使用程式码几乎是不可能的;而物件通常也只符合所需的服务,不同的专桉有着不同的服务环境,使得重複使用物件相当困难。
发展一个基础架构可以让设计的工作轻鬆许多,不管怎麽样,在还没开始之前,下面有几个技巧可以用来鼓励重複使用程式码:

别担心函式库太小

重複使用程式码最大的敌人就是人们不习惯将函式库脱离他的程式码,一个可以重複使用的物件也许藏在一个程式的资料夹中而且不易与人分享,因为程式设计人员不会将物件分解或是将物件放入函式库中
其中一个理由是人们不喜欢製作小的函式库,总觉得这样怪怪的;别闹了,电脑不会在乎你使用了多少函式库

如果你有可以重複使用的程式码而且无法放在既有的函式库,麻烦就建立一个新的吧!如果人们真的去思考重複使用的好处,这个函式库不会一直这麽小的!

如果你担心在函式库异动或新增的时候必须去更新 makefiles ,那就不要在 makefiles 中引入(include)函式库,试着去引入想法或是服务 。 基础层级的 makefiles 定义了服务是由一堆函式库所组成,更高层级的 makefiles 指定它们需要的服务,当一个服务的函式库有了异动,你只需要去修改较低层级的 makefiles 。

维持一个资料库

大部分的公司并不知道他们到底有哪些程式码,而且大部分的程式设计人员仍然不会告诉其他人他完成了什麽或是询问其他人什麽已经做好了。而解决的方式就是去维护一个程式资源的资料库。
在理想的状况下,程式设计人员可以从网页浏览或搜寻包装好的函式库清单,并且取得他们需要的部份。如果你能建立这样一个让程式设计人员自愿维护的系统,那就太棒了;甚至如果能够记录重複使用的状况更好。

另外一个方法就是自动从程式码中产生一个资料库,这是基于使用通用的物件、函数、函式库与子系统标头,这样子同时可以完成说明页面与资料库。

注解中的注解

注解应该像是说个故事

让你的注解像是描述这个系统的一个故事,预期你的注解会被自动程式从程式码中取出然后格式化成说明页面;而物件的注解就是这个故事的一部分,函式注解、函式参数与函式的配置则是故事的另外一个部份。所有的内容应该编织在一起,并且在另一个时间点告诉某人你做了些什麽以及为什麽这麽做
写下为什麽这麽做

注解应该说明你的决定,在任何一个你必须做出决定的地方留下注解说明你做了什麽决定以及为什麽,考古学家会从裡面找到最有用的资讯
使用标头( Headers)

使用像是 ccdoc 的文件抽离系统,文件中的其他部分说明如何使用 ccdoc 来完成一个物件与函式的文件。
这些标头使用同样的规则结构化,这样一来它们可以被分析与分离。他们不像是一般的标头,所以花点时间去完成填写。如果你一次作对,你就不需要另外製作文件了!

注解配置

专桉的每个部份都该有个特别的注解配置方式
明确的抓住重点

明确的对以下事情加以注解:在正常的控制流程之外所发生的变数变化; 在维护时很可能会被弄坏的程式码。使用内嵌关键字来指出程式要点与潜在问题。 想像有一个自动程式,它会剖析您的注解以寻找关键字,然后取出关键字所指的 内容,再製作出一份报告,好让大家在需要解决的地方予以特别处理。
搜寻关键字﹝Gotcha Keywords﹞
:TODO: 主题
表示这裡还有工作尚待完成,不要忘记了。
:BUG: [bugid] 主题
表示这裡有一个已知的臭虫,并加以解释,或许再给一个臭虫编号。
:KLUDGE:
当您很笨拙的完成某件事情时,就明白的说出来,并说明您下次想採取 怎样不同的方法去做,如果您还有时间的话。
:TRICKY:
告诉别人以下的程式码是非常有技巧的,请不要不加思索的修改它。
:WARNING:
要注意某件事情。
:PARSER:
偶尔您必须设法解决程式语言剖析器所产生的问题。请加以注明。这个剖析器的 问题终会被修正。
:ATTRIBUTE: value
这是个一般格式,说明该注解所内含的属性。您可以创造您自己的属性,它们 也会被析取出来。
搜寻格式﹝Gotcha Formatting﹞

将搜寻关键字放在注解的最前面,亦即第一个符号。
注解也许会包含好几行,然而第一行必须是独立而有意义的简要说明。
作者的名字与注解的日期也应该写在注解裡面。这两项资讯虽然也可以 在原始码的仓储装置中找到,但是这或许需要一段时间才能查明这段注解 到底是谁、在什麽时后所加上去的。通常这会浪费许多时间去搜寻。 将日期资讯写在注解裡面,可以让其他程式设计师在做决定时有所依据。 将作者资讯写在注解裡面,可以让我们知道应该找谁问问题。
范例

// :TODO: 年月日 960810: 执行效率问题
// 其实我们应该在这裡使用杂凑表,但是现在先使用线性搜寻。

// :KLUDGE: 年月日 960810: 不安全的强制转型
// 这裡我们需要作一个强制转型,以回复原本的衍生型别。或许我们应该
// 使用一个 virtual method、或是使用 template。

相关资讯

请参考介面文件与实作文件来了解文件格式的细节。
介面文件与实作文件

文件主要是为两种人製作的:
Class 使用者。
Class 实作者。
只要在撰写程式时事先考虑到文件的製作,我们就可以从原始程式码中直接 取出上述的两种文件。
Class 使用者
Class 使用者需要类别介面的资讯,如果标头档的结构正确,这些介面资讯可以直接 从标头档中取得。当您在档桉表头的注解区块中,为某个 class 撰写注解时,要记得 使用该 class 的程式设计师只需要知道如何去使用该 class。不要在注解中深入讨论 实作上的演算法细节,除非这是该 class 的使用者应该要知道的。把标头档中的注解 当作是以后要加入说明书的一部份。
Class 实作者
Class 实作者需要知道该 class 如何实作的深入细节。这些资讯可以在在原始码档桉中 的注解找到。不要担心介面的问题。原始码档桉的表头注解区块中,应该涵盖演算法议题, 与其他设计上的决定。在 method 实作的注解区块裡,应该有更详细的讨论。
目录文件

每个目录裡面都应该一个 README 档桉,其内容包括:
建立这个目录的目的,以及这个目录裡面包含些什麽。
档桉列表,每个档桉都应该有一行说明。这行说明通常是取自该档桉表头的 NAME 属性。
建置与安装的指导。
将大家引导到相关的资源:
原始码的目录。
线上文件。
纸张文件。
设计文件。
其他有帮助的东西。
假设有某个专桉,每位开发成员都离开了,六个月后,有新人进来。这位孤独害怕的 探索者,就可以藉着遍历原始码的目录树,阅读每个 README 档桉、Makefiles、与 原始码档桉的表头,来拼凑出该专桉的面貌。
开放/封闭原则 ﹝Open/Closed Principle﹞

Software entities should be open for extension, but closed for modification. (Bertrand Meyer)

开放/封闭原则的意思是,一个 class 在扩充方面应该是开放的,而在修改方面是封闭的:
所谓的开放,意即我们可以对一个 class 加以扩充。
所谓的封闭,意即我们只能对 class 予以扩充,而不能加以修改。其想法是,一旦某个 class 已经被证明是可用的,而已经进入程式码检讨、单元测试、与其他品管程序,您就不可以 对它进行修改,而只能扩充它。
开放/封闭原则所高唱的是稳定性。扩充一个系统的方法,应该是加入新的程式码, 而不是对已经可以使用的程式码加以修改。程式设计师通常不是很喜欢去修改旧的 程式码,因为它们没有问题!这个原则只是给您一个学术上的依据,让您可以安心 🙂
在实际上,开放/封闭原则就是要我们好好利用抽象化﹝abstraction﹞与多型 ﹝polymorphism﹞这两个老朋友。使用抽象化来釐出通用的过程与想法。 使用继承来建立出衍生类别必须遵守的程式介面。

伺服器设定

本节包含某些 PHP/Apache 组态的指导原则。
HTTP_*_VARS

HTTP_*_VARS可能是开启或关闭的。当开启时,所有变数都必须以$HTTP_*_VARS[key] 的方式来存取。当关闭时,所有变数则可以直接使用 key 的名称来存取。
使用HTTP_*_VARS来存取变数。
在PHP组态中,将HTTP_*_VARS设为开启。
解释

每个PHP组态都会有HTTP_*_VARS。
使用HTTP_*_VARS来存取变数不会与程式码中的变数名称相抵触。
使用者无法以给值的方式来更改变数的值。
PHP档桉副档名

PHP档桉有许多不同的副档名﹝.html,.php,.php3,.php4,.phtml, .inc,.class…﹞。
永远使用 .php 这个副档名。
永远使用 .php 这个副档名来命名您的类别与函式库档桉。
解释

使用 .php 可以让我们对其它不以 .php 做副档名的档桉开启快取。
使用 .inc 与 .class 可能会产生安全性的问题。在大多数伺服器的设定中, 这些副档名并不是可执行的。因此,当远端的使用者存取这些档桉时,这些档桉 不会被送给剖析器去执行,而是原原本本的显示在浏览器中。
其他

本节要说明哪些是可以做的、哪些是不能做的。
在需要整数的地方,请不要使用浮点数。拿浮点数当作迴圈计数器,等于是拿一把枪 来射自己的脚。在比较浮点数的大小时,请使用 <= 或 >=,绝对不要用刚好等于 或不等于的比较运算子﹝== 或 !=﹞。
不要倚赖自动化的程式码美化工具。使用良好的程式风格,获益最大的还是程式设计师自己。 特别是在设计阶段早期,使用手写方式来撰写演算法或虚拟码的时候,更需要好的程式风格。 美化程式码的自动工具只能适用于已撰写完毕、而且语法正确的程式,它不能使用在还需要 对空白字元与缩排字元加以注意的撰写阶段。谨慎的程式设计师都会对程式细节加以注意, 因此,他们为函式或档桉所编排出的格式会更为清楚﹝换句话说,谨慎的程式设计师不会只 依循语法来编排程式码,它们会在需要注意的地方,刻意编排出突显的格式,以便在阅读时 能一目了然,自动美化工具无法知道程式设计师的心思,它会把用心编排出来的格式破坏殆尽。﹞ 草率的程式设计师应该学习如何去当一位谨慎的程式设计师,而不是倚赖自动美化工具来使 他们的程式码好读一些。最后要说的是,自动美化工具并不是很简单的程式,它必须对原始码 进行剖析,特别设计这麽一个複杂的程式来美化程式码,实在是不怎麽值得。程式码美化工具 的最佳用途,是将程式码产生器所产生的如野草般杂乱的程式码予以美化。
程式设计师偶尔会在逻辑比较运算子中少打一个 “=”,这也是一个问题。 下面的程式码是很令人困惑的,而且也常会出错。
if ($abool= $bbool) { … }
这位程式设计师真的是要写一个指定式吗?很可能是,但是通常不是。解决这种问题的方法, 就是不要这样写。将指定式与逻辑比较式分开来写,不要将两者溷在一起。建议的格式是, 先执行指定式,再执行逻辑比较:
$abool= $bbool;
if ($abool) { … }
使用 if (0) 来注解程式码区块

有时候,您需要将很大的程式码区块注解起来,以便测试。最好用的方法 是使用 if(0) 区块:
function example()
{
一堆程式码

if (0) {
许多程式码
}

更多程式码
}
您不能使用 /**/ 的方式来注解一大块程式码,因为注解裡面不能再包含 注解,而且很肯定的,一大块程式码裡面一定会包含有注解,不是吗?

不同的存取函式风格

实作存取函式

存取函式的建立有两种主要风格。
Get/Set

class X
{
function GetAge() { return $this->mAge; }
function SetAge($age) { $this->mAge = $age; }
var $mAge;
};
个人并不欣赏Get/Set风格。它会让程式码裡面充斥了一堆 Get 与 Set。
但是它有一个好处,在处理网路讯息时,我们可以在 Set 函式裡面将本机的 位元组顺序﹝byte order﹞转换成网路的位元组顺序。

属性物件﹝Attributes as Objects﹞

class X
{
function Age() { return $this->mAge; }
function Name() { return $this->mName; }

var $mAge;
var $mName;
}

$x = new X;

// 范例 1
$age = $x->Age();
$r_age = &$x->Age(); // 属性的参考﹝Reference﹞

// 范例 2
$name = $x->Name();
$r_name = &$x->Name(); // 属性的参考﹝Reference﹞
从函式名称来看,属性物件的函式名称很简洁。请儘可能使用这种方式来存取属性。
阶层

阶层式设计是减低系统複杂度的主要技术。一个系统应该被分割成数个阶层。 某个阶层可以使用定义良好的介面来与邻近阶层进行沟通。如果一个阶层可以 接触到非邻近阶层时,就违背了阶层设计的原则,称之为「阶层违背」。
「阶层违背」的发生,就表示有两个阶层之间的互依关係,不是经由良好定义的介面来产生的。 当其中一个阶层有所改变时,程式码可能会无法运作。我们不希望程式码无法正常运作,所以 要求每个阶层只能与邻近阶层进行沟通。

有时候,为了改善执行效率,我们需要跳过几个阶层。这没有问题,但是我们 应该要知道自己正在违背阶层原则,并应该在文件中加以说明。

程式码检讨﹝Code Review﹞

如果您能够对程式码进行一次正式的检讨会议,我向您脱帽致敬。程式码检讨是非常有帮助的。 不幸的是,它们总是会转变成吹毛求疵的会议,无止境的在愚蠢的事情上互相争论。 它们也总是会佔据许多人的时间,而无法产生预期的效果。
天阿,这个人在质疑程式码检讨的必要性,他一定不是工程师!

也不尽然,我所要质疑的,只是程式码检讨的会议形式,以及在延期又溷乱 的专桉中进行程式码检讨的效果。

首先,程式码检讨只能在专桉后期举行,它来得太迟了,无法产生任何帮助。 真正需要检讨的,是需求规格与设计规格。这才是您可以获得更大成效的地方。

将相关人员集合在一个房间。把他们锁在裡面。完整的审视程式介面设计,以及需求 规格,直到前者的设计令人满意,后者的需求也都达成。将所有相关人员集中在一个 房间裡面,可以让这个过程产生良好的效益,因为问题可以被立即回答,观点可以被 立即探讨。通常,这种会议只要举行两三次就很够了。

如果上述的过程圆满达成,程式码撰写工作就不会有什麽问题。如果您在程式码检讨 中发现问题,而这个问题是某人花了许多时间与精神不停测试所发现的,您最好回去将 程式码重新写过一遍。

您仍然会想要做程式码检讨,那只要在一旁进行就好了。找几位您信得过的人, 阅读可能有问题的程式码,并将建议直接告诉程式设计师。如此,程式设计师与审查者 就可以讨论各种观点,并将它们实行出来。电子邮件与快速犀利的讨论是很好的方式。 这种方式符合检讨的目的,也不会一次用掉六个人的时间。

提早且不是经常建立原始码控制系统

在专桉生命週期中,应该安装一个共用的建置系统与原始码控制系统,愈早安装愈好, 最好是在开始撰写程式码之前就安装完毕。原始码控制系统是让专桉结构保持完整的 黏着剂。如果程式设计师不能轻易的使用他人的成果,您就永远无法製造出可以重覆 生产的建置版本,也会浪费大家许多时间。将一个失控的建置环境改建成标准系统, 也是很糟糕的事情。每个专桉都有权利去建立它自己的客製环境,这个道理似乎是对的, 但是该客製环境却总是无法运作得那麽对。
某些要点必须牢记在心:

一般来说,像 CVS 这种共享原始码环境,最适用于极大型专桉。
如果您要使用 CVS,请使用 参考建置树﹝reference tree﹞ 的方式。这种方式会将各个建置版本储存在一个主建置树﹝master build tree﹞中。 程式设计师只从工作中的建置版本中取出原始码,而且只取出欠缺的部份, 因为 make 系统会使用该建置版本来找出本机上所没有的档桉。 使用-I 与 -L旗标让这个系统在设定上容易一些。 先在本机上搜寻档桉与程式库,然后再到参考建置﹝reference build﹞中搜寻。 这个方式可以节省磁碟空间与建置时间。
磁碟空间愈大愈好。现在的磁碟机又大又便宜,实在没有理由不去保存数份建置版本。
让简单的事情更简单。在文件中说明如何进行下列事项,应该是非常简单的事情:
如何取出模组来建置。
如何更改档桉。
如何将新的模组加入系统中。
如何删除模组与档桉。
如何将所做的更改存入系统中。
可以用的函式库与引入档有哪些。
如何取得建置环境,包含所有的编译器与其它工具。
製作一个网页、文件、或是其他类似的东西。不要让新到的程式设计师 到处要求老手透露一下建置的秘诀。

每次存入﹝checkin﹞时都做一次日志注解是很有用的。这些注解应该每晚蒐集起来, 并传送给相关单位。
相关资讯

如果您的钱够多,许多专桉发现 Clear Case 是个好系统。也有许多完全可以运作的系统是建立在 GNU 的 make 与 CVS 上面。CVS 是一个建立在 RCS 上面的 freeware 建置系统。它与 RCS 之间的 主要差异是,它为建置中的软体提供了一个共享档桉模式。
提早且不是经常建立错误追踪系统

愈早习惯使用臭虫追踪系统愈好。如果您在专桉进度3/4的时候才安装臭虫追踪系统, 没有人会去使用它。您必须早一点安装臭虫追踪系统,让大家去使用。
程式设计师通常很不喜欢去追踪臭虫,然而一旦使用正确,它会对专桉有很大的帮助:

问题不会被丢下不管。
问题会被自动转到负责人手中。
问题的生命週期会有追踪记录,让大家有足够的资讯可以互相讨论。
经理可以依据该系统中的臭虫数量与类型,来拟定重要的进度表与幕僚决策。
组态管理﹝configuration management﹞有希望与修补问题的补丁保持一致。
QA﹝问答集﹞与技术支援和开发人员之间有一个沟通的媒介。
以上各点,虽然不是什麽迷人的事情,但是它们让专桉有良好扎实的进步。
原始程式码的版本控制应该连结到臭虫追踪系统上面来。当专桉进行到释出软体前的 程式码冻结阶段时,版本控制系统应该只接受带有合法臭虫ID的存入动作﹝checkin﹞。 当程式码的臭虫被修正完毕后,该臭虫的ID也应该包含在checkin的注解中。

遵守责任区分

软体模组的责任是有所区分的。模组的维护可能是某人的责任,或是大家共同的责任。 请遵守这样的责任区分。不要去修改不属于您负责的模组。否则,只会引起 错误与不愉快的经验。
请面对这样的事实,如果某段程式码不属于您维护,就请放弃自己去修改它的念头。 程式码的来龙去脉是很複杂的,您认为相当合理的事情,可能到头来完全是错误的。 如果您需要修改某个地方,只要请负责该程式码的人去修改就好了。或是在您进行 修改之前,先询问他们是否可以做这样那样的改变。如果他们说好,那就可以去改, 否则就请不要动您的编辑器。

每个规则都有例外的情形。如果在清晨三点钟,您需要做一个修改,以释出一个 可以使用的版本,那麽您就必须改下去。如果负责人正在休假,而且该模组没有 指定代理人,您也必须改下去。当您修改别人所撰写的程式码时,请试着使用他们 所採用的程式码风格。

某些特别敏感的程式码在修改之后会对其他地方造成影响,负责的程式设计师必须在这些程式码 中加入注解。如果修改某个地方的程式码,也必须对另一地方的程式码进行修改,那就 要在注解中加以说明。如果资料格式的改变会与储存的资料产生冲突、或是与送至远端电脑的讯息 不一致,也要在注解中加以说明。如果您试着减少记忆体的使用量,或是想达成某种目标, 也请在注解中说明。不会有人聪明到可以猜出您心中的想法。

最不可原谅的是,把整个系统的程式码全部改过一遍,以符合您个人的程式风格。 请保持礼貌。如果某人没有按照标准来撰写程式码,就请他们修正,或是 请您的经理来要求他们。

如果模组是由大家一起维护的,就要特别小心。坚持不做剧烈的修改,以免产生难以解决的 版本冲突。在程式档中加入注解,说明这个程式档的扩增方法,好让每个人都遵循这个规则。 试着在共用的程式档中使用相同的程式结构,免得其他人必须摸索着去寻找所要的 程式码,找到以后也不知道如何去修改它。每次修改完程式码,立即将新版程式码 储存进版本控制软体中,以避免版本冲突的发生。

另外一提,追踪臭虫也是一种必须指定的模组责任。

PHP程式码标籤

PHP 标籤﹝Tags﹞是用来标示出夹杂在 html 中的 PHP 程式码。有许多标示方法可以使用。 , , , <% %>,以及。某些方法可能在您的 PHP 设定 中被关掉了。
使用
解释

在任何的系统与安装过程中都是可以使用的
范例

// 会列印出 “Hello world”

// 会列印出 “Hello world”

// 会列印出 “Hello world”

<% print “Hello world”; %> // 会列印出 “Hello world”

// 会列印出 $street 这个变数的值
避免使用不可思议的数字

不可思议的数字﹝magic number﹞,就是光熘熘的出现在原始程式码中的数字。 它们之所以不可思议,是因为没有人知道这些数字的意思是什麽,甚至连原始作者 也会在三个月后完全忘记它们的意思。例如:
if (22 == $foo) { start_thermo_nuclear_war(); }
else if (19 == $foo) { refund_lotso_money(); }
else if (16 == $foo) { infinite_loop(); }
else { cry_cause_im_lost(); }
在上面的例子中,22 与 19 的意思是什麽?您又怎麽能够知道,这些数字曾经被修改过, 或是这些数字根本就是错误的?

频繁的使用不可思议的数字,表示该位程式设计师只不过是业馀的。这样的程式设计师 可能从未在开发团队的环境中工作过,否则,如果他们需要去维护程式码,那他们铁定不会 这样做。

请绝对不要在程式码中写下不可思议的数字,改用有意义的名称来代表它们。您应该使用 define()。例如:

define(“PRESIDENT_WENT_CRAZY”, “22”);
define(“WE_GOOFED”, “19”);
define(“THEY_DIDNT_PAY”, “16”);

if (PRESIDENT_WENT_CRAZY == $foo) { start_thermo_nuclear_war(); }
else if (WE_GOOFED == $foo) { refund_lotso_money(); }
else if (THEY_DIDNT_PAY == $foo) { infinite_loop(); }
else { happy_days_i_know_why_im_here(); }
这样不是好多了吗?
轻巧相对于庞大的物件介面

一个物件应该有多少method?正确的答桉当然是刚刚好,我们称之为「歌蒂拉克程度」 ﹝Goldilocks level,程度适中的意思﹞。但是「歌蒂拉克程度」是什麽样子?答桉是, 它不存在。您必须依据实际情形来拿捏method的数量,这就是为什麽我们需要程式设计师 🙂

两种极端的设计是,轻巧类别﹝thin classes﹞与庞大类别﹝thick classes﹞。轻巧类别 是最低限度的类别,它所拥有的method愈少愈好。一般来说,使用者会继承轻巧类别来衍生 出他们自己的类别,并在衍生类别中加入所需要的method。

轻巧类别或许看起来很「乾淨」,但是实际上并非如此。轻巧类别没有多大的用途,它的 主要目的只是为了建立起一个型别。正因为轻巧类别没什麽实际功用,所以在同一个专桉 中的每位程式设计师,都会衍生出他们自己的类别,而且他们在衍生类别中所加入的method, 基本上都是一样的。这就造成了程式码重複开发的问题,而违背了当初採用物件的方法来 开发程式的目的─让同一份程式码可以重覆使用。解决这个问题的方法,就是把新增的method 往上放到基底类别中。如果往上放的method很多,基底类别就会变成庞大类别。

庞大类别有很多method。您想在它裡面加入多少method都可以。这会产生什麽问题吗?也许不会。 如果要加入的 method 与该类别有直接的关连,那把它们放在该类别裡面就不会有什麽问题。 真正的问题是,有些人会开始懒惰,把有些应该放到别的类别的method,即使与该类别只有一点点关连, 也一併新增到该类别裡面。在这裡,我们需要再次做出正确的判断。

庞大类别还有其他的问题。愈庞大的类别,愈不容易了解,程式码之间的互动更不可预期, 因此也更难除错。而且,如果有一个您从不使用、也从不关心的method被修改了,您还是得 整个类别重新测试,再重新释出这个类别。

css基础教程

Cascading Style Sheets (串接樣式表)的基本介紹

什么是CSS

CSS的全名是Cascading Style Sheets(串接样式表)。它是由许多样式名称和样式指定值所组成的字串,我们可以利用设定好的样式表,指定给某一种HTML标签,或某一群组HTML标签来使用。而被套用的HTML标签,将会依据所套用的CSS来显式它的外观。

CSS可说是JavaScript物件模型的一个重要部份,因为在CSS设定之后,我们还可以利用JavaScript重新指定不同的值给元件,而达成动态改变的效果(JavaScript动态改变的功能IE已完全支援,但NC只支援极少部份)。试想我们利用CSS将一段文字设为红色,再利用JavaScript将它改变为篮色,这就是一种动态网页效果啦(NC目前做不到)!

css是用来延伸html而非取代htnl,是用来补html的不足

IE4.0及Netscape支援CSS1.0版,而IE5.0则支援到部分CSS2.0

CSS利用各式的排版样式来辅助HTML,其简洁的语法可以很容易的控制HTML标记,而且最大的功能是可以将资料与显示格式分开处理(以 . CSS为副档名储存成一个独立的文字档) 。

CSS的特点

减少图档的使用,便可以达到文字变化的需求,加快网页传输的速度

集中管理样式,当修改时只需针对样式修改即可

共享样式设定,CSS可另外存档,供每一个网页取用共享

使用CSS有什么好处

CSS的最大好处是提供了HTML所不支援的属性。例如<FONT>中只可设定文字前景颜色,但CSS可指定背景颜色、背景图形甚至帮它画个外框!所以CSS的出现,将使我们可以运用更多不同的属性,当然网页也会更漂亮啦!

用CSS将会使网页设计速度增快。我们常常会用到许多参数完全相同的标签,如可能用到好几次参数设定一样的<FONT>标签,而还是得每次都重新指定所用的参数。但如果用CSS,就大不相同了!我们可以指定一群的标签都套用某个CSS,这样设定一次全部OK,不是很方便吗?

让许多网页用同一份CSS,可减少网页体积。CSS可独立写成一个档案,再由浏览器于需要时读入。如果数个档案共用一份CSS,将可达到减小网页体积的功效,而且也可以减低网路传输的负荷,可谓一举多得!

串接

让HTML文件可同时套用数个样式表,每个样式表描述不同的物件

将这些样式串接同一网页上,在维护上比较方便

CSS基本语法

HTML标记可为任何标记,多个HTML标记间以逗号( , ) 分隔; 属性定义为大括弧部份,多个属性定义间以分号( ; ) 分隔。

HTML标记{ 属性名称: 属性设定值 }

如: 
H1 , H3 { COLOR : RED ; FONT-WEIGHT : BOLD }

CSS种类

CSS为什么称为串联式排版样式呢? 是因为可以混合使用以下Style Sheets种类,其优先执行顺序依编号排列。

  1. Inline (同列) :使用HTML标记的STYLE属性,只于定义的区段有效。如: <P STYLE=COLOR:RED>
  2. Embedding (内嵌) :使用<STYLE>…</STYLE>标记(置于BODY本文区之前),定义HTML标记供整个网页使用。可使用多个<STYLE>…</STYLE>标记如: <HTML>文件开始

    <STYLE TYPE=text/css>排版样式区开始<!排版样式区内容–> </STYLE>排版样式区结束

    <BODY>本文区开始
    本文区内容</BODY>本文区结束

    </HTML>文件结束

  3. Linking (连结) :使用<LINK>标记(用于HEAD区),即将排版样式分开处理(以. CSS为副档名储存成一个独立的文字档) ,再连结使用。可使用多个<LINK>标记。如: <HTML>文件开始

    <HEAD>标头区开始<LINK TYPE=text/css REL=stylesheet HREF=s1.css>连结CSS档</HEAD>标头区结束

    <BODY>本文区开始
    本文区内容</BODY>本文区结束

    </HTML>文件结束

CSS 相关的HTML 标记、属性

CSS 相关的HTML 标记 :

  • <STYLE>…</STYLE> 设定Style Sheet 格式
  • <LINK> 连结指令
  • <DIV>…</DIV> 分离区段( 允许重叠显示 )
  • <SPAN>…</SPAN> 小区段范围

 CSS 相关的HTML 标记属性 :

  • STYLE = cssl-properties样式
  • ID = value代号
  • CLASS = classname种类
  • 样式表


    样式宣告的格式: 选择器{样式规则;}

    选择器(Selector):样式要套用的对象

    样式规则(Rule):样式设定的内容

    每个样式后要加 ;

    如H2 {COLOR:BLUE;}

    集中宣告格式

    同时宣告数个样式

    body {

        background:green ;

        color:blue ;

        font:12 ;

         font-family:新细明体 ;

    }

    也可以分开

    body {

        background:green ;

        color:blue ;

    }

    body {

        font:12 ;

         font-family:新细明体 ;

    }

    数个选择器宣告

    P, H1, H2 {

     color:red

    }

    将样式表用到网页上


    第一种用法是使用于HTML标签中的STYLE指令

    在每个HTML标签中,都可用STYLE参数,将CSS设定于后,

    例如︰ <DIV STYLE=”position:absolute; width:20px; height:20px”>

    这就是利用STYLE参数设定CSS,注意这个CSS字串要用引号括住。基本上CSS的指令都是一个性质名称对应一个值,再以分号分隔不同的性质名称。一次要用几个性质随需要而定,只要能达成任务就好

    第二种用法在<HEAD>与</HEAD>之间宣告

    宣告方式为使用<STYLE>……………..</STYLE>

    如下范例

    <HTML>

    <HEAD>

    <STYLE TYPE=”text/css”>————指明为CSS样式,另一种为text/javascript样式

    <!-​​-

      H1 { color:blue; }

    其他样式

    –>

    </STYLE>

    </HEAD>

    其他HTML内容

    所有的<H1>标签都会套用这个设定。

    如要许多标签都套用同一组设定,可用如下语法︰

    H1,H2,H3,FONT {color:#FF0000; font-family:Arial}

    这样所指定到的标签都会被套用此设定,中间只须读号隔开就可以了

    第三种用法,是写在<STYLE>标签中,但是并不套用于任何标签我们只先给它一个名字,将设定写好,想在某标签中套用时,再利用CLASS参数指定此名字,就可套用

    范例︰

    .mainUser {color:#0000AA; font-size:20px}

    这样就将这一组设定取名为mainUser。需要套用这一组设定时再于标签中用CLASS参数引入

    例如︰   <FONT>

    这样此标签就套用了我们设定的CSS了。

    接下来介绍一种进阶用法,如果我们只想让某个CSS只可被引入于某类型的标签,可用以下的方法︰

    SPAN.mainWin {color:#0000AA; font-size:20px}

    设定好此行后,「只有SPAN标签」可用CLASS参数套用此设定,其它不行。而且必需「用CLASS参数引入」后才会有作用,它不会自动套用于标签中。如下︰

    <SPAN>

    第四种用法,也是是写在<STYLE>标签中,但是这种用法会依据HTML中各标签的ID值,而自动的套用

    如:     #std {color:#FF0000; font-size:20px}

    上面这行,是指有任何HTML标签的ID值为std,就会套用此CSS。当然若ID不为std,就不会去套用它。如下面的标签,会自动套用此CSS︰

    <FONT ID=std>

    接下来介绍一种进阶用法,如果我们只想让某个CSS只可被引入于某类型的标签,可用以下的方法︰

    SPAN#std {color:#0000AA; font-size:20px}

    设定好此行后,「只有SPAN标签」中ID为std的标签会套用此设定,其它的标签,即使ID为std也不会套用。说明如下︰

    <SPAN ID=std>

    <DIV ID=std>

    在上面的例子,只有SPAN标签会套用此CSS,而DIV标签并不会套用。简单的说,这种方法是以ID决定套用的CSS。

    第五种使用方式为先建立好样式档,再连结

    先将样式内容打好存成*.CSS档

    然后以连结方式加入

    <Link REL=stylesheet TYPE=”text/css” HREF=”档名.css”>

    就可以将写好的*.css设定档引入网页中,要注意的是,此指令只能用在<HEAD>标签中。

    第六种方式为汇入档

    与第二种方式类似,先建好CSS样式档

    在HTML档中<STYLE>与</STYLE>之间加入

    @import URL(“样式档位址”) ;

    此指令只能用在<STYLE>标签中。这样做的好处是多份网页可共用同一份CSS设定档,不用每份网页重复一次。

    三种方式可以混合使用

    样式选择器


    类别选择器

    宣告类别选择器,可套用到不同标签上

    格式为   

    .类别名{ 样式1 ;

                     样式2 ;

                ……………

              }

    如下范例

    <HTML><HEAD>

    <STYLE TYPE= “text/css” >

    <!-​​-

    .BlueCenter { color : BLUE;

                          text-align:CENTER;

                         }

    –>

    </STYLE></HEAD>

    <BODY>

    <H3 CLASS= “BlueCenter”> 本段文字将设成蓝色、居中</H3>

    <H2 CLASS= “BlueCenter” 本段文字将设成蓝色、居中</H2>

    </BODY></HTML>

    也可将类别选择器套用在特定的标签使用

    <HTML><HEAD>

    <STYLE TYPE= “text/css” >

    <!-​​-

    H1.blue { color : BLUE } /* 宣告类别blue, 只让H1标签套用*/

    –>

    </STYLE></HEAD>

    <BODY>

    <H1 CLASS= “blue” 本段文字将设成蓝色</H1> <!–只有H1能套用–>

    </BODY>

    </HTML>

     

    ID选择器

     


     

    ID选择器只能套用一次,不像类别选择器可同时用在多个标签上

     

    格式

     

    #ID名称{ 宣告样式1 ; 宣告样式2 ; …………}

     

    例如

     

    <HTML><HEAD>

     

    <STYLE TYPE= “text/css” >

     

    <!-​​-

     

    #Red { color : RED }

     

    #Blue { color : BLUE }

     

    –>

     

    </STYLE></HEAD>

     

    <BODY>

     

    <H2 ID=”Red” 本段文字将设成红色</H2>

     

    <H1 ID=”Blue” 本段文字将设成蓝色 </H1>

     

    </BODY>

     

    </HTML>

     

    前后文选择器


    依特定状况而定的样式

    H1 EM { 样式内容 }

    例如

    H1 EM { COLOR:RED }

    <H1> 这是特别<EM>重要的字</EM></H1>

    重要的字会以EM的样式设定来呈现

    H1与EM间需以空格隔开,非逗号,样式后面无;

    段落属性的设定


    利用这些设定可以轻易的控制字距、行高、缩排、凸排、水平对齐、垂直对齐等。这些性质对网页设计的排版非常有用!

    LETTER-SPACING

    功能:设定文字间隙(可设单位属性:点pt、英寸in、公分cm、像素px )

    语法: { LETTER-SPACING : NORMAL︱( length ) }

    范例:   {LETTER-SPACING:10pt}

    此性质可设定字距,也就是字与字的间隔,只需指定一个长度单位给它,如cm、mm、in、pt、px、em、ex等等,或用normal特征字设为预设值。如letter-spacing=3px,则设定字距为3px。

    LINE-HEIGHT

    功能:设定文字行列高度(可设单位属性:点pt、英寸in、公分cm、像素px、百分比% )

    语法:   { LINE-HEIGHT : NORMAL︱( number )︱( length )︱( percentage ) }

    范例:   {LINE-HEIGHT:10pt}

    此性质可设定列高,可指定特征字normal设为预设值,或指定含单位的长度值,或百分比(参照于父元件)均可。如line-height:3px,则设定列高为3px。

    TEXT-ALIGN

    功能:设定调整文字(可设左边、右边、置中、整齐)

    语法: { TEXT-ALIGN : LEFT︱RIGHT︱CENTER︱JUSTIFY }

    范例: {TEXT-ALIGN:CENTER}

    这个性质可决定文句在区块内的水平对齐方式,可用值有left、right、center、justify。如text-align:center,则文字水平置中。

    TEXT-DECORATION

    功能:设定文字装饰(分为:无、加底线、加横线、加顶线)

    语法: { TEXT-DECORATION : NONE︱UNDERLINE︱LINE-THROUGH︱OVERLINE }

    范例: {TEXT-DECORATION:UNDERLINE}

    设定此区块内的字句要不要加装饰线,可用值有none(不加)、underline(加底线)、overline(加顶线)、line-through(加删除线)、blink(大致同none) 。如text-decoration:under-line,则文字加底线。

    TEXT-INDENT

    功能:设定文字缩排(可设单位属性:点pt、英寸in、公分cm、像素px、百分比% )

    语法:   { TEXT-INDENT : ( length )︱( percentage ) }

    范例:   {TEXT-INDENT:1cm}

    这个性质可设定段落的首行缩排(就像作文时一样,首行要缩排),可指定含单位的长度值,或是百分比值(参照于父元件)。如text-indent:24px,则缩排24px。

    TEXT-TRANSFORM

    功能:设定文字改变(可设无、第一个字母大写、大写、小写)

    语法:   { TEXT-TRANSFORM : NONE︱CAPITALIZE︱UPPERCASE︱LOWERCASE }

    范例:   {TEXT-TRANSFORM:CAPITALIZE}

    设定英文字母大小写显示法。可用值有none(不自动转换)、capitalize(第一个字母自动转为大写)、uppercase(全部自动转换为大写)、lowercase(全部自动转换为小写)。如text-transform:lowercase,则全部英文字都会自动转为小写。

    text-autospace

    这是用来调整字距的性质,用来设定是否于特定位置加大空白间距,以增加美观。可用特征字有none(不使用)、ideograph-alpha(于远东语系与拼音语系间加大空白)、ideograph-numeric(于远东语系与数字间加大空白)、ideograph-parenthesis(于远东语系与括号间加大空白)、ideograph-space(远东语系之两旁加大空白)。一般很少有人用这个性值,通常是text-autospace:none。

    text-justify

    设定段落中各句如何调整,使段落左右之边界对齐。可用值有inter-word(利用调整字距)、newspaper(利用调整字距或字母间距)、distribute(与newspaper很像,但最适用于东亚)、distribute-all-lines(连最后一行也调整至同宽,一般不会用这个值)、inter-ideograph(利用增加或减少字距来调整)、auto(由浏览器语系决​​定)。这个性质要IE5.0以上才能使用,一般都用text-justify:auto。

    word-break

    设定一行结束时的断字法,可用值有normal(允许断字)、break-all(允许断字,适用于大量中文夹杂少量英文)、keep-all(只允许于英文断字,适用于大量英文夹杂少量中文)。一般用word-break:break-all较适于中文字。

    背景属性设定


    背景性质设定可说是CSS最强悍的地方,有了这些CSS,我们甚至可以在一段文字,或一格表格中,套用不同的背景。

    <HTML> 
    <HEAD> 
     <STYLE> 
       SPAN {position:absolute;border:solid 1px black;width:300px;height:100px} 
       SPAN.front {position:absolute; background :url(../Graph/001.jpg) repeat} 
       SPAN.back {position:absolute; background :url(../Graph/002.jpg) repeat} 
       SPAN SPAN {position:absolute;width:200;font:bold 50px Arial;border:none} 
     </STYLE> 
    </HEAD> 
    <BODY> 
     <SPAN STYLE=”top:20px;left:20px”></SPAN> 
     <SPAN STYLE=”top:0px;left:0px”> 
       <FONT STYLE=” color:gray;top:25px;left:57px”>SCJH</FONT> 
       <FONT STYLE=”color:blue;top:18px;left:50px”>SCJH</FONT> 
     </SPAN> 
    </BODY> 
    < /HTML>

    BACKGROUND

    功能:设定背景图片、颜色、混合、透空、卷动、位置、重复

    语法:
    { BACKGROUND : TRANSPARENT︱( scroll )︱( color )︱URL ( url )︱( position )︱( repeat ) }

    BACKGROUND-ATTACHMENT

    功能:设定背景图片是否卷动(分为:卷动、固定)

    语法:   { BACKGROUND-ATTACHMENT : SCROLL︱FIXED }

    BACKGROUND-COLOR

    功能:设定背景颜色、透空

    语法:   { BACKGROUND-COLOR : TRANSPARENT︱( color ) }

    ( color ) 可为颜色名称( 16种) 或16进制表示法- #RRGGBB ( 00暗~FF亮) 、#RGB ( 0暗~F亮) 表红绿蓝强度

    范例:   {BACKGROUND-COLOR:#FF0000}

    BACKGROUND-IMAGE

    功能:设定背景图片

    语法:   { BACKGROUND-IMAGE : NONE︱URL ( url ) }

    范例:   {BACKGROUND-IMAGE:URL(1.JPG)}

    BACKGROUND-POSITION

    功能:设定背景位置(可设单位属性:点pt、英寸in、公分cm、像素px、百分比% )

    语法:
    { BACKGROUND-POSITION : TOP︱MIDDLE︱BOTTOM︱LEFT︱CENTER︱RIGHT︱( length )︱( position ) }

    BACKGROUND-REPEAT

    功能:设定背景重复填满方式

    语法:   { BACKGROUND-REPEAT : REPEAT︱REPEAT-X︱REPEAT-Y︱NO-REPEAT }

    邊框屬性設定


    在CSS中,幾乎所有的元件都可以使用框線設定,不像HTML般,只有表格才可使用框線。我們不但可任意控制框線粗細、顏色,就連框線的形式都可以設定。

    BORDER

    功能:设定边框

    语法:   {BORDER:(边框宽度)︱(边框样式)︱(彩色)}

    ( border-width ) – 可設薄、普通、厚、長度-單位屬性 : 點pt、英寸in、公分cm、像素px
    ( border-style ) – 可設無、實線、雙線、溝線、脊線、嵌入線、浮出線
    ( color ) – 可設為顏色名稱 ( 16種 ) 或16進制表示法 – #RRGGBB ( 00暗~FF亮 ) 、#RGB ( 0暗~F亮 ) 表紅綠藍強度

    范例: {BORDER:厚双层红色}

    BORDER-BOTTOM 

    功能 : 設定下邊框

    语法:   {BORDER-BOTTOM:(底部边框宽度)︱(边框样式)︱(彩色)}

    范例  :{BORDER-BOTTOM:GROOVE#00FF00}

    BORDER-BOTTOM-COLOR

    功能 : 設定下邊框顏色,可設為顏色名稱 ( 16種 ) 或16進制表示法 – #RRGGBB ( 00暗~FF亮 ) 、#RGB ( 0暗~F亮 ) 表紅綠藍強度

    语法:   {BORDER-BOTTOM-COLOR(色彩)}

    范例  :{BORDER-BOTTOM-COLOR:BLUE}

    BORDER-BOTTOM-STYLE

    功能 : 設定下邊框樣式 ( 可設無、實線、雙線、溝線、脊線、嵌入線、浮出線 )

    语法  :{BORDER-BOTTOM-STYLE:NONE︱固体︱双︱INSET︱︱GROOVE︱RIDGE OUTSET}

    范例:   {BORDER-BOTTOM-STYLE:输入}

    BORDER-BOTTOM-WIDTH

    功能 : 設定下邊框寬度 ( 可設薄、普通、厚、長度-單位屬性 : 點pt、英寸in、公分cm、像素px )

    语法:   {BORDER-BOTTOM-WIDTH:薄︱中︱厚︱(长度)}

    范例  :{BORDER-BOTTOM-WIDTH:1厘米}

    BORDER-COLOR

    功能 : 設定邊框顏色,可設為顏色名稱 ( 16種 ) 或16進制表示法 – #RRGGBB ( 00暗~FF亮 ) 、#RGB ( 0暗~F亮 ) 表紅綠藍強度

    语法:   {BORDER-COLOR(色彩)}

    范例  :{BORDER-COLOR:#FFFF00}

    BORDER-LEFT

    功能 : 設定左邊框

    语法:   {BORDER-LEFT:(左边框宽度)︱(边框样式)︱(彩色)}

    范例  :{BORDER-LEFT:薄OUTSET}

    BORDER-LEFT-COLOR

    功能 : 設定左邊框顏色,可設為顏色名稱 ( 16種 ) 或16進制表示法 – #RRGGBB ( 00暗~FF亮 ) 、#RGB ( 0暗~F亮 ) 表紅綠藍強度

    语法:   {BORDER-LEFT-COLOR(色彩)}

    范例  :{BORDER-LEFT-COLOR:#00FF00}

    BORDER-LEFT-STYLE

    功能 : 設定左邊框樣式 ( 可設無、實線、雙線、溝線、脊線、嵌入線、浮出線 )

    语法  :{BORDER-LEFT-STYLE:NONE︱固体︱双︱INSET︱︱GROOVE︱RIDGE OUTSET}

    范例  :{BORDER-LEFT-STYLE:RIDGE}

    BORDER-LEFT-WIDTH

    功能 : 設定左邊框寬度 ( 可設薄、普通、厚、長度-單位屬性 : 點pt、英寸in、公分cm、像素px )

    语法  :{BORDER-LEFT-WIDTH:细︱MEDIUM︱︱厚(长)}

    范例:   {BORDER-LEFT-WIDTH:厚}

    BORDER-RIGHT

    功能 : 設定右邊框

    语法:   {BORDER-RIGHT:(边界右宽)︱(边框样式)︱(彩色)}

    范例  :{BORDER-RIGHT:10PT#00A}

    BORDER-RIGHT-COLOR

    功能 : 設定右邊框顏色,可設為顏色名稱 ( 16種 ) 或16進制表示法 – #RRGGBB ( 00暗~FF亮 ) 、#RGB ( 0暗~F亮 ) 表紅綠藍強度

    语法:   {BORDER-RIGHT-COLOR(色彩)}

    范例  :{BORDER-RIGHT-COLOR:#00F}

    BORDER-RIGHT-STYLE

    功能 : 設定右邊框樣式 ( 可設無、實線、雙線、溝線、脊線、嵌入線、浮出線 )

    语法
    {BORDER-RIGHT-STYLE:NONE︱固体︱双︱GROOVE︱RIDGE︱INSET︱OUTSET}

    范例
    {BORDER-RIGHT-STYLE:GROOVE}

    BORDER-RIGHT-WIDTH

    功能 : 設定右邊框寬度 ( 可設薄、普通、厚、長度-單位屬性 : 點pt、英寸in、公分cm、像素px )

    语法:   {BORDER-RIGHT-WIDTH:薄︱中︱︱厚(长)}

    范例  :{BORDER-RIGHT-WIDTH:10px的}

    边框样式

    功能 : 設定邊框樣式 ( 可設無、實線、雙線、溝線、脊線、嵌入線、浮出線 )

    语法  :{BORDER-STYLE:NONE︱固体︱双︱GROOVE︱RIDGE︱INSET︱OUTSET}

    范例:   {BORDER-STYLE:双}

    BORDER-TOP

    功能 : 設定上邊框

    语法:   {BORDER-TOP:(边境顶端宽度)︱(边框样式)︱(彩色)}

    范例:   {BORDER-TOP:1英寸的黄色}

    BORDER-TOP-COLOR

    功能 : 設定上邊框顏色,可設為顏色名稱 ( 16種 ) 或16進制表示法 – #RRGGBB ( 00暗~FF亮 ) 、#RGB ( 0暗~F亮 ) 表紅綠藍強度

    语法:   {BORDER-TOP-COLOR(色彩)}

    范例  :{BORDER-TOP-COLOR:RED}

    BORDER-TOP-STYLE

    功能 : 設定上邊框樣式 ( 可設無、實線、雙線、溝線、脊線、嵌入線、浮出線 )

    语法  :{BORDER-TOP-STYLE:NONE︱固体︱双︱INSET︱︱GROOVE︱RIDGE OUTSET}

    范例  :{BORDER-TOP-STYLE:SOLID}

    BORDER-TOP-WIDTH

    功能 : 設定上邊框寬度 ( 可設薄、普通、厚、長度-單位屬性 : 點pt、英寸in、公分cm、像素px )

    语法:   {BORDER-TOP-WIDTH:薄︱中︱︱厚(长)}

    范例  :{BORDER-TOP-WIDTH:THIN},

    边框宽度

    功能 : 設定邊框寬度 ( 可設薄、普通、厚、長度-單位屬性 : 點pt、英寸in、公分cm、像素px )

    语法:   {BORDER-WIDTH:厚薄︱MEDIUM︱︱(长度)}

    范例:   {BORDER-WIDTH:10PT}

    崇光百货范式

    中<SCRIPT LANGUAGE=”JavaScript”> 功能的变化(指数)  {  index.style.borderStyle =“插入”;  index.style.color =“蓝色”;  } 功能    {位置:绝对的;边界:一开始就  STYLE =“顶:5像素,左:5PX”的的onmouseover =更改(这)    鑻重新改变(这)> HTML </ SPAN>  <跨越式=“顶部:35px;左:5PX”的的onmouseover =更改(这)    鑻=重新改变(这)> CSS </ SPAN>  <跨越式=“:65px;左起:5PX”的onmouseover =更改(这)    鑻重新改变(这)>的JScript </ SPAN>  <跨越式=“顶:95px;左:5PX“的的onmouseover =更改(这)    鑻重新改变(这)>的Java </ SPAN>  <跨越式=“顶部:125px;左:5PX”的的onmouseover =更改(这)    鑻重新改变(这)> CGI / SPAN>  <跨越式=“155px;左:5PX”的的onmouseover =更改(这)    鑻=(本)重新改变ASP </ SPAN> </ BODY> </ HTML>

    区块属性设定


    区块是指用<DIV>、<SPAN>等标签所建立出的逻辑区域,或是图形、表格等均可称之为区块。在DHTML中,使用区块是非常频繁的,所以区块设定就显得非常有用。

    CLEAR

    功能:设定浮动元件位置(可设无、左边、右边、两边)

    语法:   { CLEAR : NONE︱LEFT︱RIGHT︱BOTH }

    范例:   {CLEAR:LEFT}

    CLIP

    功能:剪辑可见部份

    语法:   { CLIP : AUTO︱( shape ) }

    ( shape ) – RECT ( top ) ( rig​​ht ) ( bottom ) ( left )

    这个性质可决定区块的哪些范围是可视的,而元件在此设定范围外是不可视的。我们必需指定一个矩形区域给它,依序为上、右、下、左座标,而座标原点是此元件的左上角。例如我们可用clip:rect(0,100,100,0),则从(0,0)至(100,100)间都是可视的,此元件在这范围外就看不到了。

    CURSOR

    功能:设定滑鼠游标(可设自动、十字、箭头、手形、移动、改变-双箭头、文字、等待、求助)

    语法:
    { CURSOR : AUTO︱CROSSHAIR︱DEFAULT︱HAND︱MOVE︱E-RESIZE︱NE-RESIZE︱NW-RESIZE︱N-RESIZE︱SE-RESIZE︱SW-RESIZE︱S-RESIZE︱W-RESIZE︱TEXT︱WAIT ︱HELP }

    DISPLAY

    功能:设定是否显示

    语法:   { DISPLAY : NONE }

    这个性质可设定整个元件要不要显示,以及显示的方式。它可用的参数这里一一介绍。none代表不显示,且此元件不占任何空间。block代表显示,并视为区块,前后紧临的元件将换行显示。inline代表显示,但前后紧临的元件会排在其左右,并不会换行。list-item代表显示,与block大致相同。table-header-group只能用在<THEAD>(不知道这个新标签请至RONDO的HTML教学看看),代表表格在多页时(如列印),此区之表格将会自动加在有此表格之页面的第一列。table-header-group与table-footer-group相似,但用于<TFOOT>,作用是表格在多页时,此区之表格将会自动加在有此表格之页面的最末列。IE4.0不支援block、inline、list-item这三种设定。使用范例如display:none此元件就被隐藏了

    FLOAT

    功能:设定浮动元件接续位置

    语法:   { FLOAT : NONE︱LEFT︱RIGHT }

    HEIGHT

    功能:设定元件高度(可设单位属性:点pt、英寸in、公分cm、像素px、百分比% )

    语法:   { HEIGHT : AUTO︱( length )︱( percentage ) }

    范例:   {HEIGHT:10pt}

    @IMPORT

    功能:设定输入排版样式

    语法:   @IMPORT URL ( url )

    LEFT

    功能:设定元件左边位置(可设单位属性:点pt、英寸in、公分cm、像素px、百分比% )

    语法:   { LEFT : AUTO︱( length )︱( percentage ) }

    LIST-STYLE

    功能:设定条列项目符号

    语法:   { LIST-STYLE : KEYWORD︱POSITION︱URL ( url ) }

    LIST-STYLE-IMAGE

    功能:设定图片为条列项目符号

    语法:   { LIST-STYLE-IMAGE : NONE︱URL ( url ) }

    LIST-STYLE-POSITION

    功能:设定条列项目符号位置(可设内部、外部)

    语法:   { LIST-STYLE-POSITION : INSIDE︱OUTSIDE }

    LIST-STYLE-TYPE

    功能:设定条列项目符号形状(可设无、圆形、圆圈、正方形、小数点、罗马符号、希腊符号)

    语法:
    { LIST-STYLE-TYPE : NONE︱DISK︱CIRCLE︱SQUARE︱DECIMAL︱LOWER-ROMAN︱UPPER-ROMAN︱LOWER-ALPHA︱UPPER-ALPHA }

    MARGIN

    功能:设定文字和边缘距离(可设单位属性:点pt、英寸in、公分cm、像素px、百分比% )

    语法:   { MARGIN : AUTO︱( length )︱( percentage ) }

    这个性质一次设定上、下、左、右边界与区块外之元件间格距离。使用时应依序指定上、右、下、左,如margin:3px 2px 5px 1px。亦可一次指定四边,如margin:2px,则全部均设2px。

    MARGIN-BOTTOM

    功能:设定文字和下边缘距离(可设单位属性:点pt、英寸in、公分cm、像素px、百分比% )

    语法:   { MARGIN-BOTTOM : AUTO︱( length )︱( percentage ) }

    MARGIN-LEFT

    功能:   设定文字和左边缘距离(可设单位属性:点pt、英寸in、公分cm、像素px、百分比% )

    语法:   { MARGIN-LEFT : AUTO︱( length )︱( percentage ) }

    MARGIN-RIGHT

    功能:设定文字和右边缘距离(可设单位属性:点pt、英寸in、公分cm、像素px、百分比% )

    语法:   { MARGIN-RIGHT : AUTO︱( length )︱( percentage ) }

    MARGIN-TOP

    功能:设定文字和上边缘距离(可设单位属性:点pt、英寸in、公分cm、像素px、百分比% )

    语法:   { MARGIN-TOP : AUTO︱( length )︱( percentage ) }

    OVERFLOW

    功能:设定容器元件显示方法

    语法:   { OVERFLOW : NONE︱CLIP︱SCROLL }

    这个性质是设定当区块内包含的元件大于区块之宽或高时,显示的方法。可用值有auto(自动设定,当需要时出现卷轴)、scroll(强迫显示卷轴,即使内部元件并无超过区块边界)、hidden(超出区块的部份不显示)、visible(全部显示,无视区块大小)。最常用的是overflow:auto让浏览器自动判断

    PADDING

    功能:设定元件和边缘距离(可设单位属性:点pt、英寸in、公分cm、像素px、百分比% )

    语法:   { PADDING : ( length )︱( percentage ) }

    这个性质一次设定上、下、左、右边界的间格距离。使用时应依序指定上、右、下、左,如padding:3px 2px 5px 1px。亦可一次指定四边,如pa​​dding:2px,则全部均设2px。

    PADDING-BOTTOM

    功能:   设定元件和下边缘距离(可设单位属性:点pt、英寸in、公分cm、像素px、百分比% )

    语法:   { PADDING-BOTTOM : ( length )︱( percentage ) }

    PADDING-LEFT

    功能:设定元件和左边缘距离(可设单位属性:点pt、英寸in、公分cm、像素px、百分比% )

    语法:   { PADDING-LEFT : ( length )︱( percentage ) }

    PADDING-RIGHT

    功能:   设定元件和右边缘距离(可设单位属性:点pt、英寸in、公分cm、像素px、百分比% )

    语法:   { PADDING-RIGHT : ( length )︱( percentage ) }

    PADDING-TOP

    功能:设定元件和上边缘距离(可设单位属性:点pt、英寸in、公分cm、像素px、百分比% )

    语法:   { PADDING-TOP : ( length )︱( percentage ) }

    PAGE-BREAK-AFTER

    功能:设定元件后加分页符号

    语法:   { PAGE-BREAK-AFTER : AUTO︱LEFT︱RIGHT︱ALWAYS }

    PAGE-BREAK-BEFORE

    功能:设定元件前加分页符号

    语法:   { PAGE-BREAK-BEFORE : AUTO︱LEFT︱RIGHT︱ALWAYS }

    POSITION

    功能:设定元件位置(可设绝对、相对、静态)

    语法:   { POSITION : ABSOLUTE︱RELATIVE︱STATIC }

    TOP

    功能:设定元件上方位置(可设单位属性:点pt、英寸in、公分cm、像素px、百分比% )

    语法:   { TOP : AUTO︱( length )︱( percentage ) }

    VERTICAL-ALIGN

    功能:元件垂直调整

    语法:   { VERTICAL-ALIGN : BASELINE︱MIDDLE︱SUB︱SUPER︱TEXT-TOP︱TEXT-BOTTOM︱TOP︱BOTTOM }

    VISIBILITY

    功能:设定是否可见(可设可见、隐藏、继承)

    语法:   { VISIBILITY : VISIBLE︱HIDDEN︱INHERIT }

    设定此元件要不要显示,这个性质与display有相似之处,但不相同。可用值有visible(显示)、inherit(贴附,如此元件所在之父元件可见,则此元件为可见,反之亦然)、hidden(隐藏,但仍占有空间,此与display:none不同)。用法如visibility:hidden则可隐藏此元件。

    WIDTH

    功能:设定元件宽度(可设单位属性:点pt、英寸in、公分cm、像素px、百分比% )

    语法:   { WIDTH : AUTO︱( length )︱( percentage ) }

    此性质可设定区块的宽度,可用单位或百分比法来指定其值,或是用特征字auto。如width:30px或width:50%均是可行的方法,而width:auto代表让浏览器帮你决定。至于百分比法是依据其父元件的大小来决定的。

    Z-INDEX

    功能:设定Z轴参数(正数为上方,负数为下方)

    语法: { Z-INDEX : NUMBER }

    所谓CSS之2.5D摆设就靠这个性质,当有很多元件重叠时(如position:absolute就会发生),拥有较大z-index值的元件会摆在上面,此值可正可负。如z-index:3会摆在z-index:2的元件之上。

    Anchor Pseudo Classes–连结属性设定


    A:link连结点

    范例: 
    A:link {FONT:ITALIC细明体12pt RED}

    A:visited浏览过连结点

    范例: 
    A:visited {FONT:ITALIC细明体12pt RED}

    A:hover移至连结点

    范例: 
    A:hover {FONT:ITALIC细明体12pt RED}

    A:active选取连结点

    范例: 
    A:active {FONT:ITALIC细明体12pt RED}

    定位设定


    position性质

    这个性质是设定元件的摆放方式,我们可依据需要来设定适当的值。可用的属性值有︰ absolute(绝对定位)、relative(相对定位)、static(静态定位)所谓position:absolute就是指元件定位法是以父元件(通常就是此网页)的绝对座标来定位(原点为父元件左上角)。而position:relative是指让此元件以一般网页排列方式决定位置后,再以此点为相对座标定位。至于position:static是如同旧式浏览器般,以一般网页排列方式决定位置,并且不能再加以定位。这个属性设定将会影响座标系统的原点。absolute原点为父元件左上角、relative原点为应有之自然位置、static不可用座标系统。通常用了这个属性后,要配合top、left属性来决定元件位置。

    top性质

    经由position性质设定后,会决定出一个座标系统,再由top性质来决定此元件有要摆放的垂直位置。属性值为一测量长度,可用如in、cm、mm、pt、pc、em、en、ex、px等单位,但建议各位用px这个单位(因为萤幕一格就是1px)。如top=20px,则会依座标系统将此元件摆放在原点下方+20px的位置(当然,position:relative与position:absolute所得的结果会不同)。注意,可以指定负值!

    left性质

    这个性质决定元件的水平位置,当然座标系统还是依position之设定而变。例如left:30px,则将此元件摆放到座标原点左方+30px的地方。

    综合应用

    <HTML> 
    <HEAD> 
     <STYLE> 
       SPAN {position:absolute;font-size:50px;font-family:Arial;font-weight:700} 
       SPAN.small {font-size:40px;color:red} 
     </STYLE > 
    </HEAD> 
    <BODY> 
     <SPAN STYLE=”top:5px;left:5px;color:gray”>SCJH</SPAN> 
     <SPAN STYLE=”top:0px;left:0px;color:blue”>SCJH </SPAN> 
     <SPAN STYLE=”top:24px;left:100px”>CSS</SPAN> 
    </BODY> 
    </HTML>

    文字属性的设定


    文字设定可设定文字的颜色、大小、字型、粗细

    <HTML> 
    <HEAD> 
     <STYLE> 
       SPAN {position:relative;font-size:50px;font-family:Arial;font-weight:700} 
       SPAN.c1 {color:red} 
       SPAN.c2 {color:blue} 
       SPAN .c3 {color:green} 
       SPAN.c4 {color:pink} 
       SPAN.c5 {color:gold} 
     </STYLE> 
    </HEAD> 
    <BODY> 
     <SPAN>S</SPAN> 
     <SPAN >C</SPAN> 
     <SPAN>J</SPAN> 
     <SPAN>H</SPAN> 
     <SPAN>!!!</SPAN> 
    </BODY> 
    </HTML>

    COLOR

    功能:设定文字颜色

    语法: { COLOR : ( color ) }

    ( color ) 可为颜色名称( 16种) 或16进制表示法- #RRGGBB ( 00暗~FF亮) 、#RGB ( 0暗~F亮) 表红绿蓝强度

    颜色名称 :

    RED MAROON YELLOW OLIVE
    GREEN LIME BLUE TEAL
    PURPLE FUCHSIA NAVY AQUA
    BLACK SILVER GRAY WHITE

    范例:
    P {COLOR:RED} 
    P {COLOR:#FF0000} 
    P {COLOR:#F00}

    FONT

    功能:设定字体样式、大小写变化、粗细、大小、文字行列高度、字型

    语法:
    { FONT : ( font-style )︱( font-variant )︱( font-weight )︱( font-size )︱( font-family )︱/ ( line-height ) }

    范例:   H1 {FONT:ITALIC BOLD细明体12pt/18pt}

    @FONT-FACE

    功能:下载字型

    语法: @FONT-FACE { FONT-FAMILY : ( font-family ) ; SRC : URL ( url ) }

    FONT-FAMILY

    功能: ‧设定字型组(字型名称若为两个英文单字以上需加引号” ” ) -常用字型组( Arial、Arial Black、Comic Sans MS、Times New Roman )

    语法:   { FONT-FAMILY : ( font-name )︱( generic-family ) }

    范例:
    {FONT-FAMILY:Arial,Bedrock} 
    {FONT-FAMILY:”Arial Black”}

    FONT-SIZE

    功能:设定字体大小 (可设单位属性:点pt、英寸in、公分cm、像素px、百分比% )

    语法: { FONT-SIZE : LARGE︱MEDIUM︱SMALLER︱( length )︱( percentage ) }

    范例:
    {FONT-SIZE:LARGE} 
    {FONT-SIZE:10pt} 
    {FONT-SIZE:50%}

    FONT-STYLE

    功能:设定字体样式 (分为:正常、斜体)

    语法: { FONT-STYLE : NORMAL︱ITALIC }

    范例: {FONT-STYLE:ITALIC}

    FONT-VARIANT

    功能:设定字体变化 (分为:正常、小字体)

    语法: { FONT-VARIANT : NORMAL︱SMALL-CAPS }

    范例: {FONT-VARIANT:SMALL-CAPS}

    FONT-WEIGHT

    功能:设定字体粗细 (分为:正常、粗字体)

    语法: { FONT-WEIGHT : NORMAL︱BOLD }

    范例: {FONT-WEIGHT:BOLD}









WordPress 主题制作教程

 

WordPress 主题教程
WordPress 主题教程 #1:介绍

基本规则:

专业术语:

层式结构:

WordPress 主题教程 #2:模板文件和模板

Header 模板文件:

Index 模板文件:

Sidebar 模板文件

Footer 模板文件:

WordPress 主题教程 #3:开始 Index.php

第1步:打开 XAMPP 控制面板

第2步:创建你的主题文件夹

第3步:创建 index.php 和 style.css 文件

第4步:创建 style.css

第5步:安装你的主题

WordPress 主题教程 #4a:Header 模板

第1步:打开 XAMPP 和主题文件夹

第2步:打开 index.php

第3步:调用博客标题

第4步:调用博客链接

WordPress 主题教程 #4b:Header 模板 2

第1步:开启 XAMPP 和打开 index.php

第2步:给博客的标题添加 H1 的标签

第3步:添加博客描述

第4步:DIV 标签

第5步:添加 Header DIV 标签

WordPress 主题教程 #5:主循环

第1步:创建 container Div

第2步:输入主循环代码

第3步:调用日志标题

第4步:给日志标题加上链接

WordPress 主题教程 #5b:日志内容

第1步:使用 the_content() 函数显示日志内容

第2步:DIV 标签把博客日志的内容和标题区分开

WordPress 主题教程 #5c:日志元数据

WordPress 主题教程 #5d:Else,日志 ID,链接标题

第1步:Else

第2步:日志 ID

第3步:链接标题

WordPress 主题教程 #5e:日志导航链接

WordPress 主题教程 #6:侧边栏

第1步:创建 id 为 “sidebar” 的 DIV

第2步:给侧边栏的 DIV 添加无序列表

第3步:给这个无序列表添加原属

第4步:添加分类链接列表

WordPress 主题教程 #6b:页面链接列表

WordPress 主题教程 #6c:存档和链接列表

第1步 – 增加存档链接列表

第2步:增加友情链接列表

WordPress 主题教程 #6d:搜索框和日历

第1步:增加搜索框

第2步:增加日历

第3步:增加元数据

WordPress 主题教程 #6e:窗体化侧边栏

第1步:创建 functions.php 文件

第2步:窗体化侧边栏

WordPress 主题教程 #7:尾部

第1步:增加个 DIV 标签

第2步:添加版权信息

WordPress 主题教程 #8:验证 XHTML

WordPress 主题教程 #9:Style.css 和 CSS 介绍

第1步:打开 style.css 文件

第2步:添加 CSS 代码

WordPress 主题教程 #10:十六进制颜色代码和样式化链接

十六进制代码

第1步:添加链接颜色

第2步:添加链接悬停颜色

WordPress 主题教程 #11:宽度和布局

第1步:设置页面总体宽度

第2步:自动页面居中

第3步:设置 header 宽度和布局

第4步:设置 Container 宽度和布局

第5步:设置 Sidebar 宽度和布局

第6步:设置 Footer 的宽度和布局

第7步:给侧边栏增加其余的 10 像素

第8步(额外的步骤):修正 IE 的双倍页边距 bug

WordPress 主题教程 #12:日志样式化和其他杂项

第1步:Reset CSS

第2步:样式化 H1 标题

第3步:样式化日志

第4步:设置日志段落填充

第5步:样式化日志杂项

第6步:样式化导航栏

WordPress 主题教程 #13:样式化侧边栏

第1步:样式化侧边栏的无序列表

第2步:给 LI 添加填充

第3步:样式化侧边栏下的子标题

第4步:清除子 UL 下的 LI 填充

第5步(可选的):扩展日历宽度到整个侧边栏

WordPress 主题教程 #14:底部和拆分 Index

第1步:样式化 footer

第2步:设置 footer P 的行距

第3步:header.php

第4步:在 index.php 中导入 header.php

第5步:sidebar.php

第6步:footer.php

教程回顾

WordPress 主题教程 #15:子模板文件

第1步:archive.php

第2步:search.php

第3步:page.php 和 single.php

第4步:定制 page.php

第5步:定制 single.php

课程回顾

WordPress 主题教程 #16:留言模板

第1步:创建 comments.php

第2步:样式化留言

第3步:在 single.php 添加留言模板

第4步:验证代码

评论模板的进一步解释

erdaoo 的 WP Theme 教程学习笔记

WP 主题简介

index.php

class

Not Found

页面导航

侧边栏

其他文件

 

 

WordPress 主题教程:从零开始制作 WordPress 主题

从零开始制作 WordPress 主题其实不难,只要你从现在开始认真阅读这个教程,一步一步认真学习,你就会成为一个 WordPress 主题制作高手。至少你会修改现有主题。

网络上已经有很多关于制作 WordPress 主题的教程,并且WordPress 官方网站上也有指导文章。但是当你不懂这方面的术语的话,这些教程可能不一定会帮助你,甚至还会误导你,所以这个教程会真正从零开始教你如何创建 WordPress 主题。

创建 WordPress 主题所需的工具和准备

开始真正制作主题之前,你需要使用到下面这些工具:

• 为了测试方便和快速,你首先需要在本地安装 WordPress,至于如何在Windows 系统上安装 WordPress,你可以参考这篇日志:在 WordPress 本地安装 WordPress。

• 如果由于某种原因不能在本地安装 WordPress,那么你也可以的服务器上安装一个测试版的 WordPress。这个时候你必须要有一个支持 WordPress 主机的服务器,一般我使用 LAMP 主机(Linux+Apache+MySQL+PHP)主机,Win+IIS 主机可能会有很多问题,调试也比较麻烦,而 LAMP 主机,从我个人使用经验来说,我推荐(MT) Media Temple 主机。

• 代码编辑工具,如 NotePad++ 或者 Vim 都可以,主要是适合自己个人使用习惯。

• FTP 工具,用于上传主题到服务器上测试,这方面的工具很多,如 Filezilla,SmartFTP 等,如果你先安装软件麻烦(对啊,现在是云计算时代,谁还装软件),你也可以安装Firefox 的 FTP 扩展,Fireftp,直接在 Firefox 中上传文件到服务器上。

• XHTML 验证器和CSS 验证器。你将需要这些工具去验证你的主题是否符合XHTML 和 CSS 标准,并且可以使用它查出奇正错误的地方。这篇就介绍到这里,主要介绍了制作 WordPress 主题所需的工具和应该做哪些准备,下面就开始要了解和开始制作 WordPress 主题。

 

 

WordPress 主题教程 #1:介绍

WordPress 主题教程 #1:介绍是从零开始创建 WordPress 主题系列教程的第一篇。

从零开始制作 WordPress 主题的教程不会一次就教会你所有的东西,那样也是不可能的,这个教程也不是 WordPress 主题制作的参考,我所做的是一步一步从零开始教你如何制作 WordPress 主题,所以一定要耐心。所以这一篇介绍首先是 WordPress 主题制作的一个最基本的介绍。这里会涉及到HTML 和 WordPress 的基本规则,一些专业术语,以及 WordPress 主题的层式结。这些概念是很重要的,在接下来教程的很多地方都会涉及到,所以开始之前一定要搞清楚。

基本规则:

• 规则 #1:以正确顺序关闭所有 HTML 标签。
在上图中在错误关闭标签的演示中,关闭的ul 标签是不按次序的。

每个 HTML 标签都是在< 和> 中,如果有斜线/,则说明这个标签是开始标签,没有则是结束标签。如:<> 是开始标签,而</> 是结束标签。

在上面的例子中,使用ul(无序列表)li (列表元素)标签。注意li 的开始和结束标签在ul 的开始和结束标签的里面,这就是标签正确嵌套方式。

• 规则 #2:每个主题至少要有这两个文件 – style.css 和index.php。index.php告诉主题中所有的元素如何布局,style.css 则告诉主题中所有的元素该如何展示和样式。下面是一个完整的主题含有的文件列表(现在我们不用详细了解这个列表每个文件的意思,有个这样的印象就可以了):

◦ style.css

◦ index.php

◦ home.php

◦ single.php

◦ page.php

◦ archive.php

◦ category.php

◦ search.php

◦ 404.php

◦ comments.php

◦ comments-popup.php

◦ author.php

◦ date.php

专业术语:

• Template(模板) — 其实就是一个代码集,主题中很多地方会利用到这个代码集,所以把它们整合成一个模板,这样就就不必一遍遍输入这些重复代码。

• Template file(模板文件) — 一个包含一个或者多个代码集(模板)文件。每个主题是由多个模板文件组成的,如:index.php,style.css,sidebar.php等等。

• Theme(主题)或者 WordPress theme(WordPress 主题) — 所有你正在使用的文件:文本,图像,代码等等。注意: WordPress theme(主题)和WordPress template(s)(模板)是两个不同的东西,尽管有些人认为他们一样。

• Post(日志) — 现在你读的就是一篇日志。此外,它是你 blog 的一个简单的条目,如:一个页面或者一篇日记。

• Page(静态页面) — 一种特殊的 post,它不是以分类组织的。它有别于你其他的日志。注意:在 WordPress,page(页面)和 Page(静态页面)是两种不同的东西。

层式结构:

下图就是 WordPress 的层式结果,它简单的向你展示,一旦你主题中的某个文件丢失了,WordPress 主题系统将会寻找什么模板文件来代替。这里列出了 6 个文件而不是完整的 13 个,因为这 6 个是相对更重要一些,不过在接下来的教程中,余下的文件也都涉及到。
我们可以通过上面这张图的所处位置知道各个主题文件的重要性,越靠左越重要。

这里可能大家有个疑问,为什么会存在 WordPress 模板文件的层式结构,或者说是重要性级别呢?因为 WordPress 利用这个层式结构去寻找相应的模板文件显示页面,并且在相应的文件丢失之后如何处理。

如果 archive.php 模板文件(用来显示存档页面)丢失了,那么 WordPress 将会使用index.php 来控制存档页面如何显示。

如果 single.php 模板文件丢失了呢,哪个模板文件它会去寻找用来显示单一日志呢?它会寻找 index.php。
WordPress 主题教程 #2:模板文件和模板

模板文件(template files)和模板(template)是从零开始创建 WordPress 主题系

列教程的第二篇。开始之前,你要确保你已经看过WordPress 主题教程 #1:介绍,

否则你将无法理解在教程 #2 中使用的名词。

在WordPress 主题教程 #1:介绍中,我们已经学过了 WordPress 的两条基本规则和术语,而这篇将会深入讲解模板文件,模板,以及每个页面的结构。

WordPress 博客的每个页面是由多个模板文件组成的,下面是首页的例子:
在上图中,我们可以看出主题的 index.php 是由 4 个模板文件组成: header.php,index.php,sidebar.php 和 footer.php。

Header 模板文件:
通常在这个文件中包含博客的标题(title)和描述(description)。而且它们通常在整个博客中都是一样的。

Index 模板文件:

这个模板文件包含你的日志的标题,日志的内容(就是每篇日志的文本和图片)和日志的元数据(元数据是每篇日志的额外信息,如作者是谁,日志发布的时间,在哪个分类下,有多少留言等等)。
Sidebar 模板文件

这个模板文件主要用于控制博客的页面列表,类别列表,存档列表,友情链接列表和其他一些列表。
Footer 模板文件:
像 header.php 模板文件一样,footer.php 通常不会因为页面的改变而改变,你可以在这里放置任何东西,但是通常是版权信息。

现在让我解释为什么把上面图片中的 index.php 所在的区域标为红色的。引文这块区域是会根据不同类型的页面而发生变化。

如果你在单一日志页面,这时候页面将会包含这四个模板文件:

header.php,single.php,sidebar.php 和 footer.php。

 

 

WordPress 主题教程 #3:开始 Index.php

开始 Index.php 是从零开始创建 WordPress 主题系列教程的第三篇。在介绍了WordPress 主题的一些规则和术语,以及对WordPress 模板和模板文件了解之后,现在是开始动手创建 WordPress 主题了的时候。

在这篇中,你将要着手开始写 WordPress 代码。这里建议在本地电脑上安装WordPress,而不是安装到服务器上,因为本地更方便测试。

第1步:打开 XAMPP 控制面板。

在 XAMPP 文件夹(通常是:C:\xampp),双击xampp-control.exe 将会弹出一个新的窗口。单击 Apache 和 MySQL 的启动按钮。如下图所示:
启动之后你看最小化窗口了。

第2步:创建你的主题文件夹。

转到你本地安装的 WordPress 主题文件夹,应该在xampp/htdocs/wordpress/wpcontent/themes。创建一个新的文件夹,命名为tutorial。

第3步:创建 index.php 和 style.css 文件。

打开记事本或者你选择的文本编辑器,把index.txt这个文件中的所有内容都拷贝到你的记事本。保存为index.php。
打开另外一个记事本,直接保存为style.css 到相同的文件夹下.现在有两个文件了: index.php 和 style.css.
index.php 解释:
点击上面的图片查看大图。我会向你解释每个红色圆圈区域是什么意思。

Doctype – 指明你用哪种类型的代码来编码你的主题。这里你暂时还不用管它的详细意思。

<html> 是网页开始的地方。

<head> 是你的网页头部开始的地方。每个网页都有一个头部和主体。</head> 是头部结束的地方。

<?php bloginfo(’stylesheet_url’); ?> 是一个 PHP 函数,它能取得 style.css 文件所

在的路径,这样主题就能使用 style.css 样式化页面上所有元素。任何时候,PHP 代码都是在<?php 和?> 之间的。PHP 代码和 HTML 的代码是不一样的,在 PHP中,<?php 代表开始 PHP 代码而?> 是结束 PHP 代码。

所以:

• <?php – 开始 PHP 代码

• bloginfo(’stylesheet_url’) – 调用 style.css 文件所在的路径

• ; – 停止调用函数。分号是用来结束一个 PHP 语句。

• ?> – 结束 PHP 代码

<body> – 这是网页主体开始的地方。你能在网页上看到和读到的东西就是主体部分。你正在阅读的这个教程说明你在正在看当前这个网页的主体部分。</body> 是网页主体结束的地方。

</html> 是网页结束的地方,没有东西在它的后面了。

第4步:创建 style.css。

把style.txt 中所有的代码拷贝到你的 style.css 文件中。保存和关闭它。

第5步:安装你的主题。

打开浏览器。在地址栏输入输入http://localhost/wordpress/wp-login.php。登录到你的

WordPress 管理后台。(这里能够看到 WordPress 登录页面是因为你在第1步的时候

启动了 Xampp。否者的话,在这里你的浏览器会报找不到的错误。)

在管理界面下到外观 (Apperance) 菜单并激活名为Tutorial 的主题。

注意,你的主题文件没有屏幕缩略图,所以是空白的。一旦激活了,WordPress 就会

告诉你激活信息。

现在打开一个新的浏览器或者标签页(如果你的浏览器支持标签页浏览)并在地址栏

输入http://localhost/wordpress。你应该得到一个空白页面,恩,完全空白的页

面。如果不是,那你就是在错误的页面上了。

你的主题已经创建好了,这就是这个课程,下一步我们将讨论主题头部模板。

不要忘记关闭 Xampp。双击它在任务栏中小图标,点击 Apache 和 MySQL 的停止按

钮,然后点击推出。

WordPress 主题教程 #4a:Header 模板

Header 模板是从零开始创建 WordPress 主题系列教程的第四篇。前面我向你讲解了

如何安装和启动 XAMPP,安装 WordPress 主题以及介绍了 PHP 语言的最基本语

言,这篇我们将继续 PHP 并学习如何调用博客的标题和链接。

尽量输入所有代码而不是直接拷贝我给你的代码,这样可以让你尽量记住你所学到的

的。

第1步:打开 XAMPP 和主题文件夹。

打开 Xampp,然后打开上次创建的主题文件夹,xampp/htdocs/wordpress/wpcontent/

themes/tutorial。我们应该看到上次创建的两个文件:index.php 和

style.css。

index.php 和 style.css 文件的内容应该和index.txt 和style.txt 一致。

第2步:打开 index.php

打开浏览器,转到http://localhost/wordpress。因为上次安装了一个空白的主题,

这时我们应该看到一个空白的页面。

返回主题文件夹并打开 index.php 文件。

到目前为止,我们已经打开了主题文件夹,浏览器和index.php 文件。

第3步:调用博客标题

编辑 index.php 文件。在<body> 和</body> 这两个标签之间输入<?php

bloginfo(‘name’); ?>,然后保存它。

返回到浏览器并刷新。这时候我们应该能够看到博客的标题。博客的标题是 Demo

Theme Development。

刚才发生什么了?

我们在网页的主体 (body) 之间加入了一行 PHP 代码到 index.php。bloginfo() 是调用

博客的信息的函数。其中参数 name 代表了它调用的是博客的标题。这个名字是在

option 页面中设置的Weblog Title。

<?php – 开始 PHP 代码

bloginfo(‘name’) – 调用博客信息,具体是博客的标题。

; – 结束调用博客信息

?> – 结束 PHP 代码

每次我们在 index.php 文件中增加或者更改任何东西之后,都可以保存,然后刷新页

面去查看结果。

第4步:调用博客链接

调用了博客的标题之后,接下来就要把博客的标题放入超链接中,这时候需要一个

XHTML 标签。

返回 index.php 文件。

在同一行增加<a href=”#”> 和</a>。此时新行的代码应该是:

<a href=”#”><?php bloginfo(‘name’); ?></a>

返回到浏览器,刷新,然后就可以看到博客的标题变成了链接。

现在它是一个链接,但是它没有链接到哪里。因为这个是博客的标题,我们应该让它

链接到首页。为此,在href=后的双引号中输入<?php bloginfo(‘url’); ?>

保存,现在的代码应该是:

<a href=”<?php bloginfo(‘url’); ?>”><?php bloginfo(‘name’); ?></a>

返回到浏览器,刷新,当鼠标在链接上面的时候,浏览器的状态栏应该显示

http://localhost/wordpress

现在点击这个链接,它就会让我们返回首页。可能现在看到还是是相同的页面,但是

用# 或者http://localhost/wordpress 作为链接地址是完全不一样的。在接下来的课

程我们会学到到他们之间的不同。

刚才发生什么了?

我们把网站名字变成了链接,并使它链接到博客的主页。

bloginfo(‘url’) – 调用博客基本信息,具体是首页的的地址或者 URL

<a> – 是一个用于添加链接的 XHTML 标签

</a> – 链接的结束标签。否则网页将不知道哪里结束链接,这样会使得页面接下来的

内容全部都变成链接。还记得规则 #1吗?正确关闭打开的所有标签。

href=”” – 超文本的简写。在引号之间就是它的值。

最终代码为:

<a href=”<?php bloginfo(‘url’); ?>”><?php bloginfo(‘name’); ?></a>

意思为:开始一个链接,链接的地址是博客的URL,用 PHP 函数bloginfo(‘url’) 去调

用这个地址或者URL。这个链接的文本是博客的标题并使用 PHP 函数

bloginfo(‘name’) 去调用博客的标题。最后结束链接。

这篇主要介绍了 WordPress 主题的 XHTML 代码,下一篇我们将继续 Header 模板。

WordPress 主题教程 #4b:Header 模板 2

Header 模板2是从零开始创建 WordPress 主题教程系列教程的第四篇第二部分。最

后说一次,开始之前务必先读下前面的日志。这篇会完成 Herder 模板,并且开始介

绍 DIV Box 模型。

第1步:开启 XAMPP 和打开 index.php

– 启动 Xampp

– 打开 Tutorial 的主题文件夹

– 打开浏览器,在地址栏输入 http://localhost/wordpress

– 返回主题文件夹,用记事本打开 index.php

第2步:给博客的标题添加 H1 的标签

现在,index.php 的代码是:

<a href=”<?php bloginfo(’url’); ?>”><?php bloginfo(’name’); ?></a>

给它添加<h1> 和</h1> 标签。H1 标签意思是标题一。HTML 一共可以有7级标题:

H1,H2,H3,H4,H5,H6。按照默认,H1是字体最大而H6是则最小。

添加之后的的 index.php 文件是:

<h1><a href=”<?php bloginfo(’url’); ?>”><?php bloginfo(’name’); ?></a></h1>

保存,返回浏览器并刷新。

第3步:添加博客描述

调用博客的描述,则在博客标题链接的下面输入以下代码: <?php

bloginfo(’description’); ?>。

现在变成了:

<h1><a href=”<?php bloginfo(’url’); ?>”><?php bloginfo(’name’); ?></a></h1>

<?php bloginfo(’description’); ?>

保存并刷新浏览器,可以看到在博客标题链接的下面出现博客的描述,我们可以到

WordPress 管理后下修改博客的描述。

<?php – 开始 PHP 代码

bloginfo(’description’) – 调用博客信息,这里的是描述

; – 停止调用

?> 结束 PHP 代码

第4步:DIV 标签

这步将介绍一个新的标签 — DIV。

给以上代码添加<div> 和</div>标签:

<div>

<h1><a href=”?php bloginfo(’url’); ?>”><?php bloginfo(’name’); ?></a></h1>

<?php bloginfo(’description’); ?>

</div>

保存,刷新浏览器,应该看到没有任何变化

可以把DIV 想像成一个无形的盒子 (box)。在这里它把博客标题链接和博客描述从其

他东西中区分开。如果没有对它进行样式化,它无非是单独的内容,以后我们可以会

用 style.css 这个文件去样式化这个无形的盒子。我们可以给 DIV 附上边框

(borders),填充(paddings), 页边空白(margins),背景颜色(background

color),背景图片(background images),以及其他一些东东。

第5步:添加 Header DIV 标签

添加id=”header” 到 DIV 标签,如下:

<div id=”header”>

保存并刷新浏览器。

同样也没有改变,这里给DIV 标签指定了ID ,因为将会有更多的 DIV 标签或者无形

的盒子,我们使用 ID 来区分!

WordPress 主题教程 #5:主循环

调用博客日志的主循环(The Loop)是 WordPress 中最重要的 PHP 代码集,几乎

所有的页面都会用到它。这也是从零开始创建 WordPress 主题系列教程的第五篇。

在开始继续学习之前,我们先复习下到目前为止学到了什么?

到目前为止,我们已经学到::

• 规则,术语和 WordPress 主题的层式结构

• 每个页面有哪些部分组成

• 如何安装你的主题

• 如何调用博客的标题和把它做成一个链接

• 如何调用博客的描述和如何把 header 和其他部分分开

现在让我们开始第五篇:主循环(The Loop)

打开 Xampp,“tutorial”主题文件夹,浏览器,并且在浏览器中转到 http://localhost/

wordpress,最后打开 index.php 文件。

下面应该是这时候 index.php 文件中的内容:

记住,为了学习这些代码,请尽量手工输入而不是拷贝和粘贴。

第1步:创建 container Div

在 header DIV 标签下添加一个 DIV 标签,并给它的 ID 赋值为 “container”,如下:

<div id=”container”>

</div>

“container” 这个 DIV 标签是用把博客的主要内容和其他东西都区分开,比如 sidebar

和 footer 等。

第2步:输入主循环代码

在 Container 的 DIV 标签中添加如下代码:

<?php if(have_posts()) : ?><?php while(have_posts()) : the_post(); ?>

<?php endwhile; ?>

<?php endif; ?>

这段代码就是 WordPress 中的主循环(The Loop)。在详细解释这些代码作用之

前,我们来看下现在 index.php 所包含的代码:

你可能已经注意到Container DIV 中的每一行都被缩进了,这是为了更好的组织代

码,更加利于阅读(使用 tab 健而不是空格键进行代码缩进,)。

刚才发生了什么?

• if(have_posts()) – 检查博客是否有日志。

• while(have_posts()) – 如果有日志,那么当博客有日志的时候,执行下面

the_post() 这个函数。

• the_post() – 调用具体的日志来显示。

• endwhile; – 遵照规则 #1,这里用于关闭while()

• endif; – 关闭if()

• 注释:并不是所有的代码都需要两部分用来打开和关闭。有些代码能够自我关

闭,这就解释了have_posts() 和the_post(); 这两个函数。因为the_post();

在if() 和while() 的外面,只需要分号去结束或者关闭。

第3步:调用日志标题

在前面的课程中,我们学习了使用 bloginfo(‘name’) 去调用博客的标题。现在我们将

学习在主循环(The Loop)中如何调用日志标题。

在the_post(); ?> 的后面和<?php endwhile; ?> 的前面输入<?php the_title(); ?>

保存 index.php 文件并刷新浏览器,这时候应该看到在博客描述的下方出现Hello

World ,默认安装 WordPress 之后,博客只有一篇日志。而我的测试的博客有多篇

日志,所以这里有多个日志标题,而且因为我所用的日志标题是一样的,我也没有进

行组织整理他们,所以它们看起来像很长的一行 Hello World。

第4步:给日志标题加上链接

把日志标题转变成日志标题链接。还记得怎样吧博客的标题转变成一个链接的?

在<?php the_title(); ?> 两边增加<a href=”#”> 和</a>。

保存并刷新你的浏览器。现在日志的标题都变成了链接了,但是它们并没有指向哪

里。为了使得每个标题都能指向正确的日志,我们需要把# 替换为

the_permalink()。

<a href=”<?php the_permalink(); ?>“><?php the_title(); ?></a>

the_permalink() 是用来调用每篇日志地址的 PHP 函数。保存并刷新浏览器。

如果只有一个Hello World 标题,把鼠标移到链接上面,观察你的浏览器底部的状态

栏,他不再是http://localhost/wordpress/#。

如果有不止一个的标题链接,我们将看到每个链接会链到不同的日志或者网页。但是

我们的日志标题依然在同一行上面。为了分开它们,在日志标题链接代码的两边添加

<h2> 和</h2> 标签。

<h2><a href=”<?php the_permalink(); ?>”><?php the_title(); ?></a></h2>

记住H1 用作你的博客的标题,那是网页的标题。H2 被用作子标题。现在你的日志标

题链接是子标题了,每一个都是一行。保存 index.php 文件并刷新浏览器,结果如

下:

WordPress 主循环就介绍到这里,现在 index.php 文件内容应该是:

WordPress 主题教程 #5b:日志内容

日志内容是从零开始创建 WordPress 主题系列教程第五篇的第二部分,在这篇中,我

们将展示如果显示博客日志的内容,并且使用一个 DIV 标签把博客日志的内容和日志

的标题区分开。再次强调一次,上一篇关于WordPress 主循环介绍的课程非常重要,

你需要彻底明白之后才能继续学习。

下面开始这篇课程。首先还是打开 XAMPP,“tutorial”主题文件夹,浏览器并在浏览器

地址栏输入:http://localhost/wordpress,最后打开 index.php。

第1步:使用 the_content() 函数显示日志内容

在日志标题代码下面输入:<?php the_content(); ?>。

保存并刷新浏览器,现在在日志标题下面看到了一些文本:

刚才发生什么了?

我们使用了 PHP 函数the_content() 调用了日志的内容。现在,日志的内容只是一

长行的文本,一直到窗口的右边,因为我们还没有样式化它。还记得最开始说到的

style.css 这个文件吗?我们以后用它来控制所有页面元素的显示和布局。

我们在 WordPress 后台输入多篇多篇测试日志,就可以看到多篇日志一起被显示的样

子:

返回浏览器,点击”查看”选择“页面源代码”,就会弹出一个源代码窗口,如果你使用的

是Internet Explorer,那么弹出的是记事本。

我使用的是Firefox浏览器,下面是在 FireFox 中显示的样子:

你注意到 index.php 文件和它的源代码之间的区别了吗?所有的文本,图像和其他东

西等所有上图展示的东西都是通过the_content() 这个函数调用来的。是不是很有

用?注意这些代码是不依赖具体的 WordPress 主题,我们应该自己的这些文本和图片

进行编码和样式化。

还有,有没有注意到我圈出的开启和关闭的P标签。他们都没有在 index.php 文件中出

现,但是他们在源代码中出现了。

P 标签,为什么和如何使用?

为什么- 当我们输入日志的时候,每次跳过一行就是一个段落,这个时候需要一个方

法去展示?我们可以通过P (段落,paragraph)标签,每个段落会在 P 标签之间,

这就是为什么段落之间有行距的原因,

如何使用- 非常容易,WordPress 模板系统会自动帮我们产生P 标签。

第2步:DIV 标签把博客日志的内容和标题区分开

给the_content() 两边添加 DIV 标签并给该 DIV 标签附上class=”entry”属性,如

下:

<div class=”entry”>

</div>

你现在的 index.php 文件应该是:

保存并刷新浏览器,我们再次去查看源代码的话,就会发现每篇日志内容在

class=”entry” 的 DIV 标签中。

这样我们就很容易知道日志标题在哪里结束和日志内容在哪里开始,这样做也是以后

使用style.css 文件对它进行样式化做准备,通过 class 我们就可以准确定位到日志内

容,样式化日志的内容而不影响页面上其他别的内容。

id 和class之间有什么区别呢?

到目前为止,对于每个 DIV 标签,我们可以用id 去命名它,如id=”header”,那么id

和class之间有什么区别呢?id 是唯一的而class不是。如果从头到尾浏览源代码,

你会发现只有一个 id=”header” 和一个 id=”container”,但是有多个。

那么header 和container 可以用class 去取代id 吗?完全可以。

但是不能重复任何id,比如,不能在同一页面上有两个 id=”header” 。当你想一遍又

一遍重新利用一些东西如日志的标题,那么请使用class。

第3步:给日志的标题和内容添加 class=”post” 的 DIV 标签

用一个 DIV 标签把日志的标题和内容一起围住。并把这个 DIV 标签命名为:

class=”post”。

<div class=”post”>

</div>

(class 和 ID 的名字不是一定要严格和上面一样,可以把 class 和 ID 的名字设置任何

你想要的名字,但是 post 和 entry 更加简洁明了,也更容易记。)

现在你的 index.php 文件为:

这个是经过缩进整理后的版本:

一般我们使用tab 健而不是空格键产生缩进的。为什么进行要对代码进行缩进呢?实

际上的代码不像我上面的屏幕截图一样有红色或者绿色的高亮显示,我们需要有个能

够跟踪代码的方法,通过缩进就能更容易知道哪个</div> 是结束哪个<div>。

保存并刷新浏览器,然后查看源代码中的代码。

为什么你要添加另外一个 DIV 标签去围住日志标题和日志内容?

增加这个 DIV class=”entry” 去把日志标题和日志内容区分开。而这个div

class=”post”是把当前日志和其他内容区分开。

WordPress 主题教程 #5c:日志元数据

日志元数据是从零开始创建 WordPress 主题系列教程的五篇的第三部分,今天我们将

开始讲解日志的元数据(Postmetadata):日期(date),分类(categories),作

者(author),评论数(number of comments),以及其他和日志有关系的信息。

同样请打开 XAMPP,主题文件夹,浏览器以及 index.php 文件。

先让我们复习下,现在的 index.php 文件应该有下面这些代码了:

把postmetadata.txt 中的代码复制到<?php the_content(); ?> 下面。(注意:在这

部分,我们只需要复制和粘贴。当我制作 WordPress 主题的时候,我也只是复制和粘

贴这部分代码。对于这部分代码,你不需要完全理解它,只要知道每部分干什么已经

足够了。)

下面的屏幕截图是为了适应日志的大小而只裁剪了一部分,它主要你关注日志元数据

代码的位置:

保存并刷新浏览器,现在应该是:

我们同样可以通过查看源代码来看日志元数据是怎样的?

详细解释:

<p class=”postmetadata”> 和</p> – 所有的日志元数据都在一个

class=”postmetadata” 的段落标签中,因为我想把日志元数据和日志内容区分开。

如果没有段落标签,日志元数据信息将在日志内容结束的地方继续,这样就没有任何

间距去区别内容和日志元数据。

<?php _e(’Filed under:’); ?> – : 是调用冒号“:”的代码;

把Filed under:放入<?php _e(’ ‘); ?>中不是必须的,这样主要为了使得Filed under:

可翻译。如果你的主题不需要支持多语言,可以简单输入Filed under:;

<?php the_category(’, ‘) ?> – the_category() 是用来调用日志的在的所有类别的

PHP 函数。如果你把Filed under: 和the_category() 放在一起,你可以得到:Filed

under: Name of category 1, Name of category 2。the_category() 中的逗号是用来

区分类别名。返回日志元数据的屏幕截图,我们就可以注意到在类别连接中的逗号;

<?php _e(’by’); ?> – 和Filed under:一样。如果你创建的是私人用的的主题, by 外

面的_e() 不是必须的。_e() 是用来创建可以翻译的主题,如果主题被来自不同国家的

上百人使用的话,这是非常重要的。如果你是创建公共使用的主题,最后加上_e() 以

便你的主题可翻译化。

<?php the_author(); ?> – 它是输出当前日志作者的名字。

<br /> – 如果你想要一个空行,又不想用段落标签来产生行间距,使用 BR。注意斜线

/ 。这是能自我关闭的标签。

<?php comments_popup_link(’No Comments ?’, ‘1 Comment ?’, ‘% Comments

?’); ?> – 当弹出留言的功能激活的话,comments_popup_link() 调用一个弹出的留

言窗口,如果没有激活,comments_popup_link() 则只是简单的显示留言列表。No

Comments ? 是在没有留言的时候显示的。1 Comment ? 是用于当刚好只有1条留言

时候。% Comments &187; 是用于当有多于一条留言的时候。比如:8 Comments

?。百分号 % 用来显示数字。? 是用来显示一个双层箭头 ?。

<?php edit_post_link(’Edit’, ‘ | ‘, ”); ?> – 这个只有当我们以管理员或者作者身份登

录的的时候才可见。edit_post_link() 只是简单显示一个可以用来编辑当前日志的编

辑链接,这样就可以让我们不必去管理界面搜寻该日志就能直接编

辑。edit_post_link() 有三个参数。第一个是用来确定哪个词你将用在编辑链接的链

接标题。如果你使用Edit post,那么将显示Edit post 而不是Edit。第二个参数是用

来显示在链接前面的字符,在这里是竖线|,代码就是&124;。第三个参数是用于显示

在编辑链接后面的字符,在这里没有使用。

登录 WordPress 之后,再返回到首页就可以看到“Edit”的链接和一条竖线。

WordPress 主题教程 #5d:Else,日志 ID,链接标题

Else,日志 ID,链接标题是从零开始创建 WordPress 主题系列教程的五篇的第四部

分,这篇课程将讲解其他3个可以增加到日志中的元素:Else,post ID, 和链接的

title 值。尽管它们是可选的,但是我们几乎可以在我每一个免费的主题中都能找到。

开始之前,不要忘记启动 Xampp。

第1步:Else

在<?php endwhile; ?> 的下面输入以下代码:

<?php else : ?>

<div class=”post”>

<h2><?php _e(’Not Found’); ?></h2>

</div>

大致如下:

保存刷新浏览器,但是应该注意到没有任何变化。我们返回教程 #5 — 主循环,去解

释你刚才上面输入的是什么?

这里就是主循环的部分代码:

<?php if(have_posts()) : ?><?php while(have_posts()) : the_post(); ?>

<?php endwhile; ?>

<?php endif; ?>

第一,if(have_posts()) 检查博客是否有日志,

第二,while(have_posts()) 执行the_post() 去调用日志。而Else 是当博客完全没

有日志的时候执行的。while() 和endwhile; 应该嵌套在if() 和else :之间。 所以

<?php else : ?> 应该在<?php endwhile; ?> 之后。

现在你知道什么是else 了吧,当没有任何日志或者当找不到任何日志的时候,告诉

WordPress 怎么处理,让 WordPress 显示错误信息Not Found,或者其他任何你想

要的东西。我们可以下载任一款免费主题,看一下它的 index.php 文件怎么写的。

在上面的例子中,Not Found 错误信息是在<?php _e(”); ?> 之中。如我上一篇所

说,这不是必需的,只是为了让主题可翻译。

整个信息和代码Not Found 外面有<h2> 和</h2>。这个同样也不是必需的。你可以

简单使用:

<div class=”post”>

Not Found

</div>

但是,给这个错误信息使用上<h2> (子标题)标签能够使它更明显,让访问者注意

到这个页面上没有任何东西。

那么<div class=”post”> 和</div> 用来做什么的呢?恩,我们肯定不想你的错误信

息在“茫茫蛮荒之地”之间滞留,对不?我们用<div class=”post”> 和</div> 标签围

住每篇日志。所以同样,尽管是错误信息不是真正的日志内容,但是我们其实可以把

它当作日志来处理。

第2步:日志 ID

增加id=”post-<?php the_ID(); ?>” 到<div class=”post”>

保存并刷新浏览器。然后查看 > 页面源代码。现在我们会发现现在每篇日志都附加上

了一个数字或者说是日志 ID。the_ID() 只是调用每篇日志的 ID。

为什么使用它呢?这是用来定制个别的日志的面貌。后面,当你使用 style.css 文件去

告诉你的主题日志将看起像怎么样。如果通过给每篇日志附加唯一的ID,你就可以针

对单独的一篇日志进行样式化,使得它和其他日志看起来不一样。如果没有 ID,你将

没有办法通过style.css 文件使它和其他日志不一样。

同时把class 和id 赋给同一个DIV 标签,可以吗?DIV 是标签,class 是一个属

性,id 也是是一个属性。每个标签能拥有多个属性,如DIV 就可以同时有class 和

id这两个属性。(注释:id 是一个 XHTML 属性。the_ID() 是 PHP 函数。他们是不同

的,)

第3步:链接标题

增加title=”<?php the_title(); ?>” 到日志的标题链接。

保存并刷新浏览器。然后再去查看源代码,查找任何日志的标题链接,如果日志的标

题链接是Hello World,那么他的左边应该有title=”Hello World”。

title=”” 是<a>(链接)标签的另一个属性。在双引号中的是链接的描述。在这里,每

篇日志的标题也是链接的描述。这就是为什么我们要再次使用the_title() 这个 PHP

函数。

如果不使用the_title() 作为title=””的值,那么每篇日志标题链接将会有同样的描

述。举个例子,如果用title=”Click me” 取代the_title(),每篇日志标题链接都将会

用Click me 作为描述。

返回页面。把鼠标移到任何一篇日志标题的链接上,描述信息将会弹出,这就是刚刚

增加的。增加描述到链接是非常有用的,当你其他站点需要扫描你的博客的时候,如

Technorati.com,每次你发表日志的时候,WordPress 通知 Technorati 和其他网站你

的博客已经更新了。Technorati 然后就会来到你的博客,扫描它,并索引得到一个你

日志的摘要,这其中会包括你链接标题的描述。

WordPress 主题教程 #5e:日志导航链接

日志导航链接是从零开始创建 WordPress 主题系列教程的第五篇的第五部,在绝大多

数的 WordPress 博客的底部,都会有下一页 (Next Page) 或者上一页 (Previous

Page) 这样的导航链接。我们可以通过 WordPress 的模板系统中的

posts_nav_link() 这个函数调用这些链接。

在<?php endwhile; ?> 和<?php else : ?>之间添加如下代码:

<div class=”navigation”>

<?php posts_nav_link(); ?>

</div>

<div class=”navigation”> – 开始一个名为navigation 的 DIV 标签。

<?php – 开始 PHP 代码

posts_nav_link() – 调用后一页和前一页的链接。

; – 停止调用。

?> – 结束 PHP 代码

</div> – 结束名为navigation 的 DIV 标签。

效果如下:

保存并刷新,查看后一页或者前一页的链接。默认情况下,如果没有超过10篇日志的

话,是不会显示导航链接。如果没有超过10篇日志,依然想看到导航链接,登录到管

理界面,选择Settings > Reading,然后把它设置为比所有日志少一篇。如,有6篇

日志,就设置为5。

如何定制化 posts_nav_link():

和前面postmetadata 课程中介绍的函数一样,我们也可以给这个函数3个参数,分

别给链接的中间,前面和后面的设置字符,如下:

<?php posts_nav_link(’in between’,”before’,”after’); ?>

第1个参数是显示在后一页和前一页链接的中间。第2个参数显示在前面。第3个参数

显示在后面。

这里是一个定制化posts_nav_link() 的例子:

WordPress 主题教程 #6:侧边栏

侧边栏是从零开始创建 WordPress 主题系列教程的第六篇,这一篇我们主要讲解

WordPress 主题的侧边栏,让你很快掌握它的结构,并能编码和样式化它。

在开始侧边栏之前,这是现在index.php 文件的样子。

第1步:创建 id 为 “sidebar” 的 DIV

首先让我们创建一个名字为sidebar 的 DIV,这样可以把侧边栏中的所有东西都放入

其中。在container 的后面和</body> 标签的前面输入以下代码:

<div class=”sidebar”>

</div>

第2步:给侧边栏的 DIV 添加无序列表

在新的sidebar 的 DIV 标签中创建一个新的无序列表。

<ul> – 开始无序列表

</ul> – 结束无序列表

第3步:给这个无序列表添加原属

增加一个列表元素(LI)到无序列表(UL)的中间并把一个子标题添加到这个列表

中。

<li><h2><?php _e(’Categories’); ?></h2>

</li>

注意添加制表符到<li> 和</li> 标签之前为了代码缩进。

<li> – 开始列表元素

<h2> – 开始子标题

<?php _e(’Categories’); ?> – 输出字符Categories

</h2> – 结束子标题

</li> – 结束列表条目

保存 index.php 文件并刷新浏览器。现在应该可以看到Categories 子标题结构应该

这样:

子标题前面的小圆点指明这个子标题是在一个列表元素中(LI)。如果无序列表

(UL)有两个列表元素,那么将有两个小点。

第4步:添加分类链接列表

在列表条目中添加下面代码:

<ul>

<?php wp_list_cats(’sort_column=name&optioncount=1&hierarchical=0′); ?>

</ul>

这里是上面代码的解释:

<ul> – 开始另一个无序列表

<?php wp_list_cats(); ?> – 调用分类链接列表

</ul> – 结束无序列表

保存并刷新浏览器。下面是分类链接列表的样子:

category-links.gif

默认的分类是Uncategorized。如果你没有把日志发布到多个分类下面,那么你的列

表链接列表应该是只有一个链接 Uncategorized。

更进一步的解释:

• sort_column=name – 把分类按字符顺序排列

• optioncount=1 – 显示每个分类含有的日志数

• hierarchial=0 – 不按照层式结构显示子分类,这就解释了为什么子分类链接是

列在列表中第一级。

• & – 每次增加另一个参数的时候,需在它之前要输入& 用来把和现有的参数区

分开。如& 在sort_column 和optioncount之间。

为什么不把<?php wp_list_cats(); ?> 放入<li> 和</li> 标签中呢?

当我们使用wp_list_cats() 这个函数调用链接列表函数的时候,它会自动附上一组

<li> 和</li>(列表条目)标签在每个链接的左右。查看页面源代码;可以看到每个连

接的周围都已经有一组列表元素的标签。

当处理侧边栏,无序列表和列表元素的时候,我们一定记得规则 #1:按顺序关闭所有

标签。

WordPress 主题教程 #6b:页面链接列表

页面链接列表是从零开始创建 WordPress 主题系列教程的第六篇的第二部分,通过上

一篇的学习,现在已经熟悉了侧边栏的结构,接下来我们将继续修改侧边栏,完成页

面链接(Page-link)列表。当完成常规的侧边栏之后,我们将学习如何窗体化

(widgetize)侧边栏。

在分类链接上面添加以下代码:

<?php wp_list_pages(); ?>

保存并刷新浏览器。效果如下所示:

在默认情况下只有一个页面链接,就是 About 链接。我在我的本地的博客增加了很多

多页面和子页面,这样我就有四级页面链接。

查看页面源代码,我们可以看到wp_list_pages() 产生的完整结构以及代码,如下:

第一,它把所有东西放入列表元素标签(LI),第二,它给列表一个名字,Pages。

第三,它增加一个无序列表(UL)。第四,它把每个链接放入到<li> 和</li>标签之

间。

在上面的截图中,注意到“Pages”这个列表标题和“Categories”这个分类链接标题的大

小不一样。

如何使它们一致呢? 添加‘title_li=<h2>Pages</h2>’ 到wp_list_pages() 作为参

数。

保存并刷新浏览器结果如下:

title_li 是一个用来定制化页面链接列表的标题的参数。<h2>Pages</h2> 是title_li

这个参数的值

进一步定制化:

在我的例子中,我有四级页面链接。由于布局或者设计的原因使得不能在侧边栏处理

那么多级别的链接。为了限制显示列表的层数,增加了depth 这个参数,并把它设置

为3:

注意,我添加了depth=3& 而不是仅仅depth=3。这个& 在这儿用于把depth 和

title_li 这两个参数区分开。(如果你只有一个 about 页面链接,你将不会注意有什么

不同。)

这里是我的列表的不同之处:(对比这个截图和上面的截图。)

WordPress 主题教程 #6c:存档和链接列表

存档和链接列表是从零开始创建 WordPress 主题系列教程的第六篇的第三分,这篇将

比较简单,讲解如何调用存档链接列表和友情链接(blogroll)列表。

第1步 – 增加存档链接列表。

在侧边栏区域的Categories 列表下面输入以下代码:

<li><h2><?php _e(’Archives’); ?></h2>

<ul>

<?php wp_get_archives(’type=monthly’); ?>

</ul>

</li>

复制之后检查下代码是否和下面一样:

保存并刷新浏览器。结果如下所示:

发生什么了?

我们使用了wp_get_arhives() 这个 PHP 函数,并用了type 这个参数以及monthly

作为它的值,这样就按月调用存档链接列表。

• <li> – 开始列表元素

• <h2> – 开始子标题

• <?php _e(’Archives’); ?> – 子标题文本

• </h2> – 结束子标题

• <ul> – 开始在存档链接这个无序列表

• <?php wp_get_archives(’type=monthly’); ?> – 按月调用存档列表链接,并

把每个链接放入<li> 和</li> 标签中。如果查看源代码,我们会看到

wp_get_archives() 为每个链接产生了列表元素(LI)标签,就像

wp_list_cats() 这个函数一样。

• </ul> – 结束在子标题下的无序列表

• </li> – 结束列表元素

第2步:增加友情链接列表

在存档链接列表下输入以下代码:

<?php get_links_list(); ?>

保存并刷新,结果如下:

默认情况下,我的 blogroll 和你的是没有什么不同,这里是它在源代码中的样子:

上面的代码完全没有正确的被缩进,因为它们是由函数get_links_list() 产生的,就像

上一篇所学的函数wp_list_pages() 产生的代码一样,但是它遵循规则 #1,按正确顺

序关闭所有的东西。我已经圈出了元素和无序列表的标签让你看得更明显。

WordPress 主题教程 #6d:搜索框和日历

搜索框和日历是从零开始创建 WordPress 主题系列教程的第六篇的第四部分,尽管这

篇的题目是搜索框(Search Form) 和日历(Calendar),但是我同样也会介绍元

数据(Meta)。这一篇我们会结束常规的侧边栏,然后将在下一篇将介绍如何窗体化

(widgetize)化侧边栏。

第1步:增加搜索框

创建一个新文件,然后把该空白文件保存为searchform.php(当然是和 index.php

在同一个文件夹下)。把searchform.txt 中的内容拷贝到 searchform.php。

在 index.php 文件,在侧边栏的最顶部输入以下代码:

<li id=”search”>

<?php include(TEMPLATEPATH . ‘/searchform.php’); ?>

</li>

保存并刷新浏览器,结果如下:

刚才发什么了呢?

• <li id=”search”> – 开始一个名字为search 的列表元素,给它一个 ID,这样

就能够以后样式化它。

• include() – 导入任何你想导入的文件。这和使用 WordPress 模板函数去调用

模板文件是不同的,因为include() 只是简单导入已经存在的文件。这里是调

用在 searhform.php 文件中的代码。被导入的信息应该在一个博客上基本不会

被改变的。

• TEMPLATEPATH – 主题文件夹的位置,这里是:wp-content/themes/

tutorial

• ‘/searchform.php’ – 文件名:/searchform.php

• 在 TEMPLATEPATH 和 “/searchform.php” 中间的点把它们连接起来,所以最

终得到:

wp-content/themes/tutorial/searchform.php

• </li> – 结束列表元素

注意,搜索框不像分类,归档,页面或者 Blogroll 一样有子标题。当然如果你愿意,

也可以给它一个子标题。

第2步:增加日历

在搜索框或者页面链接列表下面输入以下代码:

<li id=”calendar”><h2><?php _e(’Calendar’); ?></h2>

<?php get_calendar(); ?>

</li>

保存并刷新浏览器,结果如下:

发生了什么?

• <li id=”calendar”> – 开始一个 ID 为 “Calendar” 的列表元素

• <h2> – 开始一个子标题

• <?php _e(’Calendar’); ?> – 输出Calendar 这个词

• </h2> – 关闭子标题

• get_calendar() – 使用 get_calendar() 这个 WP 函数调用日历

• </li> – 结束列表元素

这样日历就完成了

第3步:增加元数据

在get_links_list() 函数下输入以下代码:

<li><h2><?php _e(’Meta’); ?></h2>

<ul>

<?php wp_register(); ?>

<li><?php wp_loginout(); ?></li>

<?php wp_meta(); ?>

</ul>

</li>

保存并刷新浏览器,结果如下:

(如果你没有登录 WordPress)

(如果你已经登录)

那么这是怎么回事呢?

你开始一个列表元素(LI),跟着是一个子标题(H2) Meta。在子标题下,嵌入了

一个无序列表(UL)。最后把每个链接都放入了列表元素中(LI)。

wp_register() 这个函数能产生一组<li> 和</li> 标签,如果你没有登陆,它显示注册

(Register)链接,如果登录了,它显示的是站点管理(Site Admin)的链接。

wp_loginout() 不会产生列表元素标签,所以需要我们手工输入列表元素标签,当你

没有登录的时候,得到的是登录(Login) 的链接,当已经登录的时候,得到的是登

出(Logout)链接。

到目前为止,wp_meta() 没有做任何事情,他在网页上和源代码中都不会产生东西,

现在不要考虑wp_meta(),实际上你已经在使用它了。

到此为止,我们已经完成 Meta 并最终完成了常规的侧边栏。

WordPress 主题教程 #6e:窗体化侧边栏

窗体化侧边栏是从零开始创建 WordPress 主题系列教程的第六篇的第五部分,一个支

持 Widget 的侧边栏或者说是窗体化(widgetized)的侧边栏几乎是 WordPress 主题

的标准。

首先,什么是窗体化(widgetizing)呢?简单的说,窗体化就是能够通过拖拉就能够

整理侧边栏的模块。比如我们需要更改分类和存档的位置,只需要简单把分类和存档

列表拖到它们的位置即可,根本不用去修改侧边栏的代码。

第1步:创建 functions.php 文件

打开记事本,然后把空白文件保存为functions.php。把functions.txt 文件中所有的

内容拷贝到functions.php 中。

回顾一下,现在在“tutorial”主题文件夹下应该有4个文件。

第2步:窗体化侧边栏

直接在侧边栏的第一个<ul> 标签输入以下代码:

<?php if ( function_exists(’dynamic_sidebar’) && dynamic_sidebar() ) : else :

?>

直接在</ul> 标签之前输入以下代码:

<?php endif; ?>

保存 index.php 文件,然后我们到 WordPress 后台 => 外观 => Widget 就可以把

Widget 拖到侧边栏了。

WordPress 主题教程 #7:尾部

尾部(footer)是从零开始创建 WordPress 主题系列教程的第七篇,这篇教程将会很

简单,去只要在侧边栏下增加个 DIV 标签,然后输入一些版权信息。其实你完全可以

不用我说明就能自己去做,可以先自己尝试下,然后返回这里再仔细检查下。

第1步:增加个 DIV 标签

在侧边栏的 DIV 标签下输入以下代码:

<div id=”footer”>

</div>

第2步:添加版权信息

把尾部的文本放入段落标签中,你可以输入任何你想要的东西,这里是我的:

<p>

Copyright ? 2007 <?php bloginfo(’name’); ?>

</p>

保存并刷新浏览器,结果如下:

? 用于显示版权符号,还记得在 header 的时候使用的bloginfo() 函数吗?这里再次

使用,“name”是用于调用博客标题,而“url”调用博客的地址。

如果你想你的博客标题成为一个链接,查下头部就知道怎么做了。

WordPress 主题教程 #8:验证 XHTML

验证 XHTML 是从零开始创建 WordPress 主题系列教程的第八篇。在开始学习 CSS

并修改 style.css 文件之前,我们需要学习如何验证代码,简单说,验证(Validate/

Validating/Validation)就是检查下代码有没有错误,而验证又分为:XHTML

Validator 和CSS Validator。这篇我们学到 XHTML 验证器。

首先打开Xampp Control 和浏览器,并进入http://localhost/wordpress

然后查看 > 页面源代码。

全选并所有的源代码。

然后到XHTML Validator。

把刚才复制的源代码粘贴到Validate by Direct Input 框中。

点击Check 之后,验证器会就会检查代码,然后把检测结果反馈给我们。如果反馈回

来的结果是绿色的,那么代码没有错误。

如果有错误,则根据其提示进行修改。

WordPress 主题教程 #9:Style.css 和 CSS 介绍

Style.css 和 CSS 介绍是从零开始创建 WordPress 主题系列教程的第九篇,学习

CSS 最好的方法就是去使用它,不像 XHTML 和 PHP 需要接触模板的核心文件,同

样不要需要理解任何基本概念,只要去用它,通过试用和修正错误是可以让你快速学

会。

我们现在已经在 style.css 文件有些内容,让我们先来看看这部分内容是干什么的?

• 第一行显而易见就是主题的名字。

• 第二行是这个主题的地址,如果你的主题只是私用的而不准备发布的话,那就

不用管它了。

• 第三行是主题的描述。

• 第四行是版本号,这是非常重要的,特别是当你公开发布你主题新版本的时

候。

• 第五和第六行分别是主题作者的名字和主页。

在主题信息两边的 /* 和 */ 符号是为了让主题的信息不影响该文件的其他内容,这是

CSS 的注释。当输入 CSS 代码去样式化你的网页的时候,你可能想在这里增加些注

释使得能够在以后更清楚知道这部分是干什么的。显然我们并不想你的注释影响实际

的代码,所以可以使用 /* 和 */ 这一对符号使得注释不被解释。

下面是处理后的主题信息

第1步:打开 style.css 文件

• 打开 Xampp,主题文件夹,FireFox,IE 浏览器和 style.css 文件。

• 在两个浏览器的地址栏都输入:http://localhost/wordpress

从这里开始,我们需要同时在 FireFox 和 IE 上测试主题,不同的浏览器对 CSS 的代

码解释是不同的。如果能够在尽可能多的浏览器器上和尽可能多的操作系统上测试你

的主题是最好的(Safari,Opera,Linux,Netscape 等等)。如果你和我一样懒,那

就只在 FireFox 和 IE 上测试你的主题吧。

第2步:添加 CSS 代码

在 style.css 文件中输入以下代码:

body{

margin: 0;

font-family: Arial, Helvetica, Georgia, Sans-serif;

font-size: 12px;

text-align: left;

vertical-align: top;

background: #ffffff;

color: #000000;

}

像 XHTML 和 PHP 一样,通过制表符增加缩进来组织代码:

保存 style.css 文件并刷新两个浏览器Firefox 和Internet Explorer 查看变化。

把body{ } 看作一个标签,然后它里面所有的东西看作属性和值,和处理 XHTML 时

一样。{ 是开始符,} 是结束符。在{ 和} 之间,冒号意思是开始而分号意思是结束。

(我在涉及到 XHTML,PHP,CSS的时候都使用标签,属性和值这些术语是为了保

持简单,实际上 PHP 和 CSS 有不同术语。如参数(parameters),选择器

(selector)和属性(property)。)

在我们继续之前,我需要解释下为什么使用body{ } (CSS 选择器),是因为你是在

样式化网页的绝大基本部分(或者说是总体部分),<body> 标签。你不会样式

<head> 因为这个标签没有东西需要样式化。你网页上展示的绝大部分的东西是在

<body> 和</body> 标签之间。

然后,在后面你会样式化 ID 为header 的 DIV 标签。

进一步的解释:

margin: 0; 处理 body 标签的默认的页边空白,如果你要页边空白或者更大的页面空

白,把 0 改成 10px,20px 或者其他。PX 意思是像素。每个像素使你电脑屏幕的一

个点。当你的页边空白是 0 的话,就不需要后面跟上 px。

在下面的图片中,红色高亮的区域就是应用于 body 标签的默认的页边空白。

当给其样式化为margin: 0;,下面是没有页边空白的相同页面:

font-family: Arial, Helvetica, Georgia, Sans-serif; 为你的网页或者网站选择使用哪

种字体。这些字体中的第一个,Arial 是可替换的,如果你的用户没有在他们的电脑上

安装Arial 这种字体,style.css 文件就会寻找Helvetica,然后是Georgia,再接着

是Sans-serif。你可以在字体文件夹(我的电脑 > 系统盘 > Windows下面)找到你

的字体列表。

font-size: 12px; 显而易见是字体大小。可以把它改大或改小以查看变化。

text-align: left; 让你的文本向左对齐。把它改成 text-align: right; 去查看不同之处。

vertical-align: top; 使得所有的东西从上面开始。如果是中部或底部排行你的 body

标签,所有东西将会向下推。

background: #ffffff; 意思是白色背景。#ffffff 是白色十六进制代码。#000000 是黑色

十六进制代码。

color: #000000; 意思是文本颜色是黑色。

如果你想向前更进一步或者自己学习 CSS,最好的地方是w3schools.com

WordPress 主题教程 #10:十六进制颜色代码和样式

化链接

十六进制颜色代码和样式化链接是从零开始创建 WordPress 主题系列教程的第十篇。

这篇继续昨天介绍 CSS 的课程,我们今天将介绍如何着色和十六进制颜色代码。

颜色属性,跟着的是一个十六进制代码,是用于给文本上色。如body { color:

#000000;} 意思是你页面 body 内所有文本将是黑色的。

背景颜色属性,跟着的是一个十六进制代码,是给除背景上色。如body{

background: #ffffff; } 意思是为 body 上白色背景。

十六进制代码

• 每个十六进制代码前都有 # 号,然后跟着六位数字。这些数字的范围是从

#ffffff(白色)到#000000(黑色)。

• #ffffff, #eeeeee, #dddddd, #cccccc, #bbbbbb, #aaaaaa, #999999,

#888888, #777777, #666666, #555555, #444444, #333333,

#222222, #111111

• 前两位表示红色,第三和第四代表绿色,而最后两位代表蓝色。#ff0000 是红

色(red)。#550000 是暗红色(dark red)。#220000 是更黑色的红色

(darker red)。#00ff00 是绿色(green)。#0000ff 是蓝色(blue)。那么

哪个十六进制代码是黄色呢? #ffff00 就是黄色(yellow)。#ff00ff 是紫色

(violet)。

第1步:添加链接颜色

在body{ } 选择器下输入以下代码:

a:link, a:visited{

text-decoration: underline;

color: #336699;

}

• 这些代码是干吗用的?,给所有的链接都加上下划线的(text-decoration:

underline;)和上了蓝色(color: #336699;)。这是不是纯正的蓝色,但它确

实是蓝色是因为最后两个数字(代表蓝色)是最高值的数字。

• a:link 用于样式化链接。当你想把一个词转变为链接的时候,用什么实现呢?

使用<a> 和</a> 这对标签,因此样式化链接就是样式化a:link。

• a:visited 用于样式化已经访问过的链接。

• 另外一种输入方式:

a:link{

text-decoration: underline;

color: #336699;

}

a:visited{

text-decoration: underline;

color: #336699;

}

• 当给a:link 和a:visited这两个选择器应用相同的text-decoration: underline;

和color: #336699; 这两个属性的时候。可以把它么你放在一起,使用逗号来

区分。

第2步:添加链接悬停颜色

在a:link, a:visited{ } 下输入以下代码:

a:hover{

text-decoration: none;

}

这些代码是干吗用的呀? 当把指针移到链接上面时候下划线消失。

如果不想在默认情况下有下划线而是在当把指针移到链接上面的时候才出现下划线,

那么就在a:link 和a:hover 之间交换下text-decoration: 的值。

如果你想更改你链接悬停时的颜色,那么就增加color: 和任何你想要的十六进制代

码,如:

a:hover{

text-decoration: none;

color: #ff0000;

}

WordPress 主题教程 #11:宽度和布局

宽度和布局是从零开始创建 WordPress 主题系列教程的第十一篇,这篇将介绍如何设

置每个 DIV 的宽度和布局排版,并且也会展示如何让主题显示正确,并同时在 Firefox

和 IE 下兼容,显示一致。

在我们开始之前,打开Xampp Control,主题文件夹,Firefox 浏览器,IE 浏览

器,index.php和style.css这两个文件。

第1步:设置页面总体宽度

现在我们首先要确定的是主题的总体宽度。我们使用 750px;主题的大小取决于博客

绝大多数访问者的屏幕分辨率。需要避免的是使用过大宽度的 的主题,如果博客的读

者都大多数使用 800px × 600px 的屏幕,这样的话,如果是使用 900px 宽的主题将会

有 100多像素超出他们的屏幕,显然这是对用户很不友好的。

不管怎样,我们怎么样把主题的总体宽度设置为 750px 呢?

我们需要把现在主题中的所有的东西(header,container,sidebar 和 footer)放入

一个 750px 的 DIV 标签中。

在<body> 之后增加:<div id=”wrapper”>

在</body> 之前增加:</div>

在style.css 文件中输入以下代码:

#wrapper{

margin: 0 auto 0 auto;

width: 750px;

text-align: left;

}

在 CSS,# 号是通过id 来定位页面中的元素,而点号是通过class 来定位页面中的

元素,如果你的代码是<div class=”wrapper”>,那么就应该用.wrapper 来替代

#wrapper 去定位wrapper 这个 DIV 标签。

同时保存 index.php 和 style.css 文件。刷新 Firefox 和 IE 浏览器(按 F5)查看所做

的改动。

详细解释:

• margin: 0 auto 0 auto; 意思是(注意顺序):0上页边空白,自动右页面空

白,0下页边空白和自动左页面空白。从现在开始,记得设置左右页边空白为

自动将使得居中对齐。

• width: 750px; 显而易见是 750 像素。

• text-align: left; 是让wrapper DIV 中的文本向左对齐因为我们等下要要将

body{ text-align: left;} 改成text-align: center;

第2步:自动页面居中

把body{} 中的text-align: left; 改成text-align: center;。

为什么?(我假设你使用的是 Firefox 和 Internet Explorer 6)。你的布局可能你看起

来是正确的,但对于使用早前版本的 IE 用户可能不正确。还记得设置左边和右边的页

边空白为自动是居中吗?但是这并不是对所有的 IE 都适用,所以body{ text-align:

center; } 是让wrapper DIV 居中在旧版本 IE 的一种解决方案。

(随便说一下,在 Firefox 和 IE 中文本大小是不同的,我们稍后解决。)

第3步:设置 header 宽度和布局

让Header 浮到左边并且设置它的宽度为 750px:

#header{

float: left;

width: 750px;

}

第4步:设置 Container 宽度和布局

让Container 浮到左边并且宽度为 500px:

#container{

float: left;

width: 500px;

}

第5步:设置 Sidebar 宽度和布局

让Sidebar 浮到左边,宽度为240px,并且给它灰色的背景:

.sidebar{

float: left;

width: 240px;

background: #eeeeee;

}

#ffffff 是白色而background: #eeeeee; 是非常浅的灰色。我们给侧边栏增加一个背景

颜色只是去查看当增加剩下的 10 像素之后的不同之处。

第6步:设置 Footer 的宽度和布局

让Footer 浮到左边,左右两边都没有东西,并且宽度为:750px:

#footer{

clear: both;

float: left;

width: 750px;

}

Header 和Footer 的样式有什么区别呢?答案是footer{} 中有clear: both;。它在那

儿使得 Footer 不能和它上面的东西(如 Sidebar 或者 Container)连接起来。

保存并刷新浏览器。

第7步:给侧边栏增加其余的 10 像素

给侧边栏增加其余的 10 像素的页边空白。现在侧边栏的 CSS 应该是:

.sidebar{

float: left;

width: 240px;

background: #eeeeee;

margin: 0 0 0 10px;

}

保存并刷新浏览器去查看 10 像素的空白增加到侧边栏的左边了。

margin: 0 0 0 10px; 具体的意思是:上边空白为0,右边空白为0,底部空白为0,左

边空白为10像素。当大小为0的时候,px 单位不是必需的。

第8步(额外的步骤):修正 IE 的双倍页边距 bug

Internet Explorer 有个双倍页边距的 bug,这样在 IE 下,我们的页面距就是 20像

素,20像素的页边距可能会破坏布局并把侧边栏挤到页面的底部,因为一个20像素的

页边距使得 Container 和 Sidebar 的宽度之和为 760px 而不是 750px。为了解决这个

问题,增加display: inline; 到侧边栏。现在你的侧边栏应该是:

.sidebar{

float: left;

width: 240px;

background: #eeeeee;

margin: 0 0 0 10px;

display: inline;

}

这里是现在的index 和style 文件的内容。

WordPress 主题教程 #12:日志样式化和其他杂项

日志样式化和其他杂项是从零开始创建 WordPress 主题系列教程的第十二篇,这篇主

要讲解如何样式日志,这篇不需要 index.php,

打开Xampp Control,theme 文件夹,Firefox,Internet Explorer 和style.css 文

件。

第1步:Reset CSS

在style.css 文件中的body{} 上面输入以下代码来处理大部分页边空白和填充:

body, h1, h2, h3, h4, h5, h6, blockquote, p{

margin: 0;

padding: 0;

}

• 这里我们使用的是margin: 0; 而不是margin: 0 0 0 0;。因为所有的值都是一

样的话,只用一个数字就够了,对于填充的设置也是一样的。

• 保存,刷新 Firefox 和 IE。接下来我们可以增加空白和填充到需要的地方。

第2步:样式化 H1 标题

在body{} 之后输入以下代码:

h1{

font-family: Georgia, Sans-serif;

font-size: 24px;

padding: 0 0 10px 0;

}

• font-family: Georgia, Sans-seriff; 把 H1 标题的字体从 Arial 改成 Georgia。

如果没有 Georgia,网页就会寻找 Sans-serif;

• font-size: 24px; 我们在body{} 中把字体设置为12px,H1 和H2 标签是不

会遵守的。这就是因为标题标签遵循他们自己的规则。为了控制他们,我们需

要特别的去样式化它们。

• padding: 0 0 10px 0; 意思是 10 像素的底部填充。这是为了在博客的标题和

描述之间增加空间。

保存,刷新,结果如下:

第3步:样式化日志

在#container{}下面输入以下代码:(可以在输入每块代码之后,保存并刷新去查看

其中的变化。)

.post{

padding: 10px 0 10px 0;

}

(给每个 class 名字为post 的 DIV 增加 10 像素的顶部和底部空白。)

.post h2{

font-family: Georgia, Sans-serif;

font-size: 18px;

}

(.post h2 不是一般的 CSS 规则。他是特别样式化在 class 名为 post 的 DIV 中的 H2

子标题。在侧边栏中的 H2 子标题就不受影响。)

.entry{

line-height: 18px;

}

(设置 entry DIV 中行距。)

第4步:设置日志段落填充

在a:hover{} 下输入以下代码:

p{

padding: 10px 0 0 0;

}

(给每个段落标签增加 10 像素的顶部填充。)

第5步:样式化日志杂项

在.entry{} 下面输入:

p.postmetadata{

border-top: 1px solid #ccc;

margin: 10px 0 0 0;

}

对于postmetadata 这个段落便签,给它增加一个灰色的边框和10像素顶部空白。

border-top 意思是仅仅顶部边框border-left 意思是仅仅左边边框,等等。 如果只是

单独的border,没有-top,-right,-bottom 或者-left 则意味着所有的边框。如

border: 1px solid #ccc; 意思为所有的四边都有1像素的灰色的边框。

第6步:样式化导航栏

在p.postmetadata{} 下输入:

.navigation{

padding: 10px 0 0 0;

font-size: 14px;

font-weight: bold;

line-height: 18px;

}

对于Next page 和Previous page 链接外面的的navigation DIV 标签,我们

• 增加了一个10像素的顶部填充。

• 把字体大小改成14像素。

• 把字体改成粗体。

• 把行高增加到18像素。

WordPress 主题教程 #13:样式化侧边栏

样式化侧边栏是从零开始创建 WordPress 主题系列教程的第十三篇,这篇主要讲解如

何样式化侧边栏里面的所有元素,在对侧边栏样式化之后,这系列教程就将差不多结

束了。

打开 XAMPP,主题文件夹,Firefox,IE 和 style.css 文件。

第1步:样式化侧边栏的无序列表

在.sidebar{} 下输入:

.sidebar ul{

list-style-type: none;

margin: 0;

padding: 0 10px 0 10px;

}

现在已经为侧边栏样式化父级无序列表(UL)标签。所有的子 UL 或者内嵌的 UL 将

会击继承同样的样式。在这里,它是无列表样式,零空白和10像素的填充。

如下所示:

第二级的(或内嵌的) UL 继承了第一级 UL 的样式。如果你给了第一级 UL 应用了边

框,第二级的 UL 同样也会有个边框。

保存并刷新就可以看到列表条目现在已经没有前面的圆点了。

注意下你是如何增加顶部和底部填充的。

第2步:给 LI 添加填充

在.sidebar ul{} 下输入:

.sidebar ul li{

padding: 10px 0 10px 0;

}

这是现在的填充:

在进行这步之前,搜索框和日历之间以及日历和页面之间是没有空间,如何给这些模

块之间添加空间呢,我们需要给.sidebar ul li{} 添加的10像素顶部和底部填充。为什

么不在第一个地方的 UL 标签增加10像素的填充呢?这样的话将会有20像素的顶部填

充和20像素的底部填充。如果你还是不明白,那么就去给.sidebar ul{} 增加顶部和底

部填充,就会看到问题的所在了。

第3步:样式化侧边栏下的子标题

在.sidebar ul li{} 下输入:

.sidebar ul li h2{

font-family: Georgia, Sans-serif;

font-size: 14px;

}

还记得我们已经样式化了在 .post{} 下的子标题,但是这个是不会对侧边栏的子标题起

作用的,因为前面我们仅仅样式化在 .post{} 下的子标题?现在我们是在样式化侧边栏

下的子标题,结果如下:

这就是我的页面链接的样子。可能默认安装下的 WordPrss 只有一个链接:About。

我的离线 WordPress 增加了多重页面链接是为了测试最低级别的链接看起的样子,注

意到我已圈出在底部有不必要额外的填充,这是一个非常好的关于样式继承的例子。

这里不是10像素而是20。

因为你给.sidebar ul li{} 增加了填充,为了解决这个问题,直行第4步。

第4步:清除子 UL 下的 LI 填充

在.sidebar ul li h2{} 下输入:

.sidebar ul ul li{

padding: 0;

}

在.sidebar ul ul li{} 中连续的UL 指明了我们是在定义第二级别的LIs。再说一次,

当所有的值都为 0 的时候,你不需要 px 这个后缀。

结果如下:

行距太近了,所以我们把行高改成 24px。

增加line-height: 24px; 到.sidebar ul ul li{}.

另外,如果你在 IE 下,搜索框下有多出了额外的空白,在下面增加 form:

body, h1, h2, h3, h4, h5, h6, address, blockquote, dd, dl, hr, p{

margin: 0;

padding: 0;

}

改成:

body, h1, h2, h3, h4, h5, h6, address, blockquote, dd, dl, hr, p, form{

margin: 0;

padding: 0;

}

第5步(可选的):扩展日历宽度到整个侧边栏

执行这一步,如果你想让你的日历的数据能够扩展并覆盖整个侧边栏的宽度。当前你

的日历应该是这样的:

为了样式化日历,找出在里面的标签和这个便签的名字或者 id。查看 > 页面源代码或

者源代码,侧边栏是在底部,所以到源代码的底部查找 Calendar。

现在我们知道日历是在一个TABLE 标签中并以wp-calendar 作为id。那么如何在

style.css 文件中锁定wp-calendar table 呢?

答案是table#wp-calendar{}。为什么?早前,你学了使用 # 号当样式化使用id 而不

是class 命名的 DIV。在这里,是table 而不是DIV,跟着是id 的值,wpcalendar

如果仅仅 #wp-calendar{} 也是可以的因为它是唯一的而且 WordPress 不会使用 #wpcalendar

给别的标签。但是你应该试着特定化当能够的时候。如果要更加特定化使用

.sidebar ul li table#wp-calendar{},想更加特定化?好的,使用.sidebar ul

li#calendar table#wp-calendar{}. 因为列表条目(LI)包含日历子标题和一个id 被

命名为 calendar 的日历表格。

现在你知道可以使用什么,如何怎么扩展 table,给表格加上width: 100%; 。

在.sidebar ul ul li{} 下输入:

table#wp-calendar{

width: 100%;

}

保存和刷新,结果如下:

width: 100%; 因为你想日历表格适应到侧边栏的宽度,无论你把侧边栏改成多少像

素。

可能这样看起来并不好,但是我相信你已经知道如何改进。日历需要更多的样式去看

起来更好。技巧:再次查看源代码,找出在TABLE 下的哪个标签你可以样式化。

WordPress 主题教程 #14:底部和拆分 Index

底部和拆分 Index是从零开始创建 WordPress 主题系列教程的第十四篇,这篇我们完

成对主题的样式化和开始把index.php 文件分成多个小文件。在这篇中,首先要对

style.css 文件进行修改,然后把index.php 分成一些新的文件。

打开 XAMPP,主题文件夹,Firefox,IE,index.php 和 style.css。

第1步:样式化 footer

给footer DIV 增加10px 顶部填充。你还记得如何增加填充?这次我不提供代码。

第2步:设置 footer P 的行距

给 footer 里的所有的P 标签18px 行距。那是#footer p{}.。(今天关于 CSS 的就这

么多。)

第3步:header.php

• 创建一个新文件,把它命名为header.php。

• 在index.php 文件中,把header DIV 及以上所有东西都拷贝到header.php

文件中。

这是我的header.php 文件。不要从我的这里拷贝,从你自己的index.php 文件拷

贝。

第4步:在 index.php 中导入 header.php

为了使所有从index.php 中拷出的内容依然在index.php 文件中,输入以下代码:

<?php get_header(); ?>

这是个 WordPress 主题系统特别用来导入header.php 文件的函数,而不用使用

PHP 的函数:<?php include (TEMPLATEPATH . ‘/header.php’); ?>.

保存并刷新浏览器,你应该看到没有变化。如果你的改变破坏了主题,那么肯定有错

误。

第4步:sidebar.php

• 和第4步一样,更多相同的事情。这次,创建sidebar.php 文件。

• 把index.php 文件中的Sidebar DIV 从开始到结尾都复制到sidebar.php 文

件中。

• 那么,在index.php 文件,将其取代为:<?php get_sidebar(); ?>.

• 保存并刷新浏览器,再一次,你应该看到没有变化。

• 这是我的sidebar.php 文件。

第5步:footer.php

• 为 footer.php 重复上面的步骤。

• 这是我的footer.php 文件。

教程回顾

• 创建了三个新文件:header.php,sidebar.php 和footer.php。

• 使用了三个新的函数:get_header(),get_sidebar() 和get_footer()。

• 下面是这节课结束之后的文件:index,style,header,sidebar,footer。

WordPress 主题教程 #15:子模板文件

子模板文件是从零开始创建 WordPress 主题系列教程的第十五篇,这篇将和像上一篇

创建 header.php,sidebar.php 和 footer.php 这些模板文件一样创建更多的子模板文

件。

现在index.php 文件已被拆分,这一切都变得更简单。

第1步:archive.php

在做这步之前,查看你的侧边栏,点击其中的一个存档链接,结果的页面是不是和首

页没有什么不同?

• 创建一个新文件:archive.php

• 把 index.php 中所有东西复制到 archive.php

• 保存 archive.php

• 在 archive.php 文件,把 the_content 改成 the_excerpt。

• 再次保存 archive.php 文件

通过创建一个 archive.php 文件并把它改成和 index.php 不一样,这就是定制化存档

页面的外观。

现在如果你刷新你的存档页面,它将只显示摘要而不是全文的日志。

为什么你想这么做呢? — 防止 Google 以为重复内容惩罚你的博客,如果一个存档页

面和首页显示相同的内容,那就是重复的内容。

如果是私人的博客呢?那么就没有必要去区分首页和存档页面。但这并不是说摘要对

私人博客没有用。

同样– 默认你的类别页面将使用 archive.php 显示内容,如果你没有 archive.php 文

件,类别页面将使用 index.php 显示内容。

如果你想类别页面和首页和存档页面看起来不一样,那么创佳一个 category.php 文件

并定制化它。

第2步:search.php

• 创建一个新文件:search.php

• 把 archive.php 中所有东西复制到 search.php

• 保存就完成了。

现在所有的,所有的搜索结果将会返回摘要。如果没有 search.php 这个模板文件,搜

索选项将会使用index.php 去显示搜索结果。

(可选)你可以返回到课程1去回顾者层次结构。

第3步:page.php 和 single.php

• 创建两个新文件:page.php 和 single.php

• 把 index.php 中所有内容拷贝到 page.php 和 single.php。(从现在开始,页

面和单篇日志应该是一样的。)

• 保存页面和单篇日志文件,关闭它们。

第4步:定制 page.php

还记得静态页面和页面之间的不同吗?page.php 模板文件是用来定制化这些特殊静态

静态页面。

第一,在 page.php 中的 <?php the_content(); ?> 下输入以下代码:

<?php link_pages(’<p><code>Pages:</strong> ‘, ‘</p>’, ‘number’); ?>

<?php edit_post_link(’Edit’, ‘<p>’, ‘</p>’); ?>

第二,从 page.php 中移除 postmetadata 代码。结果如下:

第三,在 page.php 中移除 posts_nav_link() 或者导航模块。

刚才发生了什么?

第一行代码是用于显示页面的分页链接。

举个例子,编辑About 页面。根据我的屏幕截图增加代码:

当你想把一个非常长的页面分成几个页面的时候,这是非常有用的。

第二行代码是用于显示可以用来编辑静态页面的编辑链接。

通常页面是没有分类,并且通常不想给他们显示创建时间,所以需要去移除

postmetadata。同样要移除 posts_nav_link() 代码因为静态页面不会显示后一页和前

一页的链接。

保存 page.php 文件并关闭它。

第5步:定制 single.php

点击一个日志的标题去阅读日志其余部分就会带你到单篇日志查看模式。single.php

模板就是用于处理查看单篇日志时的外观。

在 single.php 中的 <?php the_content() ?> 下输入:

<?php link_pages(’<p><strong>Pages:</strong> ‘, ‘</p>’, ‘number’); ?>

是的,这是相同的用于编码页面的分页链接的代码。同样我们也可以把日志分成多篇

子日志。

第二,在postmetadata 区域,移除 <?php comments_popup_link(); ?> 函数和前面

的<br /> 标签。不要移除整个 postmetadata。

移除了留言链接函数是因为在单篇日志查看模式下留言链接函数是不起作用,所以要

在 singel.php 文件中移除它。只有管理员可见的编辑链接,在BR 标签的左边。你不

想跳过一行才能看到这个本来你可以在右边看到链接?这就是移除BR 标签的原因。

第三,用以下代码取代 <?php posts_nav_link(); ?>:

<?php previous_post_link(’? %link’) ?> <?php next_post_link(’ %link ?’) ?>

在前面,存档,分类和搜索页面,我们使用 posts_nav_link() 函数去调用后一页和前

一页的链接。对于查看单一日志的页面,它是没有后一页和前一页链接的,我们可以

使用previous_post_link() 和 next_post_link() 函数去调用前一篇日志和后一篇日志

的链接。

保存 single.php 文件,到某篇日志下查看在导航区域的不同。

课程回顾

• 创建了四个新的文件或者或者子模板:archive.php,search.php,page.php

和single.php。

• archive.php 和 search.php 模板文件是相同的。

• Pages (和日志不同)是没有分类的,他们同样没有后一页和前一页的链接。

• Single.php 不会显示留言链接(被 comments_popup_link() 函数调用)并且他

不用 posts_nav_link() 去调用导航链接。

WordPress 主题教程 #16:留言模板

这篇教程是在 WordPress 2.7 之前撰写的,而 WordPress 2.7 之后支持了 Thread

Comments,这里有让你的主题实现 WordPress 2.7 的 Thread Comments 的方法。

但是还是建议你查看下这篇教程。

留言模板是从零开始创建 WordPress 主题系列教程的最后一篇。这篇将涉及到博客一

个比较重要的东西;评论模板。

你应该知道:

• 没有快速的方式在 comments.php 建立评论模板

• 大部分的 WordPress 设计者使用来自 WordPress 默认主题(Kubrick)的默

认评论模板根据。

• 一些设计者会修改默认的评论模板去适合他们自己的需求。

• 你将使用我的对默认评论模板的修改版本。

第1步:创建 comments.php

• 创建一个新文件:comments.php。

• 把我的comments.txt 文件中的内容复制到comments.php。

• 保存 comments.php 文件。

第2步:样式化留言

• 把我的comments-template-css 文件中的内容拷贝到你的style.css 文件中。

• 复制到 style.css 的底部或者刚好#footer 的上面。

第3步:在 single.php 添加留言模板

在 single.php 文件中,entry DIV 的下面,输入以下代码:

<div class=”comments-template”>

<?php comments_template(); ?>

</div>

comments_template() 这个函数是用来从comments.php 文件调用评论模板。

comments.php 文件然后就会根据它的模板(或者代码)去显示评论列表。列表中的

每个条目是一条评论。

如果想让人们可以在静态页面也可以留言,同样可以把 comments_template() 函数用

到 page.php 文件。

第4步:验证代码

第四步是验证你的代码,然而可以不进行第四步的,因为你在使用的是我已经整理过

的默认主题评论模板的修改版。我已经替你验证过代码了。

验证:

• 查看 > 页面源代码

• 拷贝所有源代码

• 然后到validator。

• 把你的代码粘贴到Direct Input 框中。

• 点击Check。

以后的参考(当你创建你自己的主题和评论模板),下面是需要验证的页面:

• 主页 — Home page

• 存档页面 — Archive pages

• 类别页面 — Category pages (如果你自定义了类别页面)

• 搜索结果页面 — Search result pages

• 静态页面 — Pages (如:About)

• 单一日志页面 — Single post view page

• 单一日志没有留言 — Single post with no comments

• 单一日志有留言 — Single post with comments

• 单一日志含有必须登录信息 — Single post with must login message

• 单一日志没有必须登录信息 — Single post with no login required message

• 密码保护的单一日志并有留言 — Password protected single post with

comments

评论模板的进一步解释

• 评论模板从根本上说是一个有序列表(OL),不是无序的,尽管它们基本上

同样方式工作。 无序列表是以圆点列表组织的。有序列表则是以数字列表组

织的(每个条目都有一个数字,从1开始)。

• 在single.php 文件中,你用comments-template DIV 围

住comments_template()。现在你的评论模板在一个 DIV 标签中的一个有序

列表中。

当你你的日志是密码保护的,你的评论同样是密码保护的:

这个修改版的留言模板有一个 H2 子标题显示Password Protected。默认的留言模

板是没有的。

下面展示了哪些东西组成了你的留言列表:

简单整理下就是:

comment_text() 函数就是用来调用每条留言的。

我不会解释留言模板的 CSS 代码的意思。不像 comments.php 文件中的代码,你可

以随便测试你的 CSS 代码而不会弄坏留言模板。自己去测试回比我的解释对你更有

好处。

今天没有课程回顾,你已经完成了 WordPress 主题制作教程。

erdaoo 的 WP Theme 教程学习笔记

本文由erdaoo 学习本站的 WP Theme 教程之后的学习笔记整理,经本站整理,

erdaoo 本人同意之后在本站发表,以便给更多学习 WP Theme 教程的人帮助。

学习本教程,需要:

1. 对PHP,WP,CSS,PS有一定的基础,懂得初步的应用。

2. 你是一个想要表现自己的家伙,并且不想再使用别人制作的主题。

3. 你要有耐心,细心,细心,耐心。

WP 主题简介

在详细分解代码之前,我们还是要先了解一下WP主题的大致情况。一个 WP 的主题

是由几个 templates 文件组成的,每一个主题必有的二个文件是:index.php 和

style.css(样式表),除此之外还有一些其它的文件(不是必须),它们和 index.php

文件间存在优先级关系,如果它们存在,WP 模板系统就会调用它们显示相应的页

面,否则模板系统会调用 index.php 来显示。

它们有可能是以下文件:

• single.php — 单一日志文件,用于显示单一日志

• page.php — 页面模板文件,用于显示静态页面

• archive.php — 存档文件,用于显示存档页面

• category.php — 类别文件,用于显示类别页面

• search.php — 搜索文件,用于显示搜索结果

• 404.php — 错误文件,用于显示404页面

• comments.php — 评论文件,用于显示评论和评论框

index.php

首先制作index.php,我们知道在一个网页中,代码主要分为二部分,一个是页头信

息,一个是页面内容。

<html>

<head>

………页头信息

</head>

<body>

………页面内容

</body>

</html>

每个主题的页头信息都是几乎一样,具体可以查看默认模板的 header.php 文件(为

保证所有页面的页头信息的一致性,所有页头信息都放在 header.php 文件。)

接下来我们谈下一话题,关于母猪的产后护理……(我学的太杂了,都弄混了)

我们来谈一下body中的内容。

它包含四个部分,每一部分都可以叫做一个集成模块,其实一个主题就是由不同的模

块构成,模块又是由不同的模块构成。

• header WP 的顶部,显示博客的名字与描述,放置导航栏,搜索栏等等。

• content WP 的正文部分,显示贴子的内容,作者,时间,分类,评论,编辑

等等。

• sidebar WP 的侧边栏部分。

• footer WP 的尾部,这部分只有很少的内容,通常是版权信息。

对于每一个集成模块中的内容,理论上是可以随意放置的,比如我们可以把header模

块中的搜索栏放在sidebar模块中去。

那如何区分这四个集成模块呢?看以下代码。

<div id=”header”>

这是我的博客

</div>

<div id=”content”>

这是我的日志</div>

<div id=”sidebar”>

搜索栏,分类,存档,友情链接

</div>

<div id=”footer”>

版权信息,我是二道

</div>

通过 div 标签,我们可以把这些模块分隔开来。

header

现在开始我们第一部分的代码块,不过在写代码之前我还得要啰嗦一句,写代码要有

层次感,要记得缩进,不要用空格缩进而用TAB键。

<div id=”header”>

<h1><a href=”<?php bloginfo(‘url’);?>”><?php

bloginfo(‘name’);?></a></h1>

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

</div>

id 是 div 的一个属性,给 id 赋于不同的值,这样就可以区分每一个div代码段。

bloginfo() 是 WP 中定义好的函数,参数 url 返回网址,参数 name 返回网站的名字,

参数 description 返回网站描述。

在上面的代码中,就是为博客的标题并加上一个超链接,并且显示描述。

如果我们把上面的三行代码加上页头部分另存为一个新的文件 — header.php。这样我

们就可以通过以下 WP 函数导入它们。

<?php get_header(); ?>

这样的好处是,你只要修改一下header.php文件,所有调用这个文件的页面都会跟随

改变,而不用一个一个地去修改了。

content

现在开始我们第二部分的代码块:

<div id=”content”>

<?php if(have_posts()) : ?>

<?php while(have_posts()) : the_post(); ?>

<?php endwhile; ?>

<?php endif; ?>

</div>

这里使用if(have_posts() 来检测是否有日志存在,如果有的话,就用 while 循环显

示。the_post() 就是调用日志的函数。

而每一篇日志又是有标题,有发布时间,有分属类别,有读者的评论,这些又全部需

要用 div 标签来分隔开。看下面的代码:

<div id=”content”>

<?php if(have_posts()) : ?><!–开始检测–>

<?php while(have_posts()) : the_post(); ?><!–以下面的格式显示每篇日

志–>

<div>

<h2><a href=”<?php the_permalink();?>”><?php the_title();?></a></h2><!–

含有链接地址的日志标题–>

<div>

<?php the_content();?><!–日志内容–>

<p><!–日志元数据–>

<?php _e(‘Filed under:’);?>

<?php the_category(‘,’);?><!–调用日志的分类–>

<?php _e(‘by’);?><!–使用_e()创建可翻译的主题–>

<?php the_autnor(”);?><!–调用日志作者–>

<br />

<?php comments_poopup_link(‘No Comments?’,’1 Comments?’,’%

Comment?’);?><!–调用一个弹出的留言窗口,如果这个功能没有激活,则是显示

留言列表–>

<?php edit_post_link(‘Edit’,’|’,”);?><!–只有在登陆后才可见到,对日

志进行编辑的链接–>

</p>

</div><!–日志内容结束–>

</div><!–一篇日志彻底结束–>

<?php endwhile; ?>

<?php endif; ?>

</div>

class

现在我们得要说说 class 了,它是与 id 都是标签的属性,但是不同之处在于,id 的参

数值是唯一的,它在一个页面只能使用一次,而 class 的参数值是可以多次使用,

比如 id=”header” 只能出现一次,因为我们只有一个地方可以出现博客的名字。而

class=”entry” 会经常出现,那是因为我们的博客里不只是有一篇日志。

为什么我们要用到 id 与 class,难道只用一个不行吗,反正功能都是相同的。不要忘

了我们前面说过的一个重要文件,style.css 样式表文件。我们为某一段代码添加了属

性,如同起个名字而已,这样在样式表中我们就可以为这些名字来定制它们的样式

了。

这样说你还不明白?那就打个最简单的比方吧,你可以有很多的兄弟,但是你们只能

有一个爹,你不能用你爹的名字叫你的兄弟,但是你爹可以用你兄弟的名字叫你。样

式表文件就和你奶奶一样,你爹再牛逼也得听你奶奶的话,叫他怎么样他就得要怎么

样。(老大你这个比喻寒啊,瀑布寒!!)

Not Found

前面的代码中有说到,如果检测到有日志的话,就用循环调出来,可是如果没有日志

的话那要怎么样呢?

<?php else:?>

<div id=”post-<?php the_ID(); ?>”>

<?php _e(‘Not Found’);?>

</div>

把这一段代码加在<?php endwhile; ?> 之后就可以了。

页面导航

当你的博客内容越来越多的时候,在 WP 的后台又设定了首页只显示10个日志,那么

从第11个开始都无法在首页显示出来。

这样在博客的最后一篇日志下面就会出现后一页或前一页的链接。如果你还不到10个

日志,这个链接就不会出现。

把下面的代码加入到<?php endif; ?> 前面

<div>

<?php posts_nav_link(); ?>

</div>

分析一下 posts_nav_link() 这个 WP 函数,它可以有三个参数:<? posts_nav_link(‘in

between’,’before’,’after’),第1个参数是显示在后一页和前一页链接的中间。第2个参数

显示在后一页和前一页链接的前面。第3个参数显示在后一页和前一页链接的后面。用

什么来显示,你自己决定,常用的就是一些符号或是箭头而已嘛。

现在再看一下我们已经有了哪些个代码:

<?php get_header(); ?>

<div id=”content”>

<?php if(have_posts()) : ?>

<?php while(have_posts()) : the_post(); ?>

<div>

<h2><a href=”<?php the_permalink();?>”><?php the_title();?></a></h2>

<div>

<?php the_content();?>

<p>

<?php _e(‘Filed under:’);?>

<?php the_category(‘,’);?>

<?php _e(‘by’);?>

<?php the_autnor(”);?>

<br />

<?php comments_poopup_link(‘No Comments?’,’1 Comments?’,’%

Comment?’);?>

<?php edit_post_link(‘Edit’,’|’,”);?>

</p>

</div>

</div>

<?php endwhile; ?>

<div>

<?php posts_nav_link(); ?>

</div>

<?php else:?>

<div id=”post-<?php the_ID(); ?>” >

<?php _e(‘Not Found’);?>

</div>

<?php endif; ?>

</div>

</body>

</html>

*********************************************************************************************

写教程不是一个简单的事,它不光让我心烦,还让我难以找到适当的词来表达,所以

要体会一下当老师的难处。

*********************************************************************************************

侧边栏

第三部分,关于侧边栏。侧边栏有一个特点,就是又臭又长,当然了这不是什么缠脚

布。先不要乱扯。因为地形有限,所以侧边栏里的内容,多以列表的形式排开。下面

欢迎一对父子出场,他们的感情是相当的好,从来都是父子不分家,有父必有子,有

子必有父,父中有子,子中有父。他们就是<UL>和<LI>!!!!!!!

<div><!–注意这里使用的不是id–>

<ul>

<li>

<h2><?php _e(‘日志分类”); ?></h2>

</li>

</ul>

</div>

UL 表示无序列表,OL 表示列表元素。在侧边栏里,你要有几个不同的栏目,栏目的

存在,就是为侧边栏进行了分类整理。每一个栏目又要有不同的分类列表,继续为上

面的代码添加内容。

<div>

<ul>

<li><h2><?php _e(‘日志分类’); ?></h2>

<ul>

<?php wp_list_cats

(‘sort_column=name&optioncount=1&hierarchical=0’); ?>

</ul>

</li>

</ul>

</div>

wp_list_cats() 函数为调用日志分类列表,它的参数也有三个。每个参数之间用&来分

隔。

sort_column=name — 把分类按字符顺序排列

optioncount=1 — 显示在每个分类下面的日志数

hierarchial=0 — 不把子分类放到子列表条目中

说到分类,特别说一下静态页面这个栏目。我们在WP后台撰写的时候,有二个选

择,一个是撰写日志,一个是撰写页面。对于日志,还可以选择保存在哪一个具体的

分类下面。对于页面就没得选择,只收录于页面栏目之下。 再回到前台,你可以看到

每个分类都有显示日志的数目,而不显示标题。在页面栏目里,只排列了每一个页面

的标题,而不显示数目。

<?php wp_list_pages(‘depth=3&title_li=”<h2>页面</h2>”‘); ?>

参数depht=3为可选参数,表示可以设定显示三级列表。

注意一点,本教程的代码是制作模版的代码(PHP 代码),在WP中使用一个主题也

就是等于在套用一个模版。在网站中查看源代码是看不到模版的代码的(已经被解释

成 HTML 代码)。

<li><h2><?php _e(‘日志分类’); ?</h2>

<ul>

<?php wp_list_cats

(‘sort_column=name&optioncount=1&hierarchical=0’); ?>

</ul>

</li>

上面这一段模版代码,在网页中查看源代码,实际上显示的是这样的:

<li><h2>文章存档</h2>

<ul>

<li><a href=”#”>与爱情有关的分类贴子</a></li>

<li><a href=”#”>与生活有关的分类贴子</a></li>

…………………………. </ul>

</li>

增加一个存档栏目:

<li><h2><?php _e(‘文章存档’); ?></h2>

<ul>

<?php wp_get_archives(‘type=monthly’); ?>

</ul>

</li>

wp_get_archives() 函数是用来获取文章存档的,参数’type=monthly’定义为以每个月

的时间来进行分类存档

增加一个友情链接栏目:

<?php get_links_list(); ?>

不用担心没有实际内容,它会自动调用在 WP 后台中添加的友情链接。

增加一个搜索栏目:

<li id=”search”>

<?php include(TEMPLATEPATH. ‘/searchform.php’); ?>

</li>

这里使用 include() 函数调用一个文件,参数 TEMPLATEPATH 为主题文件夹路径,

为了调用成功,你还需要有一个文件:searchform.php。

增加一个日历栏目:

<li id=”calendar”>

<h2><?php _e(‘日历’); ?></h2>

<?php get_calendar(); ?>

</li>

这里就不用多废话了。

增加一个管理栏目:

<li>

<h2><?php _e(‘管理’); ?></h2>

<ul>

<?php wp_register(); ?>

<li>

<?php wp_loginout(); ?>

</li>

<?php wp_meta(); ?>

</ul>

</li>

wp_loginout() 来确定你是否登陆,如果登陆就显示登出链接,如果没有登陆,就显示

登陆的链接。

wp_register() 来确定你的身份,如果没有登陆,就显示注册的链接,如果有的话,就

显示管理的链接。

而wp_meta() 却是什么也没有做。也不用去理它,还没有人来说明它是起什么作用

的。实际上它是 WordPress 的hook。

窗体化侧边栏

<?php /* Widgetized sidebar, if you have the plugin installed. */

if ( !function_exists(‘dynamic_sidebar’) || !dynamic_sidebar() ) : ?>

在侧边栏开始的地方第一个<ul>的后面,加上以上代码。也要在侧边栏结束的地方

</ul>前面加上一句

<?php endif; ?>

从 WP2.0 开始,已经在后台集成了一个侧边栏的插件--Widget,它的功能就是可

以很方便的在WP后台调整侧边栏中的内容,直接使用鼠标就可以移动每一个栏目的

位置,而不需要去修改相应的代码。让每一个栏目都以窗体化存在。

function_exists(‘dynamic_sidebar’) || !dynamic_sidebar()) 这两个参数来自于一个新的

文件 — functions.php 我们需要创建这个文件才可以完成侧边栏的窗体化.。

通过观察不同的WP主题,会发现在侧边栏中的内容远不止以上所列举的,

要在学习中举一反三,才会制作出更加出众的主题。

至此,侧边栏中的内容结束,我们也可以把第三部分的代码另存为一个新的文件 —

sidebar.php,在index.php中填加一句代码就可以使用侧边栏

<?php get_sidebar(); ?>

顺便再增加一行代码:

<?php get_footer();?>

这是调用尾部文件 footer.php 的代码。我想你应该知道如何处理一个简单的 PHP 文

件了,要么你就再重头学一次本教程。

再一次查看一下index.php有了哪些代码

<?php get_header(); ?>

<div id=”content”>

<?php if(have_posts()) : ?>

<?php while(have_posts()) : the_post(); ?>

<div>

<h2><a href=”<?php the_permalink();?>”><?php the_title();?></a></h2>

<div>

<?php the_content();?>

<p>

<?php _e(‘Filed under:’);?>

<?php the_category(‘,’);?>

<?php _e(‘by’);?>

<?php the_autnor(”);?>

<br />

<?php comments_poopup_link(‘No Comments?’,’1 Comments?’,’%

Comment?’);?>

<?php edit_post_link(‘Edit’,’|’,”);?>

</p>

</div>

</div>

<?php endwhile; ?>

<div>

<?php posts_nav_link(); ?>

</div>

<?php else:?>

<div id=”post-<?php the_ID(); ?>” >

<?php _e(‘Not Found’);?>

</div>

<?php endif; ?>

</div>

<?php get_sidebar(); ?>

<?php get_footer();?>

index.php 文件的代码已经全在这里了,但是只有第二部分内容需要详细的代码,而

其它的部分我们都可以调用外部文件,至此一个 WP 的主题构造已经搭建好,再一次

提醒各位,检查代码,确认书写正确。只有不厌其烦地写代码才会对代码有更深刻的

印像。

其他文件

下面开始创建其它文件

将index.php的全部代码另存为archive.php,并且把 the_content 改成 the_excerpt,

创建存档文件,它会显示在分类栏目下的每篇日志的摘要。

将archive.php另存为 search.php,创建搜索文件,这样就可以在搜索中得到每篇文章

的摘要。

将 index.php 的全部代码另存为 page.php,创建页面模板文件,在<?php

the_content(); ?> 下面输入以下代码:

<?php link_pages(‘<p><strong>Pages:</strong> ‘, ‘</p>’, ‘number’);

?>

说明:如果一个页面,篇幅超长的话,我们可以把它截断分成几页来显示,

<?php edit_post_link(‘Edit’, ‘<p>’, ‘</p>’); ?>

说明:显示一个可以编辑的链接

删除掉<p> 至</p> 这一块的代码

删除掉以下代码:

<div>

<?php posts_nav_link(); ?>

</div>

说明:对于静态页面,它没有属于哪个分类,我们也不希望被某人评论,当然它也不

能显示与另一个页面间的连接,所在要去掉一部分代码。

将index.php的全部代码另存为single.php,创建单篇文章文件,点击文章的标题,可

以查看全文内容。在<?php the_content(); ?> 下输入:

<?php link_pages(‘<p><strong>Pages:</strong> ‘, ‘</p>’, ‘number’);

?>

这段代码和上一例相同,都是可以用来截断文章。

删除以下代码:

<br />

<?php comments_poopup_link(‘No Comments?’,’1 Comments?’,’%

Comment?’);?>

把<?php posts_nav_link(); ?> 替换成<?php previous_post_link(‘? %link’) ?> <?php

next_post_link(‘ %link ?’) ?>

说明:在单篇文章的下面显示的应是上一篇与下一篇的链接,而不是上一页与下一页

的链接。

如何处理留言评论?

想一想,每一个留言评论都是对于一个文章而产生的,所以只要在单篇文章页面里添

加一个调用评论的函数就可以。

在 single.php 文件中<div> 代码块结束的</div> 下面,输入以下代码:

<div>

<?php comments_template(); ?>

</div>

comments_template() 这个 WP 函数是用来从 comments.php 文件调用评论模板。所

以我们还要创建一个comments.php 文件。

WordPress函数简明教程


通俗易懂的WordPress函数简明教程

这是一篇通俗易懂的WordPress函数简明教程,原文来自月夜的《用好WordPress不可不知的函数》,文章作者将长期积累的WordPress函数知识,用自己语言简明扼要的对WordPress常用函数进行讲解描述,阅后帮助颇大,忍不住贴过来,相信看过这篇教程的童鞋从中会获得很多WordPress函数知识。原文章分为七个小节,这里编辑为一篇,因为文章很长作了分页。

(一)

        WordPress是目前十分流行的独立博客程序,因傻瓜化安装和使用,其在网民中的应用已近乎普及。但也因为很多新入门的用户几乎对WordPress程序没有任何了解,造成使用中碰到问题无法解决,求助也十分不易。而且,根据 月夜 的经验,WordPress用户学习了解并掌握一些基本的WordPress知识尤其是WordPress中功能强大使用方便的函数会极大地方便自己的应用,从而定制一个自己心仪的独立博客。

        在这一系列文章中,月夜试着将自己在长期的WordPress生涯中摸索积累的WordPress函数以自己的语言与朋友们分享,希望这一系列文章能够为朋友们使用WordPress程序带来方便。

        在讲述下面的WordPress函数之前,我们需要明确这样一点,所有的WordPress函数都是已经定义好的PHP函数,它们都需要写在PHP 语句中(<?php ?>)才能执行;而且,所有这些函数在PHP语句中都应以分号”;”结尾。其实,为了用好这些函数,为你的WordPress服务,你最好具有 PHP语言的基础。

1.bloginfo()

顾名思义,该函数主要用来显示博客信息;而且根据参数的不同,可以用来显示博客信息中的不同部分。常用的有以下几种:

bloginfo(’name’) 显示博客题名,如“月夜”;默认(不写参数)输出该项;

bloginfo(’description’) 显示博客描述部分,如“分享网络知识·享受快乐生活”;

bloginfo(’url’) 输出博客URL地址,如http://www.yueye.org;

bloginfo(’rss2_url’) 显示博客的RSS2.0 feed地址,如http://www.yueye.org/feed;

bloginfo(’template_url’) 用来获取WordPress博客的模板地址;

bloginfo(’charset’) 显示博客的编码方式,如“UTF-8”;

一种常见的使用bloginfo()函数的组合如下:

<a href=”<?php bloginfo(’url’); ?>” title=”<?php bloginfo(’description’); ?>” ><?php bloginfo(’name’); ?>

在月夜博客中,如上信息输出形如月夜的样式。这种形式通常会用来添加博客的底部信息,如Copyright @ 月夜,经常在主题模板中使用。

需要注意的是bloginfo()函数只能输出显示这些参量,如果你想在PHP语句中使用得到的这些值,则需使用get_bloginfo()函数,该函数和bloginfo()使用相同的参数,获得相同的结果。

2.wp_title()

该函数用来显示页面的标题,如在文章页面,则显示文章标题;在分类页面,则显示分类名称;等等。

wp_title()函数可以跟三个参数,即wp_title(’separator’,echo,seplocation),其中 separator是title和其余部分之间的分割符号,默认是>>;echo是个bool变量,取true显示标题,取false则将标 题作为一个PHP参量返回;seplocation定义分隔符的位置,取right定义分隔符在标题后面,取其他任何值,都表示将分隔符放在标题前面。

比如形如主题文件夹下header.php中的一段代码:

<title>
<?php wp_title(’ | ‘,true,’right’); ?>
<?php bloginfo(’name’); ?> – <?php bloginfo(’description’); ?>
</title>

在博客首页可以显示这样的效果“月夜 – 分享网络知识·享受快乐生活”;在文章页,可以显示这样的效果“用好WordPress不可不知的50个函数 | 月夜 – 分享网络知识·享受快乐生活”;而在分类页面,则可以显示这样的效果“网站相关 | 月夜 – 分享网络知识·享受快乐生活”;等等。

3.wp_get_archives()

该函数用来获取博客的文章存档,通过设置函数的参数,可以按各种方式获取,如按月,按年等等。

wp_get_archives()函数后面同样可以跟多种参数,只不过所有参数都需要使用&连接,并放在单引号(’)中以字符串方式传递 给函数,形如wp_get_archives(’type=monthly&format=html& show_post_count=1&limit=10′)。

如上的参数意义描述如下:

type=monthly表示按月显示文章存档,可以使用yearly、daily、weekly等代替monthly表示按年、日、以及周显示文章存档;

format=html表示使用通常的HTML中<li>格式化文章列表;

show_post_count=1表示在文章存档后面显示属于该类别(年、月等)的文章数量,该参量是个bool值;

limit=10表示显示的文章存档的最大数量为10,超过次数,则超出部分不显示;

尽管参数稍多,显得略为复杂,但其实只需注意type、show_post_count以及limit等三个参量即可。

4.wp_list_categories()

和wp_get_archives()函数类似,wp_list_categories()函数用来获取博客文章的分类信 息,并可以通过设置适当的函数参数,将其显示出来。该函数的参数和wp_get_archives()函数类似,都需要使用&连接,放在单引号 (’)中以字符串方式传递。形如wp_get_archives(’orderby=name&order=ASC& show_count=1&use_desc_for_title=1&feed=订阅&exclude=2,5& number=10′)。

如上示例中,函数各参数的意义如下:

orderby=name表示按照分类名称的字母先后顺序显示分类信息,可以将name换为ID等;

order=ASC表示按照分类名称的字母的升序显示分类信息,将ASC改为DESC表示按降序;

show_count=1在每个分类名称后面显示属于该分类的文章数;

use_desc_for_title=1使用该分类的描述信息为每个分类名称超链接添加一个title属性;

feed=订阅:在每个分类信息旁边添加一个名为“订阅”的超链接,提供该分类的RSS订阅;

exlude=2,5:在显示的分类中去除ID为2和5的分类;也可以用include=2,5表示只显示ID为2和5的分类;

number=10:表示只显示最先的10个分类。

5.get_the_category()

get_the_category()函数用来返回当前文章所属的类别的若干属性所组成的一个数组,该数组包括以下内容:

cat_ID:当前类别的ID(也可以写作’term_id’);

cat_name:当前类别的名称(也被写作’name’);

category_description:当前分类的描述(也可以写作’description’);

category_count:属于当前分类的文章数量(也被写作’count’)。

具体的使用方法,我们通过下面的几个句子来说明:

形如get_the_category()->cat_ID的语句,返回当前文章所属分类的ID号;

形如get_the_category()->description的语句,返回当前文章所属分类的描述;等等。

6.the_category()

该函数返回当前文章所属的类别名称,而且是文章类别的超链接形式。

默认的无参数形式the_category()直接以超链接形式显示类别名称,显示为:精品推介;

可以在函数中跟上分隔符等参数来格式化输出,如the_category(’-‘),若当前文章属于两个以上分类,可以显示这样的形式:精品推介-经验知识;如只属于一个分类,则显示为这样的形式:精品推介。

7.category_description()

该函数以分类的ID为输入,得到该分类的描述。常和echo、get_the_category()配合使用,将当前分类描述输出:

echo category_description(get_the_category()->cat_ID);

如上语句,get_the_category()得到保存有当前分类信息的一个数组;cat_ID为该数组中该分类的ID;将该ID输入给category_description()函数,即可得到该分类的描述;然后使用echo将其输出。

但经月夜试验,使用如下的语句可以实现和上面语句相同的功能:

echo category_description();

这可能是因为该函数在默认无参数输入的情况下会输出当前分类描述的结果吧。

 在前面的文章中,月夜已经为你讲述了WordPress的几个非常有用的函数,比如bloginfo()用以输出显示博客信息;wp_title()用以显示页面标题;以及如 wp_list_categories()等几个WordPress分类处理的函数;等等。本文,月夜接着前面的文章继续为你介绍WordPress函 数;今天,我们主要来介绍一些WordPress的条件函数,用以判断是否满足了某些条件,比如,当前是否在首页;当前是否是某位作者,等等。

8.is_home()

is_home()用以判断当前显示的博客页面是否是博客首页,返回的是一个Bool值。如果是在首页,则返回TRUE;否则返回FALSE。

该函数常用来控制博客侧边栏的显示方式,经常使用如下代码段:

<?php
if ( is_home() ) {
//此为在博客首页应该显示的内容
} else {
//此为非博客首页应该显示的内容
}
?>

9.is_archive()

is_archive()用以判断当前显示的内容是否是博客存档页面,比如按日期的存档,或者按分类的存档,等等;其和is_home()函数一样,返回一个Bool值。

10.is_page()

is_page()函数判断当前显示的内容是否是博客的独立页面(page),如“月夜私语”、“关于月夜”等页面;它也返回一个Bool值。

我们可以在模板中通过该函数判断当前是否是一个独立页面,从而决定是否为当前显示的文章显示发布时间等等。

11.is_paged()

该函数用以判断当前文章是否因为内容过多而分页显示;需要注意的是,如果你在写文章时手动添加了<!–nextpage–>标签,来强制分页的话,该函数并不会因此而返回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()函数用以判断当前是否在控制面板页面,或者管理员面板页面。

在前面的文章中, 月夜为你介绍了用好WordPress不可不知的前近20个函数,那些函数主要包括获取博客信息的函数,获取博客内容的函数以及一些用于判断是否能满足相 应条件的条件函数,等等。今天,月夜继续为你介绍WordPress的重要函数。本文中将要介绍的函数除get_bloginfo()外,几乎全部都是将 用在WordPress主题的侧边栏上的一些函数,比如get_posts()等等。

20.get_bloginfo()

该函数和我们前面的文章用好WordPress不可不知的函数(一)中介绍的bloginfo()函数实现近乎相同的功能。主要用来显示博客的信息;而且根据后跟参数的不同,会输出博客的不同信息。

其后不跟参数时,get_bloginfo()可以显示博客名称,形如“月夜”;

后跟其他参数时,可以显示对应的信息,比如get_bloginfo ( ‘description’ )用以显示博客描述信息;

其他还可以使用的参数包括name、url、wpurl以及admin_email等等。但因为其与bloginfo()函数实现相同的结果,所以,在bloginfo能够实现的情况下,月夜不推荐使用get_bloginfo()函数。

21.query_posts()

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″)意义如下:

order=ASC表示按照升序排列,取为DESC则表示按降序;

showposts=10则表示获取10篇文章;

offset=1表示取最新的文章;

orderby=date表示将文章按照日期排序;

posts_per_page=5表示每页显示5篇文章。

需要注意的是该函数只是将文章内容从MySQL数据库中查询出来,要将其显示,还需要与其他语句配合,比如一个经常在侧边栏中使用的形式如下:

<li><h2>最近文章</h2>
<?php query_posts(’showposts=5&offset=1′); ?>
<ul>
<?php while (have_posts()) : the_post(); ?>
<li><a href=”<?php the_permalink(); ?>” title=”<?php the_title(); ?>”><?php the_title(); ?></li>
<?php endwhile;?>
</ul>
</li>

如上的这段代码用以在侧边栏的指定位置上显示最新的5篇文章。

query_posts()函数后面可以跟众多种类的参数,功能十分强大,在此,我们不进行过多介绍。如果时间和精力允许,月夜会在以后的文章中专门撰文详细地为朋友们做一介绍。

22.get_posts()

该函数和query_posts()函数功能大体相同,都是用来从数据库中查询并得到符合某条件的文章。不过get_posts()函数的使用有一个固定的形式,如下:

<?php
$lastposts = get_posts(’numberposts=5′);
foreach($lastposts as $post) : setup_postdata($post);
?>
<h2><a href=”<?php the_permalink(); ?>” id=”post-<?php the_ID(); ?>”><?php the_title(); ?></h2>
<?php the_content(); ?>
<?php endforeach; ?>

即首先使用get_posts()函数查询得到文章数据,然后使用形如foreach($lastposts as $post) : setup_postdata($post);的循环将查询得到的文章内容显示出来。

get_posts()函数使用和query_posts()函数相同的参数,在此我们也不再作详细介绍。

23.wp_list_cats()

该函数和前文用好WordPress不可不知的函数(一)中wp_list_categories()函数实现相同的功能,不过在最新的WordPress版本中,此函数已经被弃用,其功能为wp_list_categories()函数完全取代。

24.get_calendar()

get_calendar()函数用以在WordPress上显示日历,日历样式和使用widget显示的效果相同,如下图所示:

其后可以跟一个BOOL参数,用以控制日历上方星期的显示样式。但经月夜测试,在中文状态下,使用TRUE或FALSE参数,日历的显示效果并没有什么区别。

从上一篇开始,我们就转而介绍了经常用于WordPress主题侧边栏的一些函数,比如query_posts()、get_posts()、get_calendar()等等。本文,月夜 接上文继续为朋友们介绍WordPress侧边栏常用的一些函数。

25.wp_list_bookmarks()

该函数用来显示博客的友情链接,并可以使用各种参数来控制显示的数量、种类以及样式等等。

形如wp_list_bookmarks(’title_li=&categorize=0&orderby=rand&include=41,40,37,54′);的形式,意义解释如下:

title_li=&categorize=0是一种通常使用的组合,意为不显示WordPress后台控制面板中设置的友情链接标题,但所有友链都按照设置的分类显示出来;单独的一个title_li=还可以用来设置被显示友链的类别名称;

orderby=rand设置友链的显示方式为随机顺序,当然,还可以设置为其他的方式,比如id、url、name等等;

include=41,40,37,54表示只显示ID为这四个数字的四个友链;与此对应,还支持使用exclude,表示不显示ID为多少的友链。

此外,该函数还经常用到的参数有before和after,用来设置每个链接前后的文字,默认的是<li>和</li>标记。

26.get_links()wp_get_links()

这两个函数实现和25.wp_list_bookmarks()相同的功能,不过此二函数已在WordPress升级的过程中为25.wp_list_bookmarks()所取代。

27.wp_list_pages()

该函数以页面名称的超链接形式显示WordPress博客内的所有页面,经常用来建立顶端导航页面,或用来修饰侧边栏。

形如wp_list_pages(’title_li=&sort_column=menu_order&include=12,25,38,57&depth=1&’);的函数调用,各参数意义如下:

title_li=用来设置所有显示页面的一个总名称;后面没有参数值时,表示不显示名称;

sort_column=menu_order用来设置页面的显示顺序,表示按照WP后台设置的各页面顺序显示,其他的常用顺序设置可能还包括post_title、post_date、ID等等;

include=12,25,38,57表示只显示ID为这四个数值的四个页面;同样,可以使用exclude来排除相应ID的页面;

depth=1表示只显示父页面,对所有子页面不予显示;其他数值还包括默认的0,表示显示所有页面(子页面有缩进);-1显示所有页面(子页面无缩进);等等。

此外,该函数可能会用到的属性还包括link_before和link_after,用于设置显示的页面链接前后的字符。

28.wp_tag_cloud()

顾名思义,wp_tag_cloud()函数用来显示WordPress博客的标签云。

一种形如wp_tag_cloud(’smallest=8&largest=22&number=30&orderby=count’);的函数调用,各参数的意义如下:

smallest=8用来设置标签云中显示出来的所有标签中,计数最少(最少文章使用)的标签的字体大小为8;

largest=22用来设置标签云的所有标签中,计数最多(最多文章使用)的标签的字体大小为22;

number=30设置标签云中显示的最多标签数量为30;

orderby=count设置标签云中标签的排序方式为计数(默认),而不是名称(相应参数为name,widget调用时的默认值)。

其他常用的参数还包括include和exclude,用来设置在标签云中是否包含或去除ID为某数字的标签。

继前文月夜为你介绍的一些WordPress主题侧边栏函数,如友链显示函数、标签云函数等之后,本文,我们继续为你介绍在制作或修改WordPress主题过程中, 经常会在侧边栏中使用的函数。当然,相比前文中的函数,本文所介绍的部分重要性较低,但仍然是构成WordPress主题侧边栏所不可缺少的函数。

29.wp_register()

wp_register()函数用以向管理员显示“站点管理”超链接;或者当WP博客开放了注册时,向未登陆的用户显示“注册”超链接。

该函数不需要什么参数,唯一可能用到的参数形式如wp_register(’前’,’后’),可以在如上显示的超链接文字的前后分别显示一个“前”字和一个“后”字。当然,你可以据此发挥想象力来个性化自己网站的管理或注册链接。

30.wp_loginout()

该函数用来在指定位置显示一个“登录”链接;当然,如果你已经登录过了,则会相应地显示一个“退出”链接。此函数后面不使用任何参数,所以无法进行灵活的自定义。

不过如果你想自定义自己的WP博客的登录或退出链接文字的话,还是可以使用下面31中 月夜 介绍的函数wp_logout_url()和wp_login_url()。

31.wp_logout_url()wp_login_url()

使用如上30中的函数尽管可以方便地为WP博客设置登录、退出链接,但自定义不够灵活。所以,从WordPress 2.7版本开始,提供了这里的两个函数。它们分别用来获取WP博客退出或登录超链接,然后,我们使用获得的超链接即可编写如下代码,来对WP博客的登录和 退出链接进行灵活设置:

<a href=”<?php echo wp_logout_url(); ?>”>点击这里退出

<a href=”<?php echo wp_login_url(); ?>”>点击这里登录

当然,要想实现完美的效果,还需要对访客的登录状态进行判断,使用一个if语句,根据登录状态显示相应的菜单项。

32.wp_meta()

该函数通常会紧跟如上29、30中的函数后面,其具体在直观显示上没有什么异样,貌似是WP主题为WP插件留下的API Hook,月夜建议朋友们在如上函数后面跟上这一函数。

33.get_recent_posts()

该函数只有当你安装了中文WordPress工具箱之后,才能使用。其作用是用来获取最新日志,函数原型如下:

get_recent_posts($no_posts = 5, $before = ‘<li>+ ‘, $after = ‘</li>’, $show_pass_post = false, $skip_posts = 0)

可以使用$no_posts控制显示文章数量,$before和$after的意义和前面函数中相同;至于后两个参数,一般不必设置,直接取默认值即可。

不过因为该函数与WordPress内置的get_posts()和query_posts()函数功能重复,所以通常情况下很少使用。

34.get_recent_comments()

其实安装了如上的中文WordPress工具箱之后,最常使用的是这个函数,因为WordPress程序本身没有内置获取最新评论的函数。该函数原型如下:

get_recent_comments($no_comments = 5, $before = ‘<li> ‘, $after = ‘</li>’, $show_pass_post = false)

意义显然,和上面函数类似,月夜此处不再赘言。

35.get_recentcomments()

该函数是在安装了WP-RecentComments插件之后才具有的功能,与如上34中的函数类似。

该函数原型如下:

get_recentcomments(int num, int size)

num表示返回的最新评论数量;size表示返回的评论内容的长度。

距今天,月夜就再次为朋友们送上一篇介绍WordPress函数的文章,仍然属于月夜的WordPress函数文章系列。本文接上文从这 一系列的第36个函数开始,主要介绍的是一些比较杂乱的内容,使用上依然主要用在WordPress主题中。包括获取WordPress博客细节的几个函 数,以及用于构架WordPress主题大框架的几个函数。

36.wp_get_post_tags()

该函数用来在某个文章页面或者根据某篇文章的ID来获取该文章的tag,获取的结果被放置到一个tag数组中。一个常见的使用方式如下:

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,其通常的使用方式如:

<?php
$str = single_cat_title();
echo $str;
?>

<?php
$str = single_tag_title();
echo $str;
?>

然而,除此之外,single_cat_title()还可以用来在tag页面上获取当前页面的title;但single_tag_title()却不可用于获取分类页面的title。

38.get_settings()get_option()

此二函数与前文用好WordPress不可不知的函数(三)中函数20.get_bloginfo()类似,使用方法也相同,可以通过后跟各种参数来获取WordPress博客的相关信息。

比如如下的调用方式:

get_settings(’name’)或get_option(’name’)

可以用来获取当前WordPress博客的标题。

39.wp_head()

该函数与前文用好WordPress不可不知的函数(五)中函数32.wp_meta()相同,是WP主题为WP插件留下的API Hook。

40.get_header()get_footer()get_sidebar()comments_template()

这几个函数是用来在WordPress主题中获取并包含相应的文件的。比如:

get_header()用来包含当前主题文件夹下的header.php;

get_footer()用来包含主题文件夹下的footer.php;

get_sidebar()用来包含主题文件夹下的sidebar.php;

comments_template()用来包含comments.php。

需要注意的一点是,如果当前主题文件夹下缺少对应的文件,则函数会使用wp-content/themes/default/文件夹下的对应文件代替。

此外,以上函数后面都不能跟参数,只有get_sidebar()例外,因为一个主题中可以使用多个sidebar。形如get_sidebar(’up’)的调用方法可将sidebar-up.php侧边栏模板文件包含到主题中。

除了以上几个函数之外,在主题中如果想包含一个具体的文件,还可以使用如下方式:

include(TEMPLATEPATH . ‘/***.php’)

如上的函数形式可以将当前主题文件夹下名为***.php的文件包含进来;其中TEMPLATEPATH是当前主题文件夹地址的一个引用(不含末尾的/,所以需要添加上)。

41.have_posts()the_post()

这两个函数的使用范围有限,通常在WordPress的循环中使用,用以获取所有文章。其固定使用形式如下:

<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
此处显示文章
<?php endwhile; ?>
<?php else : ?>
此处显示未找到文章时的信息,比如404相关
<?php endif; ?>

另一种常见的形式是将如上代码中的前两行组合起来(其他地方不变):

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>

该形式通常会在模板的index.php、archive.php或者single.php等页面使用。除此之外的其他地方,我们通常不会看到此二函数的身影。

在前面的文章中,月夜为你介绍了WordPress中的一些函数,分类比较庞杂,包括获取文章tag、title等的函数,本文,我们继续为朋友们介绍WordPress中的其他函数。

今天我们要介绍的主要包括显示文章title的the_title()、single_post_title()等函数;获取当前文章ID号的the_ID()函数;以及the_permalink()等用来获取当前文章链接的函数;等等。

42.the_title()the_title_attribute()

the_title()函数主要用来获取当前文章的title,其后可以跟上三个参数(可全部省略,取默认值),调用形式如下:

<?php the_title(’before’, ‘after’, display); ?>

参数before用来设置在获取的title前面显示的字符内容;after用来设置title其后显示的内容;而display是一个Bool值,用于控制获取的title是否显示出来。

the_title_attribute()函数与the_title()类似,其使用方法如下:

the_title_attribute(’before=前&after=后&echo=true’)

其中before=和after=分别用于设置title前面和后面显示的字符;echo=true或者false用户设置获取的title字符串是否显示出来。

形如<?php the_title(’当前文章’, ‘的评论:’, true); ?>或the_title_attribute(’before=当前文章&after=的评论:&echo=true’)的调用形式将会显示如下的结果:

当前文章用好WordPress不可不知的函数(七)的评论:

43.single_post_title()single_tag_title()single_cat_title()

这一系列函数用于获取当前文章页面、tag页面或分类页面的title字符串。其后可跟两个参数,调用形式如下:

<?php single_post_title(’前缀’,display); ?>

可以使用形如<?php single_post_title(’当前文章:’,TRUE); ?>或<?php single_post_title(’当前文章:’); ?>的调用形式来显示如下的结果:

当前文章:用好WordPress不可不知的函数(七)

此外,也可以像42中的函数一样,将显示属性设置为false,把获取的title字符串传给一个变量,以供其他语句使用。此时的调用形式如下:

<?php $tt = single_post_title(’当前文章:’,false); ?>

44.the_ID()

该函数后面不跟任何参数,使用如下所示的调用方式:

<?php
$id = the_ID();
echo $id;
?>

用于获取并显示当前文章页面的ID号。不过需要特别注意的一点是,该函数只能在WordPress的大循环内使用,在其他地方使用可能也会显示ID号,但显示的内容始终不会随文章而改变。

此外,该函数通常还会在如下所示的CSS结构中使用:

<h2 id=”post-<?php the_ID(); ?>”>
<?php the_title(); ?>
</h2>

可为博客中不同的作者设置不同的title样式,以示区分。

45.get_the_ID()

该函数与44.the_ID()函数实现完全相同的功能,目前WordPress官方也没有提供该函数的使用说明。你可以参阅如上44中对the_ID()函数的介绍。特别提醒一点,该函数与the_ID()类似,也只能在WordPress的大循环中才能正确使用。

46.the_time()get_the_time()

the_time()用来获取并显示当前文章发布的时间,和上面几个函数类似,此函数也是只能在WordPress的大循环中使用。

该函数后面可以跟控制日期或时间格式的参数,常用的参数形式如下:

如<?php the_time(’F j, Y’); ?>的调用形式显示效果为:六月13, 2009(英文状态下显示June 13, 2009);

如<?php the_time(’g:i a’); ?>的调用形式显示效果为:7:09 下午(英文状态下显示7:09 pm);

如<?php the_time(’G:i’); ?>的调用形式显示效果为:19:09。

事实上,除了使用the_time()函数之外,WordPress还提供了一个具有类似功能的get_the_time()函数。该函数除了不具 有the_time()函数的显示功能之外,其余功能二者完全相同。使用get_the_time()函数时,如欲将获取的时间显示出来,需要使用专用语 句。

下面,我们籍此机会来简单了解一下WordPress中时间的格式。在WordPress中,通常用于控制时间格式的有一下字符:l, F, j, S, Y, G, g, i, a等等,其详细意义如下:

l(小写L)用来显示一周之中每一天的名称,比如星期六,或者在英文中显示Saturday;

F用来显示月份名称,比如六月,或者June;

j用来显示一月之中的某一天,比如13;

Y用来以4位数字形式显示年份,使用y则以末两位数字显示年份,比如2009或09;

G, g, i, a等四个字符通常组合使用,如前例子,有两种形式:

g:i a以形如7:09 下午或7:09 pm的形式显示时间;

G:i以形如19:09的24小时进制形式显示时间。

S通常紧跟在j后面,表示是否在一月之中某天之后添加英文后缀(st, nd, th等)。

 

wordpress 非插件调用评论表情

.wordpress 非插件调用评论表情

 

<!–smilies–>       <?php function wp_smilies() { global $wpsmiliestrans; if ( !get_option(‘use_smilies’) or (empty($wpsmiliestrans))) return; $smilies = array_unique($wpsmiliestrans); $link=”; foreach ($smilies as $key => $smile) { $file = get_bloginfo(‘wpurl’).’/wp-includes/images/smilies/’.$smile; $value = ” “.$key.” “; $img = “<img src=\”{$file}\” alt=\”{$smile}\” />”; $imglink = htmlspecialchars($img); $link .= “<a href=\”#commentform\” title=\”{$smile}\” onclick=\”document.getElementByIdx_x(‘comment’).value += ‘{$value}’\”>{$img}</a>&nbsp;”; } echo ‘<div>’.$link.'</div>’; } ?> <?php wp_smilies();?> <!–smilies—>

将以上代码复制到 comments.php 中合适的位置:

wordpress调用网站统计大全

 

 

1、日志总数: <?php $count_posts = wp_count_posts(); echo $published_posts = $count_posts->publish;?> 2、草稿数目: <?php $count_posts = wp_count_posts(); echo $draft_posts = $count_posts->draft; ?> 3、评论总数: <?php echo $wpdb->get_var(“SELECT COUNT(*) FROM $wpdb->comments”);?> 4、成立时间: <?php echo floor((time()-strtotime(“2008-8-18”))/86400); ?> 5、标签总数: <?php echo $count_tags = wp_count_terms(‘post_tag’); ?> 6、页面总数: <?php $count_pages = wp_count_posts(‘page’); echo $page_posts = $count_pages->publish; ?> 7、分类总数: <?php echo $count_categories = wp_count_terms(‘category’); ?> 8、链接总数: <?php $link = $wpdb->get_var(“SELECT COUNT(*) FROM $wpdb->links WHERE link_visible = ‘Y'”); echo $link; ?> 9、用户总数: <?php $users = $wpdb->get_var(“SELECT COUNT(ID) FROM $wpdb->users”); echo $users; ?> 10、最后更新: <?php $last = $wpdb->get_results(“SELECT MAX(post_modified) AS MAX_m FROM $wpdb->posts WHERE (post_type = ‘post’ OR post_type = ‘page’) AND (post_status = ‘publish’ OR post_status = ‘private’)”);$last = date(‘Y-n-j’, strtotime($last[0]->MAX_m));echo $last; ?>  9.wordpress判断语句

is_single()

 

判断是否是具体文章的页面

 

is_single(’2′)

 

判断是否是具体文章(id=2)的页面

 

is_single(’Beef Stew’)

 

判断是否是具体文章(标题判断)的页面

 

is_single(’beef-stew’)

 

判断是否是具体文章(slug判断)的页面

 

comments_open()

 

是否留言开启

 

pings_open()

 

是否开启ping

 

is_page()

 

是否是页面

 

is_page(’42′)

 

id判断,即是否是id为42的页面

 

is_page(’About Me’)

 

判断标题

 

is_page(’about-me’)

 

slug判断

 

is_category()

 

是否是分类

 

is_category(’6′)

 

id判断,即是否是id为6的分类

 

is_category(’Cheeses’)

 

分类title判断

 

is_category(’cheeses’)

 

分类 slug判断

 

in_category(’5′)

 

判断当前的文章是否属于分类5

 

is_author()

 

将所有的作者的页面显示出来

 

is_author(’1337′)

 

显示author number为1337的页面

 

is_author(’Elite Hacker’)

 

通过昵称来显示当前作者的页面

 

is_author(’elite-hacker’)

 

下面是通过不同的判断实现以年、月、日、时间等方式来显示归档

 

is_date()

 

is_year()

 

is_month()

 

is_day()

 

is_time()

 

判断当前是否是归档页面

 

is_archive()

 

判断是否是搜索

 

is_search()

 

判断页面是否404

 

is_404()

 

判断是否翻页,比如你当前的blog是http://blog.sina.com.cn/gutengfei0707 显示http://blog.sina.com.cn/gutengfei0707?paged=2的时候,这个判断将返回真,通过这个函数可以配合is_home来控制某些只能在首页显示的界面,

 

例如:

 

<?php if(is_single()):?> //这里写你想显示的内容,包括函数 <?php endif;?>

或者:

 

<?php if(is_home() && !is_paged() ):?> //这里写你想显示的内容,包括函数 <?php endif;?>

10.wordpress非插件同步twitter

 

<?php require_once (ABSPATH . WPINC . ‘/class-feed.php’); $feed = new SimplePie(); $feed->set_feed_url(‘http://feeds.feedburner.com/agting′); $feed->set_file_class(‘WP_SimplePie_File’); $feed->set_cache_duration(600); $feed->init(); $feed->handle_content_type(); $items = $feed->get_items(0,1); foreach($items as $item) { echo ‘<a target=”_blank” rel=”external nofollow” title=”Follow Me on Twitter” href=”http://twitter.com/agting″>@郑永</a>: ‘.$item->get_description(); } ?>

代码中的agting改成你的twitter用户名,郑永改成你的名字。

 

另一种调用方法需要你的空间是国外主机:

 

<?php // Your twitter username. $username = “wange1228″; // Prefix – some text you want displayed before your latest tweet. // (HTML is OK, but be sure to escape quotes with backslashes: for example href=\”link.html\”) // Suffix – some text you want display after your latest tweet. (Same rules as the prefix.) $suffix = “”; $feed = “http://search.twitter.com/search.atom?q=from:” . $username . “&rpp=1”; function parse_feed($feed) { $stepOne = explode(“<content type=\”html\”>”, $feed); $stepTwo = explode(“</content>”, $stepOne[1]); $tweet = $stepTwo[0]; $tweet = str_replace(“&lt;”, “<“, $tweet); $tweet = str_replace(“&gt;”, “>”, $tweet); return $tweet; } $twitterFeed = file_get_contents($feed); echo stripslashes($prefix) . parse_feed($twitterFeed) . stripslashes($suffix); ?>

ZeroZ 总结了一下这个方法的特点:

 

1、非插件!

 

2、不用验证用户名和密码,也就是说你可以指定调用任何一个人的 tweet!

 

3、可以自定义 tweet 信息后显示的文字,就是 $suffix = “”; 这里!

 

4、只能调用最新的一条 tweet,刚好满足我的需求。

 

5、大概只有国外空间才能使用!(经我验证,确实如此)

wordpress调用含gravatar头像的评论输出

wordpress调用含gravatar头像的评论输出

 

<?php global $wpdb; $sql = “SELECT DISTINCT ID, post_title, post_password, comment_ID, comment_post_ID, comment_author, comment_date_gmt, comment_approved,comment_author_email, comment_type,comment_author_url, SUBSTRING(comment_content,1,10) 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 comment_author != ‘郑 永’ AND post_password = ” ORDER BY comment_date_gmt DESC LIMIT 10″; $comments = $wpdb->get_results($sql); $output = $pre_HTML; foreach ($comments as $comment) { $output .= “\n<li>”.get_avatar(get_comment_author_email(‘comment_author_email’), 18). ” <a href=\”” . get_permalink($comment->ID) . “#comment-” . $comment->comment_ID . “\” title=\”” . $comment->post_title . ” 上的评论\”>”. strip_tags($comment->comment_author) .”: “. strip_tags($comment->com_excerpt) .”</a></li>”; } $output .= $post_HTML; $output = convert_smilies($output); echo $output; ?>

上面代码把comment_author的值改成你的ID,18是头像大小,10是评论数量。

wordpress去除评论者链接的评论输出

 

<?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,14) 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; 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 .= $post_HTML; echo $output;?>

wordpress调用指定分类的文章代码

wordpress调用指定分类的文章

 

<?php $posts = get_posts( “category=4&numberposts=10″ ); ?><?php if( $posts ) : ?><ul><?php foreach( $posts as $post ) : setup_postdata( $post ); ?><li><a href=”<?php the_permalink() ?>” rel=”bookmark” title=”<?php the_title(); ?>”><?php the_title(); ?></a></li><?php endforeach; ?></ul><?php endif; ?>