手动修改WordPress默认数据表前缀

F:为什么要修改默认表前缀呢
Q:1.在不支持多数据库的情况下安装多个WordPress,国外空间一般都支持多数据库,国内有的仅支持单个数据库,不同的表名前缀就能让多个WordPress同用一个数据库而不会相互干扰
2.防范未知的SQL注入漏洞,即使以后被爆出SQL注入漏洞,对方猜解不到表名就无法靠SQL注入漏洞入侵(有人问:改字段名呢? 答:首先改字段名工程太大,其次,就算改了字段名Union注入也是可能的)《—小菜看不懂直接略过,和今天的主题无关

下面进入正题(本例为把前缀修改为LostIe):
1.进入后台暂停所有插件(其实可以不暂停的,怕有的插件出问题,所以还是先禁用吧)
2.用UltraEdit或者其他你喜欢的编辑器打开wp-config.php,找到 $table_prefix = ‘wp_’;
修改为 $table_prefix = ‘LostIe_’; 这时你访问自己的WordPress会发现出错,不用理会
3.用phpadmin等任何可以操作数据库的工具,执行以下SQL语句:

ALTER TABLE wp_comments RENAME LostIE_comments;
ALTER TABLE wp_links RENAME LostIE_links;
ALTER TABLE wp_options RENAME LostIE_options;
ALTER TABLE wp_postmeta RENAME LostIE_postmeta;
ALTER TABLE wp_posts RENAME LostIE_posts;
ALTER TABLE wp_terms RENAME LostIE_terms;
ALTER TABLE wp_term_relationships RENAME LostIE_term_relationships;
ALTER TABLE wp_term_taxonomy RENAME LostIE_term_taxonomy;
ALTER TABLE wp_usermeta RENAME LostIE_usermeta;
ALTER TABLE wp_users RENAME LostIE_users;

Congratulation!再次访问自己的WordPress看看,是不是貌似一切都正常了?
进入后台看看,却发现

您没有足够的权限访问这个页面。

其实还差2个SQL语句我故意没写在上面哈哈
接着执行

UPDATE LostIE_options SET option_name = REPLACE(option_name,'wp_user_roles','LostIE_user_roles');
UPDATE LostIE_usermeta SET meta_key = REPLACE(meta_key,'wp_','LostIE_’);

其实你完全可以把这两句和上面的十句一起执行^_^
这下就完全正常了,如果前面暂停了插件就去后台重新启用吧
enjoy it and have fun~
改个文件,执行了12条语句,操作起来也就一分钟吧~
我就不抓图了,看不明白的在下面提问吧~

如何自定义WordPress2.7的评论内部结构

来源:浆糊纸卷

WordPress2.7的重大更新之一是增加了嵌套评论的支持,因此而引入了一个新的内核函数wp_list_comments。新的函数接管了显示整个评论列表的功能,能够根据评论层次自动形成嵌套样式,好处是十分明显的。但也正因为wp_list_comments封装了评论显示代码,使得更改评论内部结构变得不容易。下面我就讲一下如何既支持嵌套评论显示又能够自由更改评论内部结构的方法

WordPress2.7中的评论内部结构是这样的:
Clipboard01
而你们现在看到我的评论内部结构是这样的:
Clipboard02

要实现这样的更改需要用到wp_list_comments函数的callback参数,先来看看浆糊纸卷的评论显示函数是怎样写的:
<?php wp_list_comments(‘type=comment&callback=win7blog_comment&end-callback=win7blog_end_comment’); ?>

解释下三个参数的用途,wp_list_comments函数提取的对象不仅有评论还有引用通告等,所以这里使用type=comment告诉他仅提取评论;重点是callback参数,这个参数的用途是告诉wp_list_comments我要使用我自己的显示函数win7blog_comment;最后,end-callback参数并不是必需,仅当你需要将显示函数分成两部分的时候使用。

附win7blog_comment示例(详细的代码就不列了,感兴趣的朋友可以下载Win7blog主题查看)Clipboard03

为WordPress评论加入楼层显示

所谓楼号显示,即是根据评论发表的时间先后顺序显示该评论在评论列表中占据的楼号,第一条评论为1楼,第二条为2楼,以此类推。

在原本不支持嵌套评论的WP 2.6.5以前,为评论加上楼号是件很简单的事。因为最新的评论总是在最下,需要做的只是在显示评论的循环中输出一个依次累加的数即可。但在嵌套评论模式下,由于最新的评论可能是被嵌套在其他评论中的一条子回复,因此在最下(上)的评论未必是最新。换句话说,像以前那样给最下(上)的评论赋予最新的楼号就不再正确了。因此,要能够在嵌套评论中也显示正确的楼号,需要少少绕一点弯路。

第一步:要在评论中增加楼号显示,也就是要更改WordPress的评论内部结构。
第二步:WP中的评论是统一标号的。也就是说,一条标号为256的评论并不知道它自己在某个日志中应该是几楼。所以要由我们来告诉它。举例来说,假设某篇日志中的评论分别是201号、207号、311号,其中311号是201号的子回复。那么尽管311是最新评论,但实际显示顺序是 201-311-207(从上到下)。怎么才能让201知道自己是1楼,311知道自己是3楼呢?虽然说WP 2.7的显示评论的顺序由于嵌套规则的存在而被打乱,但实际上其在提取评论的时候仍然是按标号顺序来的。也就是说例子中的评论提取顺序是201-207-311,这样就正好符合1楼-2楼-3楼。所以方法也就很明显了,在提取评论的时候赋予楼号,在显示评论的时候提取楼号。

1.在提取评论时赋予楼号:

在comments.php中找到<?php if ( have_comments() ) : ?>或是<?php if ( $comments ) : ?>,在其后加上

<?php global $comment_ids; $comment_ids = array();
foreach ( $comments as $comment ) {
if (get_comment_type() == "comment") {
$comment_ids[get_comment_id()] = ++$comment_i;}
} ?>

2.在显示评论时提取楼号:
//注意此处应当是在自定义的评论显示函数中(themes下的function.php,用ultraedit32等编辑器打开)
//最常见的是在显示日期的代码后加上如下代码(根据具体情况可能稍有变化 有的可能是

<div>

)

<span class="floor"><?php global $comment_ids;
$comment_floor = $comment_ids[get_comment_id()];
echo $comment_floor.'楼'; ?></span>

如果有看不懂的地方可以留言。我会尽最大努力帮助你

修改Simple Tags,让WordPress显示彩色标签云

无可否认,Simple Tags可以说是Wordpress上最好的标签插件,把Wordpress的管理标签的功能提高了很多。不仅仅是对标签的管理,还有相关标签,相关日志,标签云等等功能。
今天就来说说用Simple Tags来做标签云的问题,大家可以看我博客的侧边栏,你会发现标签云是彩色的,而且刷新一次变一次。

这种彩色标签云效果可以通过修改Simple Tags来显示。
1.在simple-tags.client.php中先找到getColorByScale的function:

function getColorByScale($scale_color, $min_color, $max_color)

2.注释掉(或者删除)getColorByScale这个function中的以下语句:

$scale_color = $scale_color / 100;
$minr = hexdec(substr($min_color, 1, 2));
$ming = hexdec(substr($min_color, 3, 2));
$minb = hexdec(substr($min_color, 5, 2));
$maxr = hexdec(substr($max_color, 1, 2));
$maxg = hexdec(substr($max_color, 3, 2));
$maxb = hexdec(substr($max_color, 5, 2));
$r = dechex(intval((($maxr - $minr) * $scale_color) + $minr));
$g = dechex(intval((($maxg - $ming) * $scale_color) + $ming));
$b = dechex(intval((($maxb - $minb) * $scale_color) + $minb));

3.加上以下代码:

//Colorful Tag Cloud start
$r = dechex(rand(0,255));
$g = dechex(rand(0,196));
$b = dechex(rand(0,255));
//Colorful Tag Cloud end

至于要显示多少个标签,怎么排列,热门标签和普通标签分别为多少大小的字体,可以在后台的Simple Tags的选项中设置。
在你的主题的相应位置加上,你就可以看到彩色的标签云了。

Wordpress 自定义RSS输出(无302 redirect)

简单的说,就是自定义独立博客的RSS输出路径到独立域名.
假设你在http://example.com 安装了一个WordPress博客,那么WP默认的RSS FEED输出路径是http://example.com/feed

事实上,WP通过mod_rewrite 把 http://example.com/feed 内部重定向到 http://example.com/wp-feed.php .而这个文件才是最终输出FEED的.

我们要做的是,把这个输出路径改为http://feed.example.com

为什么要改? http://feed.example.com 和http://example.com/feed有什么区别?
这个问题问得相当好,事实上,区别并不大,除了对SEO可能有少许影响外,这样做并没有多大意思.-不过,至少,在你博客访客看来,这个独立二级域名的RSS地址更加”专业”,这就够了!

怎么改?首先你必须确保拥有example.com这个域名完全权限
然后,最简单,也是最常用的方法是到Feedsky免费注册个帐号,Feedsky是一个Feed托管网站,免费提供域名绑定功能,你只需要在example.com域名里,添加一条”feed” 的A记录到feedsky指定的IP,然后在Feedsky后台把feed.example.com域名和你的原始RSS地址(http://example.com/feed ) 绑定就可以了
(详细过程参考这里

这样做好处是不占用你自己虚拟主机/服务器资源,还能享受免费的统计功能.

还有一种,就是用自己的空间,通过feed.example.com域名,自己输出RSS.这样可以有最大程度的自主权

但是,直接绑定feed.example.com域名到 example.com域名下的feed目录是不行的.因为http://example.com/feed这个地址中的 feed并不是真实目录,而只是mod_rewrite后的地址!

所以,你必须重新在虚拟主机里添加一个二级域名 feed.example.com ,绑定的目录随意,然后,有两种方法:

A:

直接重定向. 建立一个 index.php在 feed.example.com目录下,内容为:

<?php header("Location: http://example.com/feed") ; ?>

这样做最方便,而且大部分RSS阅读器都支持.但是,这样访问feed.example.com 输出的头信息是302 Redirect,(如下图)严重不利于SEO.而且也不便于RSS管理..

B

这是推荐方法.同样建立index.php文件,内容为

<?php header("Content-Type: application/xml; charset=utf-8") ;
 @readfile("http://example.com/feed");
?>

OK.现在试试看,完全符合我们要求,不仅直接输出FEED内容,最重要的,没有了 302 Redrect
也就是说,它看上去和原始RSS输出毫无区别.:

事实上,Feedsky应该也是用这个原理的(不过feedsky应该没有真正绑定feed.example.com域名,而只是泛域名解析)

这样,每次访客访问feed.example.com读取RSS时,都会被上面的index.php文件处理,并输出真正RSS FEED 到客户端,整个过程对客户端完全透明!你完全可以在这个index.php里加入其它代码实现任何统计功能,甚至做一个小型的Feed烧制系统-就像Feedsky那样!
(我想,应该有人已经做了这种程序吧)

PS:readfile()需要打开 allow_url_open .如果你使用dreamhost虚拟主机,参考这里

B 方法是我推荐的,但这可能耗费一定CPU资源
我没有做过实验,不知道这个readfile() 会耗费多少资源.或者采取变通的方法:

在虚拟主机上增加一个 crontab (需要Shell权限) :
10,20,30,40,50,0 * * * * wget -c http://example.com/feed -O ~/feed.example.com/rss.xml

(把 ~/feed.example.com 换为 你绑定feed.example.com的目录,例如 cPanel主机可能是 ~/public
_html/feed )

然后编辑feed.example.com 的 .htaccess:
DirectoryIndex rss.xml

OK.这样做非常节省资源,基本不耗费CPU(每10分钟才重新生成rss.xml).只是你博客RSS输出会有10分钟延迟.
还有就是无法进行统计.

最后,不要忘了,改改WP模板(Theme),把其中的全文RSS路径改一下.

在FeedSky和FeedBurner中无缝切换

如果你和使用子域名(即http://feed.lostie.cn/)来更新feed的话,可以使用301重定向到feedburner,来解决这个问题.

首先将子域名的CNAME记录改为A记录,指向到自己的服务器.然后在服务器上建立一个feed站点,由于我是使用HM的主机,所以可以直接在子域名设置那里重定向到feedburner.

或者你使用的主机无法这样设置.那么可以利用.htaccess
以下是我的规则

Options +FollowSymLinks
rewriteEngine on
rewriteCond %{http_host} ^feed.lostie.cn[NC]
rewriteRule ^(.*)$ http://feeds.feedburner.com/catrss/$1 [R=301,L]

如果你的服务器不支持.htaccess,那么这里给出PHP和ASP的301重定向

PHP的

< ?
Header( “HTTP/1.1 301 Moved Permanently” );
Header( “Location: http://www.new-url.com” );
?>

ASP的(没测试)

Response.Status="301 Moved Permanently"
Response.AddHeader "Location","http://www.laolin.net/"
Response.End

如何实现Wordpress文章分页

文章太长了,问Wordpress如何实现文章分页,编辑器里没有这个选项,其实Wordpress已经有这个功能了的,只是把该标签隐藏起来了!实现起来很简单,只需两步:

1.添加wp_link_pages()函数
在你所使用主题的single.php中,找到函数:< ?php the_content(); ?>

在其后面加上一下代码即可:

<?php wp_link_pages(array('before' => '<p><strong>Pages:</strong> ', 'after' => '</p>', 'next_or_number' => 'number')); ?>

2.在文章里手动添加nextpage标签
和more标签类似,使用nextpage标签需切换到HTML源代码模式编辑文章,在需要分页的地方插入

nextpage

记住,分别在nextpage前后加上“”!

这样,你的文章就会实现形如“Pages: 1 2”的分页功能了!但是,使用此方法后,静态化和伪静态化的Blog链接样式不太美观,会出现类似“postname.html/2”的样式

在Wordpress中自动获取文章中的图片

在做Wordpress主题的时候,有一个问题一直没解决。那就是自动显示缩略图。当然,我知道你可能想利用wordpress中的自定义字段(custom field)功能,显然,这是可行的。但并不自动,这样的话,我们总需要手动添加custom field。很是麻烦。现在好了,在10 Killer WordPress Hacks这篇文章中,我看到最有用的一个hack将能解决这个问题,自动搜索文章图片,然后,显示。

<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<?php
$szPostContent = $post->post_content;
$szSearchPattern = ‘~<img [^\>]*\ />~’; // 搜索所有符合的图片
preg_match_all( $szSearchPattern, $szPostContent, $aPics );
$iNumberOfPics = count($aPics[0]); // 检查一下至少有一张图片
if ( $iNumberOfPics > 0 ) {
// 这里是你怎么处理图片的内容
for ( $i=0; $i < $iNumberOfPics ; $i++ ) {
echo $aPics[0][$i];
};
};
endwhile;
endif;
?>

但是,像你知道的,这样的话,如果一篇文章有多个图片的话,都统统会被显示出来。有时我们只需要显示一张,那这个代码就不符合我们的要求了,所以,让我们来小小地修改一下代码:

<?php
$soContent = $post->post_content;
$soImages = ‘~<img [^\>]*\ />~’;
preg_match_all( $soImages, $soContent, $thePics );
$allPics = count($thePics[0]);
switch ( $allPics > 0 ) {
case $allPics = 1:
echo $thePics[0][0]; // 显示文章中的第一张图片
break; // 当图片数量有1个时,不再执行
default:
echo "这里应该显示图片,而不是sofish"; // 这里加入没图片时显示的默认图片
};
?>

像上面说明的,我们用switch语句,而不是if…else if…else这样,来获取我们的一张图片。当检查到一张的时候,代码不再运行。这样也省去了对服务器的请求。

UPDATE: 感谢来自herb同学的说法,用if…else语句

<?php
$soContent = $post->post_content;
$soImages = ‘~<img [^\>]*\ />~’;
preg_match_all( $soImages, $soContent, $thePics );
$allPics = count($thePics[0]);
if( $allPics > 0 ){
echo $thePics[0][0];
}
else {
echo "这里应该显示图片,而不是sofish";
}
?>

这样的话,也OK,这里是不是说明会检测完所有的图片后,然后,再选择显示显示第一张/默认图片呢?如果是,这个代码的效率可能就没有上个好。但herb同学说:
你的那个switch有bug, 如果php的语法与C相同的话, 它应该只能显示仅有一张图片的缩略图。

不,这样的BUG没有出现,因为我自己测试过了。 估计是C与PHP有一些小不同。基于效率问题,我推荐你使用Switch语句的实现方法。你呢?如果测试出问题,可以用第二种方法。好吧,我只看了一点点的PHP,如果你有更好的方法,不妨提出来,让更多人知道。

在wordpress中实现音乐持续(不间断)播放

QZONE的连续背景音乐你一定已经看见了吧。下面我就教你怎么搞定它。

前天自己的WP才正式上线,现在只能算新手。昨天突然萌生了在WP中插入背景音乐的想法。google了一下,听说可以用插件实现,但仔细研究发现,用插件来实现背景音乐的方法有两大弊端:

1.无法实现连续播放,因为WP每次进行页面切换都要重新加载全部文件。所以鼠标一点,音乐就要从头开始了。

2.要在每页都加入插件代码,很麻烦。

如果非要用插件又不能有这两种弊端就只能用全站AJAX来实现,门槛如此之高,工程如此庞大,别说时我这样的菜鸟,就是高手也要三思才敢行动。(高高高高高手除外)o(∩_∩)o…

看了一些站点,有的人为了实现不间断播放甚至把文章全部做到HOME页上来,个人觉得,这实在是得不偿失,不仅影响了美观性,还大大延长了页面加载的时间。

又G了半天下,终于发现有一个人提出用html框架来解决,的确是个很好的办法,真是吝啬。但点了进去,他却没给出具体的流程于代码。无奈,只好凭着自己浅薄的HTML功底独自琢磨了。本来打算昨天把它搞出来,但昨晚颓废了一把,打了一晚上的游戏,还看电影,,,实在是不应该。

说了那么多废话,你一定烦了,不怕,具体教程,马上贡献。

首先,你要做一个框架页,你把它命名为load.html 或者main.html都行,只要你乐意,但绝对不能是index或者default之类的,具体原因很简单,此文不再解释。

在页面中添加以下代码:

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<title>XXXXX</title>
</head>

<frameset border=”0″ rows=”50,*”>
<frame name=”player” src=”player.html” noresize=”noresize”/>
<frame name=”blog” src=”index.php” noresize=”noresize” />
</frameset>
</html>

保存。

看懂的上面的代码我想你就恍然大悟了,呵呵。

第二步,上http://www.51119.com/play/选择一个你喜欢的播放器,填好参数后你会得到一段html代码。把它复制下来,下面用。(当然,如果你看得懂actionscript的话,此步,甚至此文都可以跳过!)

下面是第三步,建立player.html

粘贴以下代码,并保存。

<html>
<body bgcolor=”你的wp主页的顶端颜色“>

在51119.com得到的代码

</body>
</html>

最后,把上面两个文件上传到wordpress根目录下,再把原来指向wordpress中index.php的连接指向load.html 。

有的人的博客直接就处于虚拟主机的根目录,域名是直接指向的,这样的博客就要在文件命名和存放路径上用点功夫了,还要修改index.php的代码,不过也不复杂,希望这些人动下脑筋,自己想个解决的办法。提示一下,要用session存一个变量,避免播放器的重复加载。

WP第一篇文章测试

准备从新耕耘博客  从LIVE SPACE 搬家过来了。。。试试这个强大的WP~~~~

等有时间选个好点的主题 设置好插件。。。。新手。。。有经验的不妨留言让我学习学习