标签存档: wordpress

wordpress 更改excerpt的长度,设置excerpt后面’[...]‘的字样和链接

1、更改系统默认excerpt的长度

默认情况下,excerpt长度设置为55个字,可以使用excerpt_length过滤器改变excerpt的长度,添加如下代码到主题的functions.php文件即可。

继续阅读 »

谈wordpress文章发布编辑器的不足

一直以来我都觉得wordpress文章发布编辑器非常难用,功能不仅少而且发布入库时不知道为什么系统会自动修改代码。做为一个技术类的BLOG,经常要在文章中引用一些代码,wordpress在方面更是不足,虽然可以安装一个插件,但用起来很麻烦。

继续阅读 »

博客最终还是使用了wordpress

博客最终还是使用了wordpress,前几天在zhangwenbin.com.cn上试用了几天z-blog,感觉不错,不过实在没有精力经营太多的网站,所以再三考虑还是集中精力做一个网站。zhangwenbin.com.cn这个域名也已经301重定向了,以后我的个人博客访问地址就是http://www.mypchelp.cn/zhangwenbin/。

继续阅读 »

wordpress成功转换z-blog

转了一大圈最后还是回到ASP建站时代,最近我给朋友们做了几个小站,全部是用ASP程序开发的。感觉还是ASP使用起来拿手,一般的需要都能够实现。对一个小企业来说,access数据库足够了。连我的个人BLOG,http://www.mypchelp.cn/zhangwenbin 也要改为z-blog系统。

继续阅读 »

关于WordPress网页源代码乱码问题

好友的BLOG http://techpad.net在IE下查看源代码时,中文显示全部为乱码。本以为是最近安装插件后导致的问题,但禁用所有的插件后问题依旧不能够解决。接下来解决问题过程中发现了很多有意思的东西,用Editplus把theme中相关php文件全部另存为UTF-8格式,上传后问题依旧。接着再次下载检查文件,发现编码又变回ANSI,检查上传文件发现Editplus根本就没有保存为UTF-8格式,由此得出结论,Editplus并非想象中那么可靠,过分信任某东西的后果是严重的。


网上下载了一个批量编码转换的小程序,使用后编码全部转换为UTF-8,但网页变得很不正常,表现为页面顶部增加一行空白,用备份的文件替换转换后的header.php,single.php后一切恢复。问题原因大概是批量转换工具将php文件中的空白字符变为一种浏览器可误读的字符,产生空白。


此次修改问题:IE下网页正常,源代码乱码




问题原因:风格php文件与网页编码不同



解决:将风格中php文件另存为UTF-8格式


获得经验:1.Google对于网页编码兼容性标准性强于百度


2.Editplus在另存文件选择格式处存在问题,有时不能按所选格式保存


3.批量转换编码的工具慎用,用前必须备份文件

=============问题深入

继续修改发现此问题的关键因素是UTF-8 BOM,对于WordPress,其中模板文件夹下function.php文件是关键,将此文件保存为带BOM的UTF-8文件,则用IE(更准确说是用notepad)查看文件源代码时可以正常显示;如果保存为不带BOM的UTF-8,IE(notepad)可以正常显示,而WordPress后台无法正常登录,Windows Live Write也无法连接。


此问题根本原因是PHP不支持BOM,同时NOTEPAD无法识别无BOM的UTF-8。



关于BOM的一些资料


UTF-8编码的文件中,BOM占三个字节。如果用记事本把一个文本文件另存为UTF-8编码方式的话,用UE打开这个文件,切换到十六进制编辑状态就可以看到开头的FFFE了。这是个标识UTF-8编码文件的好办法,软件通过BOM来识别这个文件是否是UTF-8编码,很多软件还要求读入的文件必须带BOM。可是,还是有很多软件不能识别BOM。我在研究Firefox的时候就知道,在Firefox早期的版本里,扩展是不能有BOM的,不过Firefox 1.5以后的版本已经开始支持BOM了。现在又发现,PHP也不支持BOM。

PHP在设计时就没有考虑BOM的问题,也就是说他不会忽略UTF-8编码的文件开头BOM的那三个字符。由于必须在“〈?“或者“〈?php”后面的代码才会作为PHP代码执行,所以这三个字符将会直接输出。如果插件的文件有这个问题,将会导致在后台页面里激活或者不激活插件后显示白屏,如果是模版文件有这个问题,将会导致这三个字符直接输出,造成页面上方有一个小空行。国外的英文插件和模版一般都是用的ASCII码的编码方式,不会有BOM,只有国内的插件和模版会由于作者的不知情造成问题。还有,大家修改模版的时候,由于输出页面使用UTF-8编码,那么修改模版的时候如果有加入中文字符的话,必须把文件转成UTF-8编码才能正常显示,这个时候如果所使用的编辑器自动加上了BOM的话,将会造成在页面上输出这三个字符,显示效果就要看浏览器了,一般是一个空行或是一个乱码。


继续阅读 »

禁用WordPress自动保存的插件

WordPress在发布日志的时候有一个很令人讨厌的功能:自动保存,这个功能经常会出现一篇文章在数据库中生成多个版本,导致数据库很臃肿,实在是很烦人。不过已经有人针对这种情况开发出一个插件,点击下载:禁用WordPress自动保存的插件


安装的方法很简单,解压文件后将disable-autosave.php放到plugins目录下,然后再后台启用即可,不需要做什么设置。

继续阅读 »

解决wordpress不能够发布日志问题

很严重的一个问题,我的WP博客这两天不能够发布新日志,但修改日志却是可以的,而且原来的日志也都存在,只是不可以发布。问题出在什么地方?在本文中我和大家分享一下解决的方法。

不能够发布日志的这种情况什么时候出现的,具体也说不清楚,从6月16日开始就没用WP写BLOG,6月19日的时候,升级WP2.71到WP2.8。升级后也没有做发布文章测试。等到昨天的时候,发现wordpress无法发布新日志。正常的情况下在发布日志时,日志的提交地址应该是这种:wp-admin/post.php?action=edit&post=3&message=6,其中“3”为日志的ID号。但在我的WP后台,提交的链接地址却是wp-admin/post.php?message=6这种形式,导致新日志发布失败。根据Wordpress论坛的网友的建议,禁用了WP插件,但结果发现日志发布仍然不正常。怀疑是wordpress的程序有问题,于是手动下载wordpress2.8重新安装,安装后试发布文章,结果正常的。但当将wordpress数据库恢复后,发布又不正常了。无奈之下恢复了wordpress2.71版本,但2.71版本下问题依旧。

情况非常严重,这说明我的BLOG网站在备份前就已经出问题了,但我却没有注意到。我开始尝试重新安装wordpress2.71版本,安装好后试着发布文章,结果表明新安装后发布日志都正常,但当用2.71的数据库恢复后,WP又开始不能够发布日志了。看来问题是出在网站的数据库中,我用phpmyadmin工具打开数据库,仔细对比了新旧wordpress数据表,也没发现什么异常。我尝试用旧数据库的WP_posts表替换新数据库的WP_posts表,当替换成功后在发布日志时系统又出错了。这基本上表明问题出在WP_posts表中,但具体出错在这个表的什么位置,我也搞不明白,不过那些了解Wordpress的人可能知道,在WP中,WP_posts表是保存文章记录的表。如果这个表损坏,文章将丢失。对一个网站来说,WP_posts表是最重要的,无论如何,都不能够丢失数据。

问题确实很棘手,网站的这个问题必须解决。但很显然,我有点不知所措了。我开始回忆之前我对WP的操作,试图回忆起最近我曾经对我的BLOG系统做过什么,但印象非常模糊。不过我记得在wordpress后台中,有一个数据导入和数据导出的功能,据说能够将日志导出为XML文件,设计的目的是便于在不同的BLOG系统之间共享日志。这个功能我之前从未用过,值得幸庆的是好在我的BLOG系统只是不能够发布日志,原有的日志都是正常的。我于是尝试用这个XML导出功能将我的博客文章导出为一个文件,然后我在我新安装的一个wordpress中所这个XML文件导入。我登录新WP的后台,尝试发文章,结果一切正常,我检查了文章的ID,结果另我欣喜的事发生了,我发现在新测试的BLOG中导入的博文章ID和旧网站的ID完全相同。只是网站的栏目不存在,我知道网站的栏目是保存在WP另一个表中,所以我并不奇怪。不过,我有点知道如何解决问题了,既然问题出现在WP_posts表中,那么我完全可以在新测试的BLOG中导入XML数据后,用phpmyadmin工具将WP_posts导出为SQL文件,在我的旧BLOG数据库中将wp_posts表删除,然后将该SQL文件导入,一切完成后,我登录WP后台,发文章测试,正常了。

问题至此解决,值得提到的是wordpress的XML导入导出功能,这个功能原来在导入和导出时可以保持ID不变,这也是我成功解决发布问题根本所在。感谢wordpress开发人员!

继续阅读 »

wordpress博客Windows 下ISAPI_ReWrite伪静态规则

wordpress博客Windows 下ISAPI_ReWrite伪静态规则,在最新的WP2.71版本下测试通过。

<br/>#IIS ISAPI_Rewrite For WordPress:<br/><br/>形式1:年/月/日/Postname.html<br/><br/>[ISAPI_Rewrite]<br/><br/># Protect httpd.ini and httpd.parse.errors files<br/># from accessing through HTTP<br/><br/># # 形式:年/月/日/Postname.html<br/># # 自定义链接 /%year%/%monthnum%/%day%/%postname%.html<br/><br/><br/>RewriteRule /tag/(.*) /index\.php\?tag=$1<br/>RewriteRule /(about|contact|about-copyright|favor|archives|tags|sitemap)/ /index\.php\?pagename=$1<br/>RewriteRule /category/(.*)/(feed|rdf|rss|rss2|atom)/?$ /wp-feed\.php\?category_name=$1&feed=$2<br/>RewriteRule /category/?(.*) /index\.php\?category_name=$1<br/>RewriteRule /author/(.*)/(feed|rdf|rss|rss2|atom)/?$ /wp-feed\.php\?author_name=$1&feed=$2<br/>RewriteRule /author/?(.*) /index\.php\?author_name=$1<br/>RewriteRule /feed/?$ /wp-feed\.php/\?feed=rss2<br/>RewriteRule /comments/feed/?$ /wp-feed\.php/\?feed=comments-rss2<br/>RewriteRule /page/(.*)/ /index\.php\?paged=$1<br/>RewriteRule /([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/([^/]+)/?([0-9]+)?.html/?$ /index\.php\?year=$1&monthnum=$2&day=$3&name=$4&page=$5<br/>RewriteRule /([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/?$ /index\.php\?year=$1&monthnum=$2&day=$3&page=$4<br/>RewriteRule /([0-9]{4})/([0-9]{1,2})/?$ /index\.php\?year=$1&monthnum=$2&page=$3<br/>RewriteRule /([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/([^/]+).html/(feed|rdf|rss|rss2|atom)/?$ /index\.php\?year=$1&monthnum=$2&day=$3&name=$4&feed=$5<br/>RewriteRule /([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/([^/]+).html/trackback/?$ /wp-trackback\.php\?year=$1&monthnum=$2&day=$3&name=$4&tb=1<br/><br/><br/>形式2:形式:年/月/日/Postname/<br/><br/>[ISAPI_Rewrite]<br/><br/># Protect httpd.ini and httpd.parse.errors files<br/># from accessing through HTTP<br/><br/># # 形式:年/月/日/Postname/<br/># # 自定义链接 /%year%/%monthnum%/%day%/%postname%/<br/><br/><br/>RewriteRule /tag/(.*) /index\.php\?tag=$1<br/>RewriteRule /(about|contact|about-copyright|favor|archives|tags|sitemap)/ /index\.php\?pagename=$1<br/>RewriteRule /category/(.*)/(feed|rdf|rss|rss2|atom)/?$ /wp-feed\.php\?category_name=$1&feed=$2<br/>RewriteRule /category/?(.*)/ /index\.php\?category_name=$1<br/>RewriteRule /author/(.*)/(feed|rdf|rss|rss2|atom)/?$ /wp-feed\.php\?author_name=$1&feed=$2<br/>RewriteRule /author/?(.*) /index\.php\?author_name=$1<br/>RewriteRule /feed/?$ /wp-feed\.php/\?feed=rss2<br/>RewriteRule /comments/feed/?$ /wp-feed\.php/\?feed=comments-rss2<br/>RewriteRule /page/(.*)/ /index\.php\?paged=$1<br/>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<br/>RewriteRule /([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/?$ /index\.php\?year=$1&monthnum=$2&day=$3&page=$4<br/>RewriteRule /([0-9]{4})/([0-9]{1,2})/?$ /index\.php\?year=$1&monthnum=$2&page=$3<br/>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<br/>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<br/><br/><br/><br/><br/>形式3:/post/PostID.html<br/><br/>[ISAPI_Rewrite]<br/><br/># Protect httpd.ini and httpd.parse.errors files<br/># from accessing through HTTP<br/><br/><br/># # 形式:/post/PostID.html<br/># # 自定义链接 /post/%post_id%.html<br/><br/><br/>RewriteRule /post/tag/(.*) /index\.php\?tag=$1<br/>RewriteRule /tag/(.*) /index\.php\?tag=$1<br/>RewriteRule /(about|contact|about-copyright|favor|archives|tags|sitemap|taotao) /index\.php\?pagename=$1<br/>RewriteRule /post/category/(.*)/(feed|rdf|rss|rss2|atom)/?$ /wp-feed\.php\?category_name=$1&feed=$2<br/>RewriteRule /post/category/?(.*) /index\.php\?category_name=$1<br/>RewriteRule /author/(.*)/(feed|rdf|rss|rss2|atom)/?$ /wp-feed\.php\?author_name=$1&feed=$2<br/>RewriteRule /author/?(.*) /index\.php\?author_name=$1<br/>RewriteRule /rss.xml /wp-feed\.php/\?feed=rss2<br/>RewriteRule /feed/?$ /wp-feed\.php/\?feed=rss2<br/>RewriteRule /comments/feed/?$ /wp-feed\.php/\?feed=comments-rss2<br/># RewriteRule /([0-9]+)/?([0-9]+)?/?$ /index\.php\?p=$1&page=$2<br/># RewriteRule /post/([0-9]+)/?([0-9]+)?/?$ /index\.php\?p=$1&page=$2<br/>RewriteRule /post/([0-9]+).html /index\.php\?p=$1<br/>RewriteRule /page/(.*)/?s=(.*) /index\.php\?s=$2&paged=$1<br/>RewriteRule /page/(.*) /index\.php\?paged=$1<br/>RewriteRule /post/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<br/>RewriteRule /post/date/([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/?$ /index\.php\?year=$1&monthnum=$2&day=$3&page=$4<br/>RewriteRule /post/date/([0-9]{4})/([0-9]{1,2})/?$ /index\.php\?year=$1&monthnum=$2&page=$3<br/>RewriteRule /post/([0-9]+).html/(feed|rdf|rss|rss2|atom) /index\.php\?feed=rss2&p=$1<br/>RewriteRule /post/([0-9]+).html/trackback /wp-trackback\.php\?p=$1<br/>

继续阅读 »

WordPress google Sitemap Generator 插件说明

wordpress博客中的Google Sitemap Generator插件可以自动生成sitemap.xml文件,这个文件可以被Google、Yahoo等搜索引擎读取,以便搜索引擎更快地找到网站里的所有页面,从而使搜索引擎更快速地收录网站的页面。该插件自动生成sitemap.xml文件后,我们到Google Sitemaps注册并提交自己的sitemap.xml文件地址后,就一切OK了。当有新页面生成的时候,这边的插件会自动更新sitemap.xml文件。而Google会定期访问这个sitemap.xml文件,并从中解析出网址来。在Google Sitemaps网站可以很方便地查看网站的一些信息,比如读取错误、查询字符串、外部链接数、PR分布。但是,插件里也提到,不注册Google Sitemaps也可以让Google来读取sitemap.xml文件,只要开启插件的通知Google功能即可。另外,Yahoo的Yahoo Site Explorer也支持Sitemaps协议了,在添加feed的地方,除了可以添加RSS和Atom格式的feed,也可以添加sitemap.xml文件。

虽然从功能上来说,我觉得它比不上Dagon Design Sitemap Generator插件,因为Google很看重链接的,如果它没找到有一个网页链接到这个页面的话,它是不愿意收录这个页面的。但是,这个插件是自动工作的,每次发布文章的时候sitemap.xml文件就自动更新,而Google会定期来取文件,不用我们操心。

这个插件下载安装后激活就可以了,需要中文可以下载我做的Google Sitemap Generator中文包。sitemap.xml文件会生成在Blog的根目录下,如果根目录是可写的,那么这个文件会自动生成。如果不可写,那么需要手工上传个sitemap.xml文件,空的就可以了,然后把权限设置成可写。设置好后,进入后台设置页面,插件会提示进行首次创建sitemap.xml工作的。

插件设置页面的右方是相关链接,包括插件本身的相关链接,以及Google Sitemaps网站和Yahoo Site Explorer网站和Sitemaps协议的网站。

插件设置页面的最上方会显示上次重建状态。比如重建时间、是否成功通知了Google和Yahoo、以及整个重建过程所花费的时间。如果通知Google和Yahoo花费时间过长,那么插件还会提示你最好禁用相关功能以免影响速度。

常规设置中,可以设置的有:

Sitemap文件:可以选择是否写入sitemap.xml文件和sitemap.xml.gz文件。这两个文件是一样的,只是后者会被用gzip方式压缩。这两个文件任选一个就好了,选好后就提交相应的地址给Google Sitemaps。如果你的页面很多的话,可以选择gzip压缩文件,这样可以节约一点带宽。不过sitemap.xml文件很小的,我300篇文章不过sitemap.xml文件不过50K,也占不了多少带宽。

建立方式:

第一项应该选上,在发布或修改文章时自动重建sitemap.xml文件,这样插件就可以保证及时更新sitemap.xml文件,不用我们手工重建了。

第二项则是用于使用第三方工具修改WordPress数据库时,可以让第三方工具修改数据库后直接访问插件给出的地址,则插件会在这个地址被方式时开始更新sitemap.xml文件。我能想到的第三方工具就是采集器了,呵呵。

更新通知:重建时通知Google和Yahoo,这个功能可以在sitemap.xml文件被重建后向Google或者Yahoo发送通知,它们收到通知后就会马上赶来读取新的sitemap.xml文件了。这个功能和WordPress在发布新文章后Ping一些地址的功能很相似,比如我设置了Ping FeedBurner,在发布文章后,WordPress自动向FeedBurner网站发出ping,FeedBurner收到后会很快来读取feed的更新。不过这个功能很占时间,所以一般还是不用。搜索引擎收录也不是feed,不需要非得争那几分钟一小时的。

高级选项:可以设置让插件尝试在重建sitemap.xml文件时临时提高内存限制和运行时间限制。因为重建sitemap.xml需要查询整个网站所有的网址,所有可能需要占用很多内存和时间,而PHP可以对脚本的运行时间和占用内存进行限制的。如果建立sitemap.xml时没有提示错误,那么就不需要用这一项。而XSLT样式,则是使用XSLT样式表来修改xml文件的显示样式。使用插件自带的样式表,然后在浏览器里直接浏览sitemap.xml文件就可以看到效果了。

附加页面部分可以在sitemap.xml文件里添加WordPress之外的网页。比如某个WordPress Blog的地址是foo.com/blog,那么你可以把foo.com或者foo.com/abc等WordPress之外的地址加入到这里,以便Google也能找到这些地址。添加时要注意,如果添加的地址在sitemap.xml文件所在目录之外,那么这样的地址Google是不接受的。因为很多网站,比如一些免费空间是二级目录的,Google规定sitemap.xml文件只能包含它所在目录以及下级目录中的网址,上级目录或者其他目录的就不允许,当然,其他网站的网址就更不行了。所以,最好的办法是把sitemap.xml文件放在网站的根目录下。这可以通过下面的“Sitemap文件位置”部分进行设置。

优先级部分,可以设置文章优先级的计算方式。第一种是不计算,所有文章用同一个优先级。第二种是根据文章的评论数计算,直接用当前文章评论数除以总评论数得出一个数值。这样算出来的值可能很低,毕竟没有那篇文章的评论能占到总评论的百分之几十吧,而没有评论的文章,算出来的自然是0咯。第三种也是根据文章的评论数计算,但是它是用当前文章评论数除以所有文章评论数的平均值,我觉得这种方法比较好一些。第四种是通过Popularity Content插件计算,要安装了这个插件才会显示这个选项。

Sitemap文件位置部分,默认是当前Blog安装目录下,你可以改一下文件名。当然你也可以使用自定义,那么需要填写文件的绝对路径和访问的网址。

Sitemap内容部分,可以设置sitemap.xml文件包含哪些页面。可以选择首页、文章页、独立页、分类页、存档页、作者页。

更新频率部分,可以设置每类页面的更新频率值。定义上,这个值是要求搜索引擎隔多长时间访问某类网址,但是这个值只是个搜索引擎提供参考,只要按实际的更新频率进行设置就好了。比如首页可能每天或者隔几个小时就更新,而分类页和存档页可能更新会少一些。存档页是分成两部分的,第一个是当前月份的存档页,也就是说,比如现在是2007年3月,那么2007年3月这个存档页的更新频率最好调高一些,需要和首页一样高,因为当有新发布的文章时它们两个就会更新。第二个是除了当前月份外的其他存档页,它们只有的旧的文章被修改时才会有更新。

优先级部分,可以设置每类页面的优先级。定义上,这个值是要求搜索引擎优先访问哪些页面。但是,它也和上一条一样,仅供搜索引擎参考,你都设成1.0也是没有的。你可以单独设置每类页面的优先级,但是文章页被分成两类,一个是在没打开自动计算时文章页的固定优先级,一个是打开自动计算是文章页的最小优先级。把最小优先级设到0.5或者其他,这样就可以保证没有评论的文章不至于优先级为0了。

设置好了以后就不用管了,插件会自动在发布新文章时更新sitemap.xml文件,而Google也会定期来读取sitemap.xml文件。插件作者在readme文件里也建议用户不用过多的调整选项,默认的设置就可以工作的很好,当有错误或者有特定的需要时才需要来修改某些设置。

另外,Google Sitemaps和Yahoo Site Explorer都支持feed,最好把自己的feed加入进去,毕竟feed里的网址都是最新文章的网址,
正需要搜索引擎早日收录呢。WordPress里如果修改了Permalink结构的话,feed地址会是”foo.com/feed/”这样,这会被Google识别为目录。正如上面所说,这样的feed里除了/feed/目录以外的地址都是不被允许的,而无论文章还是分类页面都不可能在/feed/目录下。解决办法是,把最后的反斜线去了,用”foo.com/feed”这样的地址就可以了。

继续阅读 »

IT技术博客成功搬家–wordpress搬家

IT技术博客成功搬家。实在是没有办法,原来用host2ez的主机服务,但近期接到host2ez的通知,其因为受到严重的恶意DDos攻击,已经放弃了大部分的虚拟主机业务。受其影响,我的个人博客不得不搬家。

这次用上了火星主机,服务器在韩国,速度还不错,经过测试表明,网站访问速度要比美国主机明显快很多。

不过主机的管理面版Directadmin感觉不如cpanel方便,好在也不是很复杂,所以基本上也很容易掌握。

需要说明的是,这次wordpress搬家过程中还真遇到一些奇怪的问题,主要是搬家后发现网站打开空白,后台也不可以登录。有关这个问题,我将在下一篇文章中为大家介绍。

继续阅读 »