存档

文章标签 ‘wordpress’

解决wordpress中文tags显示错误

2009年8月15日
解决wordpress中文tags显示错误已关闭评论

 

解决wordpress中文tags显示错误

好不容易修改了permalink,在检查的时候却发现Tags出现了问题,字母的可以访问,google了一下发现WordPress的中文支持有问题,特别是在使用Permalink的时候。我也想原创文章,可是在这种时候,只能是留个记号,以便以后查询 了。
本文将分析其中的原因和网上流传的多种解决方案,并给出一个具体的解决结论。
这个问题主要表现为,在默认情况下,Wordpress对于形如这样的链接(链接1):

www.example.com/tag/中文

不能正常访问,会产生404或500错误,或者其他的错误。
而对于这样的链接(链接2):

www.example.com/?tag=中文

WordPress就能够正确解析。
原因:这是URL编码问题造成的。对于上面的链接1,这是一个PathInfo,对于链接2,这是一个QueryString。事实证明,对于UTF-8 的页面,IE和FF都会正确发送PathInfo和QueryString(而不像有些文章中说的,他们在不同的设置下会有错误的反应),但服务器 端,IIS会将PathInfo转换成GBK编码从而造成错误,于是Windows下的此类问题只需要转回来就行了;但是Linux下,Apache不支 持中文PathInfo,要么对Apache进行改造,要么只能像我一样,Linux主机无法使用中文permalink。于是,我们只能寻找绕路的方 法。

解决方案分析:
一、转换编码
原理是,IIS会将PathInfo中的UTF-8转换成GBK,而QueryString中就不会转换,故而为了使用Permalink,采用以下方法:
打开wp-includes/classes.php文件,

if ( isset($_SERVER['PATH_INFO']) )
  $pathinfo = $_SERVER['PATH_INFO'];
else
  $pathinfo = '';
$pathinfo_array = explode('?', $pathinfo);
$pathinfo = str_replace("%", "%25", $pathinfo_array[0]);
$req_uri = $_SERVER['REQUEST_URI'];

改为

if ( isset($_SERVER['PATH_INFO']) )
  $pathinfo = mb_convert_encoding($_SERVER['PATH_INFO'], "UTF-8", "GBK");
else
  $pathinfo = '';
$pathinfo_array = explode('?', $pathinfo);
$pathinfo = str_replace("%", "%25", $pathinfo_array[0]);
$req_uri = mb_convert_encoding($_SERVER['REQUEST_URI'], "UTF-8", "GBK");

局限:只对Windows主机、且必须是Windows下的IIS主机有效。

mb_convert_encoding的使用需打开 php_mbstring.dll,相关说明详见

PHP的内码转换函数 mb_convert_encoding()

 

二、修改wp-includes/rewrite.php
这是网上最常见的方法,原理是,让WordPress在对其他内容使用Permalink的时候,对tag不使用,而使用链接2的QueryString模式发送中文编码:

 function get_tag_permastruct() {
if (isset($this->tag_structure)) {
return $this->tag_structure;
}
if (empty($this->permalink_structure)) { //-----this line need change------
$this->tag_structure = '';
return false;
}

把第5行改为

if (!empty($this->permalink_structure)) {

局限:没有起到Permalink的“漂亮”作用,如果不能自己修改WP的文件就没办法了。

三、修改tag base
原理同上,只要让WordPress在打开了Permalink功能后继续对tag不理不问就行了。那么,欺骗WordPress,让它用链接2的格式来显示Permalink,可行么?可行,因为WordPress可以自定义Permalink的形式:
在WordPress的 Settings – Permalinks – Tag base 中填上
/?tag=
注意””不能少,引用原文中的写法不对。另外要注意每次输入””,WP都会再次转义为”\”,所以每次点提交都会把””翻一倍,点两次就是”\\”,所以不要多点,一次就对了。
这个方法的结果是使得链接变成这个样子

www.example.com/?tag=/中文/

多出来的斜杠对于服务器丝毫没有影响,还是被视为QueryString,效果同上。
局限是链接变得更加不好看了,更为致命的是插件生成的Sitemap中,tag链接会变成错误的形式,如果你很在乎Sitemap,请不要使用这个方法,除非你真的无法修改自己的rewrite.php文件。

但是当你使用WP-SuperCache或者类似的缓存插件时,它会加入自己的rewrite规则,所有请求先由自己判断,不在缓存中或者不符合缓 存规则才交由WordPress处理。但问题在于,它不支持中文URL的解析,哪怕是QueryString也不行。于是我们必须绕过它。
这是WP-SuperCache在.htaccess文件里所添加的rewrite规则

RewriteEngine On
RewriteBase /
 
RewriteCond %{REQUEST_METHOD} !=POST
RewriteCond %{QUERY_STRING} !.*s=.*
RewriteCond %{QUERY_STRING} !.*p=.*
RewriteCond %{QUERY_STRING} !.*attachment_id=.*
RewriteCond %{QUERY_STRING} !.*wp-subscription-manager=.*
RewriteCond %{HTTP_COOKIE} !^.*(comment_author_|wordpress|wp-postpass_).*$
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{HTTP_HOST}/$1/index.html.gz -f
RewriteRule ^(.*) /wp-content/cache/supercache/%{HTTP_HOST}/$1/index.html.gz [L]
 
RewriteCond %{REQUEST_METHOD} !=POST
RewriteCond %{QUERY_STRING} !.*s=.*
RewriteCond %{QUERY_STRING} !.*p=.*
RewriteCond %{QUERY_STRING} !.*wp-subscription-manager=.*
RewriteCond %{QUERY_STRING} !.*attachment_id=.*
RewriteCond %{HTTP_COOKIE} !^.*(comment_author_|wordpress|wp-postpass_).*$
RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{HTTP_HOST}/$1/index.html -f
RewriteRule ^(.*) /wp-content/cache/supercache/%{HTTP_HOST}/$1/index.html [L]

我们要做的就是不让它去判断中文tag链接,在两个 RewriteCond %{REQUEST_METHOD} !=POST 后面分别加入这样一句:

RewriteCond %{QUERY_STRING} !.*tag=.*

含义是如果QueryString中含有tag字样,请不要解析(交给下一条规则,一般来说就是WordPress的index.php了)。

结论:
Windows+IIS主机下,通过方案一可以完美解决中文tag问题
Linux+Apache主机下,不能使用中文Permalink,除非修改Apache,否则只有用方案二和方案三绕行。
方案二是较为推荐的方法,但是搭配WP-SuperCache使用的时候,需要自己在.htaccess文件中加入一条不处理tag链接的规则。

IT技术, 互联网技术 , , ,

WordPress在IIS ISAPI ReWrite下的URL规则

2009年8月9日
WordPress在IIS ISAPI ReWrite下的URL规则已关闭评论

WordPress在IIS ISAPI ReWrite下的URL规则

为了便于搜索引擎抓取,俺们可以将wordpress进行静态URL重写、下面是URL ReWrite的规则!

下面是Rewrite规则:(请将下面代码内容存到httpd.ini,然后选择一种”红色部份”的内容填写到wordpress后台自定链接的”永远链接”)

[ISAPI_Rewrite]

# 3600 = 1 hour
CacheClockRate 3600

RepeatLimit 32

# Protect httpd.ini and httpd.parse.errors files
# from accessing through HTTP
# # /%year%%monthnum%%day%/%postname%/

RewriteRule /tag/(.*) /index\.php\?tag=$1

RewriteRule /(about|copyright|leebolin)/ /index\.php\?pagename=$1

RewriteRule /category/(.*)/(feed|rdf|rss|rss2|atom)/?$ /wp-feed\.php\?category_name=$1&feed=$2

RewriteRule /category/?(.*)/ /index\.php\?category_name=$1

RewriteRule /author/(.*)/(feed|rdf|rss|rss2|atom)/?$ /wp-feed\.php\?author_name=$1&feed=$2

RewriteRule /author/?(.*) /index\.php\?author_name=$1

RewriteRule /feed/?$ /wp-feed\.php/\?feed=rss2

RewriteRule /comments/feed/?$ /wp-feed\.php/\?feed=comments-rss2

RewriteRule /page/(.*)/ /index\.php\?paged=$1

RewriteRule /([0-9]{4})([0-9]{1,2})([0-9]{1,2})/([^/]+)/?([0-9]+)?/?$ /index\.php\?year=$1&monthnum=$2&day=$3&name=$4&page=$5

RewriteRule /([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/?$ /index\.php\?year=$1&monthnum=$2&day=$3&page=$4

RewriteRule /([0-9]{4})/([0-9]{1,2})/?$ /index\.php\?year=$1&monthnum=$2&page=$3

RewriteRule /([0-9]{4})([0-9]{1,2})([0-9]{1,2})/([^/]+)/(feed|rdf|rss|rss2|atom)/?$ /index\.php\?year=$1&monthnum=$2&day=$3&name=$4&feed=$5

RewriteRule /([0-9]{4})([0-9]{1,2})([0-9]{1,2})/([^/]+)/trackback/?$ /wp-trackback\.php\?year=$1&monthnum=$2&day=$3&name=$4&tb=1

# # WordPress rewrite rules#
# /Html/%post_id%.html

RewriteRule /tag/(.*) /index\.php\?tag=$1

RewriteRule /(about|copyright|leebolin|favor|archives)/ /index\.php\?

pagename=$1

RewriteRule /Html/category/(.*)/(feed|rdf|rss|rss2|atom)/?$ /wp-feed\.php\?

category_name=$1&feed=$2

RewriteRule /Html/category/?(.*)/ /index\.php\?category_name=$1

RewriteRule /author/(.*)/(feed|rdf|rss|rss2|atom)/?$ /wp-feed\.php\?

author_name=$1&feed=$2

RewriteRule /author/?(.*) /index\.php\?author_name=$1

RewriteRule /rss.xml /wp-feed\.php/\?feed=rss2

RewriteRule /feed/?$ /wp-feed\.php/\?feed=rss2

RewriteRule /comments/feed/?$ /wp-feed\.php/\?feed=comments-rss2

RewriteRule /([0-9]+)/?([0-9]+)?/?$ /index\.php\?p=$1&page=$2

# RewriteRule /Html/([0-9]+)/?([0-9]+)?/?$ /index\.php\?p=$1&page=$2

RewriteRule /Html/([0-9]+).html /index\.php\?p=$1

RewriteRule /page/(.*)/ /index\.php\?paged=$1

RewriteRule /Html/date/([0-9]{4})([0-9]{1,2})([0-9]{1,2})/([^/]+)/?([0-9]+)?/?$

/index\.php\?year=$1&monthnum=$2&day=$3&name=$4&page=$5

RewriteRule /Html/date/([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/?$ /index\.php\?

year=$1&monthnum=$2&day=$3&page=$4

RewriteRule /Html/date/([0-9]{4})/([0-9]{1,2})/?$ /index\.php\?

year=$1&monthnum=$2&page=$3

RewriteRule /Html/([0-9]+).html/(feed|rdf|rss|rss2|atom)/ /index\.php\?

feed=rss2&p=$1

RewriteRule /Html/([0-9]+).html/trackback/ /wp-trackback\.php\?p=$1

RewriteRule /photo/?([^/]*)?/?([^/]*)?/?([^/]*)?/?([^/]*)?/?$ /wp-

content/plugins/fgallery/fim_photos\.php\?$1=$2&$3=$4 [QSA,L,I]

RewriteRule /photo/?(.*) /wp-content/plugins/fgallery/fim_photos\.php\?

$1=$2&$3=$4 [QSA,L,I]

RewriteRule ^(.*)/archiver/([a-z0-9\-]+\.html)$ $1/archiver/index\.php\?$2
RewriteRule ^(.*)/forum-([0-9]+)-([0-9]+)\.html$ $1/forumdisplay\.php\?

fid=$2&page=$3
RewriteRule ^(.*)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ $1/viewthread\.php\?

tid=$2&extra=page\%3D$4&page=$3
RewriteRule ^(.*)/profile-(username|uid)-(.+)\.html$ $1/viewpro\.php\?$2=$3
RewriteCond Host: (.+)
RewriteCond Referer: (?!http://\1.*).*
RewriteRule .*\.(?:gif|jpg|png) /block.gif

RewriteRule ^(.*)/archiver/([a-z0-9\-]+\.html)$ $1/archiver/index\.php\?$2
RewriteRule ^(.*)/forum-([0-9]+)-([0-9]+)\.html$ $1/forumdisplay\.php\?fid=$2&page=$3
RewriteRule ^(.*)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ $1/viewthread\.php\?tid=$2&extra=page\%3D$4&page=$3
RewriteRule ^(.*)/profile-(username|uid)-(.+)\.html$ $1/viewpro\.php\?$2=$3
RewriteCond Host: (.+)
RewriteCond Referer: (?!http://\1.*).*
RewriteRule .*\.(?:gif|jpg|png) /block.gif

IT技术, 互联网技术 ,

WordPress中最好的永久链接结构

2009年8月9日
WordPress中最好的永久链接结构已关闭评论

WordPress中最好的永久链接结构

wordpress中默认的永久链接结构就像是这个样子:http://blogname.com/?p=123,123就代表日志的内部ID,这种结构对于SEO来说是极不有好的,既不利于网站PR也影响你在搜索引擎中的排名。至少你的永久链接中都应该含有日志的关键词。真搞不懂为什么wordpress会拿这样的连接形式作为默认链接~

一个漂亮的链接形式应该像这个样子:http://blogname.com/2008/11/05/some-post-name。现在问题就在于哪种永久链接形式是最好的。一点可以肯定日志名必须包含在结构中。下面是wordpress中常用的几种形式:

日期和名称:链接结构为“年、月、日和日志名称”,这种结构能够帮助读者了解文章发表的详细时间,也可以让作者方便查找日志。

月份和名称:和第一种结构类似,只是少了年份和具体日期显示。

分类和名称:就象这样 http://blogname.com/some-category/some-post-name,这种结构有许多博客采用,据说分类名与日志名相关有利于SEO。

日志名称:例如这样 blogname.com/some-post-name,这种方式也有很大一部分博客使用。

WordPress中还提供了一些代码,让你自定义永久链接的结构,下面是可以使用的代码:

%year% – 显示年份,四位数,如 2008

%monthnum% – 显示月份,如 05

%day% – 显示月份中的日期,如 28

%hour% – 显示小时数,如 15

%minute% – 显示分钟数,如 43

%second% – 显示秒数,如 33

%postname% – 显示日志名称,例如“This Is A Great Post!”转换为this-is-a-great-post,中文名将变成怪怪的符号…

%post_id% – 显示日志独一无二的ID,如 213

%category% – 显示分类名称

%author% – 显示作者名称

你可以使用”-“ 或者 ”/“把这些代码连接起来,例如:/%category%/%postname%-%post_id%/

对于我个人来说,我更倾向于仅显示日志名称和日志ID的结构,为什么?因为你的日志名称会包含有关键字,因此,如果URL很短的话,那些关键词的密 度将非常之高(这一概念称之为关键词相对权重),我并不鼓励仅仅使用日志名称的永久链接(尽管现在我是这样做的),因为这样可能在你重新定义规则时,出现 访问不到网页的情况。另外也有可能出现两篇文章URL相同的情况,尽管你自己没意识到~

另外如果你要重新定义你的永久链接结构,可以使用插件permalinks migration,帮助你方便地重新定向永久链接。

IT技术, 互联网技术 , ,

wordpress博客wp_list_categories标签用法详解

2009年8月5日
wordpress博客wp_list_categories标签用法详解已关闭评论

wp_list_categories 标签的用法。 作用: ·不是连接到某个分类的 ·排列分类 ·不显示上一次更新(上次更新后,在当前类内) ·可以无序排列 ·可以显示日志数量 ·可以只显示制定某个分类 ·可以指定分类说明or标题 ·可设置无Feed或Feed使用图标 ·没有任何exlude类,并包括所有类别? (’include’ => is not shown above) ·缩进?等级?排列样式 ·分类标题名单? ·没有限制的sql施加? (’number’ => 0 is not shown above) 不管这些了,先举几个例子你就明白了: 1.包含或排除某分类: 意思就是把分类ID为3,5,9,16的分类按名称顺序来排序:

1
<?php wp_list_categories('orderby=name&include=3,5,9,16'); ?>

复制代码 按名称排列,并显示每个分类的日志总数,并不显示ID为10的分类:

1
<?php wp_list_categories('orderby=name&show_count=1&exclude=10'); ?>

复制代码 2.显示或隐藏列表标题: 过滤ID为4和7的分类,并且列表标题设置为“哈哈”:

1
<?php wp_list_categories('exclude=4,7&title_li=哈哈'); ?>

复制代码 列表中只显示ID为5、9、23的分类,并把列表标题改为

;Poetry

(下面的格式是为了把“要显示的数据”和“标签参数区分开来”)

1
 <?php wp_list_categories('include=5,9,23&title_li=<h2>' . __('Poetry') . '</h2>' ); ?>

复制代码 3.那啥 这个参数的意思是:按ID排序,关闭分类说明(就是鼠标移动到连接上就不显示你在后台填的分类说明了,只显示“察看XX分类下的所有文章”),并且只显示ID为8的分类下的子分类,如果没有,则参数无效,会按默认来显示。

1
<?php wp_list_categories('orderby=id&show_count=1&use_desc_for_title=0&child_of=8'); ?>

复制代码 4.外观是分类后面显示个(RSS),作用就不用我说了吧?

1
<?php wp_list_categories('orderby=name&show_count=1&feed=RSS'); ?>

复制代码 5.这个比较酷,相信大家都喜欢: 分类名称后面显示一个自己制定的小图标,作用是RSS。

1
<?php wp_list_categories('orderby=name&show_count=1&feed_image=/images/rss.gif'); ?>

复制代码 6.花式列表: 改变当前正在浏览的分类名字的样式。’style=list’的作用是给输出的html代码 中加一个class=”current- cat”, 然后你在CSS里添一个.current-cat {color:red;}那么我浏览分类AAA时,列表中的“AAA”3个字就是红色的,浏览BBB,“BBB”就是红色的。

1
<?php wp_list_categories('style=list' ); ?>

复制代码 下面把所有参数和值汇总一下: show_option_all 值:任意填。 如果你写

1
<?php wp_list_categories('show_option_all=那啥'); ?>

,那么在列表第一个分类就显示“那啥”两字,不过连接是连接到blog首页的,正好可以利用此参数加个“首页”。 orderby 值:ID、name(默认值)、count。 作用是按这3个值来排序。 order 值:ASC(默认值)、DESC。 ASC为升序,DESC为降序。 show_last_updated 值:0(默认值)、1。 0无作用,1为最近更新的分类显示在前面。 style 值:list(默认值)、none。 例6中已经举例了。none无作用。 show_count 值:0、1(默认值) 1在每个分类后面显示日志数量,0不显示。 hide_empty 值:0、1(默认值) 1是隐藏没有发表日志的分类,0是显示所有。 use_desc_for_title 值:0、1(默认值) 0为关闭说明,1为显示说明。上面有例子。 child_of 值:数字 显示指定ID(也就是所填的这个数字)下的子分类。 feed 值:任意 假如你填“啊!”,那么在你每个分类后面都会出现“(啊!)”,连接地址是RSS地址。 feed_image 值:任意。虽然任意,但是是个图片的地址才对。 用来在分类后面显示个RSS Feed图标,上面有例子。 exclude 值:任意。但是要填分类名称或者分类ID才有效。 用来过滤(或者说隐藏)某个分类在列表中的出现。 include 值:任意。但是要填分类名称或者分类ID才有效。 作用是只显示所填的这个分类名或ID。 hierarchical 值:0、1(默认值) 说是按分类文章数目排列的,但测试无效果。 title_li 值:任意 用来改变列表标题的。 number 值:整数 设置一个显示上限。

IT技术, php ,

学习无比强大的query_posts()

2009年7月31日
学习无比强大的query_posts()已关闭评论

wordpress的query_posts()之强大,让人叹为观止!学习学习!

将query_posts()放在LOOP之前限定你所需要的条件,wp_query会产生一个新的使用你的参数的SQL查询,而忽视通过URL接收到的其它的参数,如果想不忽略,可以在调用中使用$query_string。

query_posts($query_string . "&order=ASC")

设置文章显示的顺序,但是不干扰其余的查询字符串,参数前须有“&”符号

其他还有N多用途~~

  • 主页不显示某一分类下的日志
<?php
   if (is_home()) {
      query_posts("cat=-3");
   }
?>
  • 获得特定的日志
<?php
query_posts('p=5');
?>
  • 获得特定的页面
<?php
query_posts('page_id=7');      //只返回网页7
?>
<?php
query_posts('pagename=about'); //只返回关于网页
?>
<?php
query_posts('pagename=parent/child'); // 返回母网页的子网页
?>
  • 创建所有文章列表,并且提供分页功能
<?php
query_posts($query_string.'posts_per_page=-1');
while(have_posts()) { the_post();
put your loop here ;
}
?>

==========================================

类别 参数

显示属于某个类别的文章

  • cat
  • category_name

根据ID显示一个类别

只显示来自一个类别ID的文章

query_posts('cat=4');

根据名称显示一个类别

只显示属于某个类别名的文章

query_posts('category_name=Staff Home');

显示几个类别及ID

显示属于几个类别ID的文章

query_posts('cat=2,6,17,38');

删除某个类别的文章

显示所有的文章,但是类别ID前面有个’-‘(负号)负号的类被除外。

query_posts('cat=-3');

删除属于类别3的所有文章。有一个限制性条款:会删除只属于类别3的所有文章。如果一个类别也同时属于其它的类别,这个类别仍然不会被删除。

标签参数

显示与某个标签相关的文章

  • tag

为某个标签提取文章

query_posts('tag=cooking');

获得拥有任何这样的标签的文章

query_posts('tag=bread,baking');

获取拥有这三个标签的文章

query_posts('tag=bread+baking+recipe');

作者参数

你也可以根据作者限制文章数目

  • author_name=Harriet
  • author=3

author_name在 user_nicename区操作, 同时作者 在作者id上操作。

文章 & 网页参数

返回一篇单独的文章或者一个单独的网页

  • p=1 – 使用文章 ID来显示第一篇文章
  • name=first-post – 使用 post Slug 显示第一篇文章
  • page_id=7
  • pagename=about
  • showposts=1 (你可以使用 showposts=3,或者其它的任何数字显示一定数目的文章)

由于 模板层级方面的原因, home.php先执行了。这意味这你可以编写一个home.php,home.phh调用query_posts()重新得到一个特别的网页并且将那个网页设置为你的首页。没有任何插件或者hacks,你需要运行一个机制,并且显示和维护一个非博客的首页。

更有用的方法,可能是利用WP的网页功能并且为你的首页使用这个功能。你可以将”关于网页”设置为entry point或者设置为站点的末页。你可能执行一些更动态的步骤,设置一个自定义网页,显示最近的评论,文章,类别,存档。请看看下面的例子。

时间参数

得到某个特别的时间段内发表的文章

  • hour=
  • minute=
  • second=
  • day= – 一个月中的每一天; 显示,例如,十五号发表的所有文章。
  • monthnum=
  • year=

网页参数

  • paged=2 -显示使用”以前发表的文章”链接时,通常在网页2上显示的文章。
  • posts_per_page=10 -每个网页显示的文章数目;-1这个值,会显示所有的文章。
  • order=ASC -按时间顺序显示文章,以相反的顺序显示DESC(默认)

Offset 参数

你不能转移或者忽视一个或者更多的原始文章,这些文章一般是你的query同时使用offset参数收集到的。

下面的函数会显示(1)最近的5篇文章

query_posts('showposts=5&offset=1');

根据参数排序

根据这个区给得到的文章排序

  • orderby=author
  • orderby=date
  • orderby=category
  • orderby=title
  • orderby=modified
  • orderby=modified
  • orderby=menu_order
  • orderby=parent
  • orderby=ID
  • orderby=rand

同时考虑”ASC”或者的”DESC”的排序参数

联合参数

你可能从上面的例子中注意到,你使用一个&(&符号)将参数组合在一起,像:

query_posts('cat=3&year=2004');

类别13,关于当前月份显示在主页上的文章:

if (is_home())  {
query_posts ($query_string . '&cat=13&monthnum=' . date('n',current_time('timestamp'))); }

在2.3版本中,这个参数组合会返回属于类别1同时属于类别3的文章,只显示两篇(2)文章,根据标题,按降序排列:

query_posts(array('category__and'=>array(1,3),'showposts'=>2,'orderby'=>title,'order'=>DESC));

在2.3和2.5版本中,你可能期待下面的内容,返回属于类别1并且标签为”苹果”的所有文章

query_posts('cat=1&tag=apples');

一个bug阻止这个运行。请看看Ticket #5433,一个工作区要搜索几个使用+的标签

query_posts('cat=1&tag=apples+apples');

对于先前的查询,这个会产生期待的结果。注意使用’cat=1&tag=apples+oranges’能够产生期待的结果。

资料来源:站长百科 Template Tags/query posts

IT技术, php, 互联网技术 ,

学习制作WordPress主题

2009年7月31日
学习制作WordPress主题已关闭评论

如果你正准备学着制作Wordpress主题,那将非常有用。

WordPress模板基本文件

style.css 样式表文件
index.php 主页文件
single.php 日志单页文件
page.php 页面文件
archvie.php 分类和日期存档页文件
searchform.php 搜索表单文件
search.php 搜索页面文件
comments.php 留言区域文件(包括留言列表和留言框)
404.php 404错误页面
header.php 网页头部文件
sidebar.php 网页侧边栏文件
footer.php 网页底部文件

WordPress Header头部 PHP代码

注: 也就是位于<head>和</head>之间的PHP代码

<?php bloginfo(’name’); ?> 网站标题
<?php wp_title(); ?> 日志或页面标题
<?php bloginfo(’stylesheet_url’); ?> WordPress主题样式表文件style.css的相对地址
<?php bloginfo(’pingback_url’); ?> WordPress博客的Pingback地址
<?php bloginfo(’template_url’); ?> WordPress主题文件的相对地址
<?php bloginfo(’version’); ?> 博客的Wordpress版本
<?php bloginfo(’atom_url’); ?> WordPress博客的Atom地址
<?php bloginfo(’rss2_url’); ?> WordPress博客的RSS2地址
<?php bloginfo(’url’); ?> WordPress博客的绝对地址
<?php bloginfo(’name’); ?> WordPress博客的名称
<?php bloginfo(’html_type’); ?> 网站的HTML版本
<?php bloginfo(’charset’); ?> 网站的字符编码格式

WordPress 主体模板 PHP代码

<?php the_content(); ?> 日志内容
<?php if(have_posts()) : ?> 确认是否有日志
<?php while(have_posts()) : the_post(); ?> 如果有,则显示全部日志
<?php endwhile; ?> 结束PHP函数”while”
<?php endif; ?> 结束PHP函数”if”
<?php get_header(); ?> header.php文件的内容
<?php get_sidebar(); ?> sidebar.php文件的内容
<?php get_footer(); ?> footer.php文件的内容
<?php the_time(’m-d-y’) ?> 显示格式为”02-19-08″的日期
<?php comments_popup_link(); ?> 显示一篇日志的留言链接
<?php the_title(); ?> 显示一篇日志或页面的标题
<?php the_permalink() ?> 显示一篇日志或页面的永久链接/URL地址
<?php the_category(’, ‘) ?> 显示一篇日志或页面的所属分类
<?php the_author(); ?> 显示一篇日志或页面的作者
<?php the_ID(); ?> 显示一篇日志或页面的ID
<?php edit_post_link(); ?> 显示一篇日志或页面的编辑链接
<?php get_links_list(); ?> 显示Blogroll中的链接
<?php comments_template(); ?> comments.php文件的内容
<?php wp_list_pages(); ?> 显示一份博客的页面列表
<?php wp_list_cats(); ?> 显示一份博客的分类列表
<?php next_post_link(’ %link ‘) ?> 下一篇日志的URL地址
<?php previous_post_link(’%link’) ?> 上一篇日志的URL地址
<?php get_calendar(); ?> 调用日历
<?php wp_get_archives() ?> 显示一份博客的日期存档列表
<?php posts_nav_link(); ?> 显示较新日志链接(上一页)和较旧日志链接(下一页)
<?php bloginfo(’description’); ?> 显示博客的描述信息

其它的一些Wordpress模板代码

/%postname%/ 显示博客的自定义永久链接
<?php the_search_query(); ?> 搜索表单的值
<?php _e(’Message’); ?> 打印输出信息
<?php wp_register(); ?> 显示注册链接
<?php wp_loginout(); ?> 显示登入/登出链接
<!–next page–> 在日志或页面中插入分页
<!–more–> 截断日志
<?php wp_meta(); ?> 显示管理员的相关控制信息
<?php timer_stop(1); ?> 显示载入页面的时间
<?php echo get_num_queries(); ?> 显示载入页面查询

介绍完基本的函数代码后,介绍一点高级的使用

指定example.php中的内容只在首页显示

<?php if ( is_home() ) { include ('example.php'); } ?>

为不同分类指定不同的样式表

<?php if ( is_category('15') ) {<link rel="stylesheet" href="<?php bloginfo('template_url'); ?>/cat-15.css"

type="text/css" media="screen" />;

<?php } else { ?>

<link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); ?>"

type="text/css" media="screen" />

<?php } ?>

为不同的分类指定不同的图像

<?php if (is_category('7') ):<img src='<?php bloginfo('template_url');?>/images/cat7.jpg' alt='' />

<?php } elseif (is_category('8') ):

<img src='<?php bloginfo('template_url');?>/images/cat8.jpg' alt='' />

<?php endif; ?>

样式化单篇日志

<div id="post-<?php the_ID();?>">This snippet will assign the post ID to the DIV. For example, if the ID for the post is 8, that line will echo as

<div id=”post-8”></div>. Now you can style that individual post in the CSS as #post-8. Place this code

within the loop.

上一页和下一页链接

<?php next_posts_link('Next Entries »') ?><?php previous_post_link('« Older Entries'); ?>

动态页面链接

<ul><li<?php if(is_home()) { ?><?php } ?>><a href="

<?php bloginfo('home'); ?>">home</a></li>

<?php wp_list_pages('sort_column=menu_order&depth=1&title_li='); ?>

</ul>

This snippet will rst echo the text “home” with a link to the home page. Next, it will echo the WordPress

pages links in a list, in order dened by your settings, excluding the child pages, and excluding a title

header for the list. If one of the pages in the list is active, the link for that page will be assigned the class

“current_page_item”, which can now be styled in your CSS. Place this code in the template les.

动态页面标题

<?phpif (is_home()) { echo bloginfo('name'); } elseif (is_404()) { echo 'WPCandy » 404'; } elseif(is_search()) { echo 'WPCandy » Search Results'; } else { echo 'WPCandy » '; wp_title(''); }

?>

分类日志

<?php query_posts('cat=2&showposts=5'); ?>

CSS样式表头部声明

/*

Theme Name:  WPCandy

Description: Description goes here

Theme URI: http://wpcandy.com/

Version: 2.0

Author: Michael Castilla

Author URI: http://wpcandy.com/

Template: Dene a parent template (optional)

*/

日志循环

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

// this is the inside of the loop

<?php endwhile; ?>

<?php else : ?>

<?php endif; ?>

标签云(Tag cloud)

<?php wp_tag_cloud('smallest=1&largest=9&'); ?>

页面模板头部声明

<?php/*

Template Name: Gallery

*/

?>

为每个分类指定不同的模板

<?php$post = $wp_query- >post;if ( in_category('3') ) {

include(TEMPLATEPATH . '/cat3.php’);

} elseif ( in_category('4') ) {

include(TEMPLATEPATH . '/cat4.php');

} else {

include(TEMPLATEPATH . '/cat.php');

} ? >

这是来自WPCandy的电子书,由帕兰翻译而成,你可以通过这里下载
转载自 高级Wordpress模板代码帮助手册中文版 | 帕兰映像

IT技术, php, 互联网技术 ,