因为365memo.com域名到期,又不想花钱了,决定把mu整站搬到utmemory.com,并且把utmemory.com原来的wp直接并到mu里面作为主站。
准备数据
首先是mu改域名,如果在数据库里一个一个改,难倒是不难,就是太烦。几个外国哥们儿挺聪明的,提供方法如下,用mysql dump(可以用phpmyadmin或者其他客户端)把sql弄下来,然后查找旧域名,换成新的域名。在另一边的server建数据库,导入数据。
然后倒入wp数据。故技重施,直接备份wp_comments,wp_links,wp_postmeta,wp_posts,wp_terms,wp_term_relationships,wp_term_taxonomy这7个table,把wp_替换成wp_1_。然后把mu数据库里的wp_1_开头的这7个table删除。运行替换过的sql,重新生成这7个表。
到这里数据初步准备完毕。
准备文件
建一个index.html告知网站正在维护。
把所有wp的文件copy到备份目录,然后释放mu的文件,域名/index.php开始安装,没啥花头。
在cpanel里面建*的subdomain,不然没法做二级域名的mu。
把原站的wp-content目录,和wp的wp-content目录都搬到mu的wp-content,ok,准备工作基本就绪。
登陆后台启动正确的插件,theme,widget等,新站基本完成。
最后是把mu主站blog的作者id改成相对应的mu userid。如果mu里没有这个用户,先新建一个,然后用update wp_1_posts set post_author=x,如果多作者跟where。
测试一下新站是否全部正常,不正常的google。正常就删掉index.html。
做重定向
在原先域名的根目录下建.htaccess,内容如下
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^(.*)\.old\.com [nc]
RewriteRule ^(.*)$ http://%1.new.com/$1 [R=301,L]
</IfModule>
注意%和$的位置,这里卡了挺久。刚开始最好不要加R=301,万一写错了浏览器cache有些烦,成功了再加301
按分类归档: WordPress
MU搬家以及和WP合并
关于模板路径
更新了wp和PageNavi后,我突然PageNavi的样式丢失了,花了几分钟看了下代码,作者是这样写的:
function pagenavi_stylesheets() {
if(@file_exists(TEMPLATEPATH.'/pagenavi-css.css')) {
wp_enqueue_style('wp-pagenavi', get_stylesheet_directory_uri().'/pagenavi-css.css', false, '2.50', 'all');
} else {
wp_enqueue_style('wp-pagenavi', plugins_url('wp-pagenavi/pagenavi-css.css'), false, '2.50', 'all');
}
}
TEMPLATEPATH指向了父模板的路径,但是get_stylesheet_directory_uri给的是子模板的链接。查了一下api,理了一下思路,应该先查看子目录下pagenavi-css.css,再看父模板下pagenavi-css.css,最后采用默认css,改代码如下:
function pagenavi_stylesheets() {
if(@file_exists(STYLESHEETPATH.'/pagenavi-css.css')) {
wp_enqueue_style('wp-pagenavi', get_stylesheet_directory_uri().'/pagenavi-css.css', false, '2.50', 'all');
[...]
定时备份mu数据库
一直没有找到好用的mu数据库备份插件,mu官方给的方法是这样滴:
DATE=`date | tr " " _`
echo $DATE
mysqldump wordpress --add-drop-table -h localhost -u wpdbuser -pyourpasswd | gzip > db.$DATE.gz
tar cvfz code.$DATE.gz
不过这只有备份打包,没有发送到email得功能,最近我找到了这个:AutoMySQLBackup,一个shellscript,可以自动备份数据库,并发送到email,和WP-DB-Backup的功能一样了哦,不过怎样能定时运行嗫?在询问了site5客服后,得到的回复是——建个cron job。
先根据提示修改automysqlbackup.sh.2.5,写入数据库信息,上传到服务器合适的目录,例如:~/etc
修改权限:chmod +x ~/etc/automysqlbackup.sh运行一下看看有没有收到备份email,如果有问题,继续修改automysqlbackup.sh
ssh到服务器,输入crontab -e开始编辑,0 2 * * * ~/etc/automysqlbackup.sh(每天晚上2点运行),保存,退出,第二天看看有没有收到email。
给WP加上Google广告代码
刚给自己的blog加了Google广告,第一天就收入了1分美金,开心啊,照这样一个月3毛,一年3块6,Google 100美金给寄支票,那么30年左右我就能拿到我的第一张Google支票啦!
要给每篇post加上Google广告其实蛮容易的,代码如下:
<?php
add_filter('the_content', 'google_ads');
function google_ads($content){
if(is_page()||is_single()){
ob_start();
?>
<div class="google center">
<!--Google AdSense Code HERE-->
</div>
<?php
$content = ob_get_contents().$content;
ob_end_clean();
}
return $content;
}
?>
明天有空接着讲对直接访问和搜索引擎来的用户显示不同尺寸广告的代码。
去掉域名里的www(.htaccess)
前段时间偷偷去掉了域名里的www,看了ma.tt的文章,修改了WP的index.php(后来才发现ma.tt写了个插件WordPress no-www)。头几天挺好,PR也过来了,不过再后来PR就消失了,Leo说是PR没刷新,我晕,等等吧,怎么等也不见好,这时候唐唐说他转的域名PR恢复了,我突然反应过来升级WP该不是把我改的index.php覆盖了吧,一看果然是。重新Google .htaccess的解决方式吧。
# 301 redirect to domain without 'www.'
RewriteCond %{HTTP_HOST} ^www.example.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]
参见《301 Redirect With No WWW Using Htaccess》
也不知道有用没用。
WP空白首页历险记
今天又碰到个郁闷错误,瞳妈紧张兮兮的在QQ上说:花蕾怎么连不上了?一片白啊!
我一看,那叫一个白啊,⊙﹏⊙b汗!啥都没有啊。
想了想,先升级wp,后台一跑,挺好的呀。顺利升级,刷新,还是一片白。OK,我的theme写得有问题(用了都快1年的theme,怎么会突然有问题?不管了),启动default,还是一片白。那么??禁用插件,还是白的,Orz。
在大脑空白n分钟后到群里吼,然后开始google,关键词:“wordpress blank page”,结果有个外国哥们儿写,wp每个月都会定时不定时的来那么一次blank page,搞得和大姨妈一样,写了几个处理办法,我一看不外乎就是升级禁用插件,不过还写了看看php和mysql的版本。到cpanel里看了看,也没问题啊。那叫一个郁闷啊。
这时群里一群友说:“好像就是首页出了问题。”这算怎么回事儿啊。
决定全删掉,重装wp,顺手开了cpanel的文件管理(windows时代的,command line用不好),一个一个文件钩,突然我发现一个index.html,长度0,圈圈你个叉叉,谁放了个index.html在根目录?(曈妈,是你不?)删了,那丢失的主页又回来了,曈曈,优优,你们的笑脸真漂亮啊。
所以,同志们,有时候很多错误真的是很白。
[BUG]is_front_page
今又碰到一个wp的bug,也不知道说是wp的bug好还是我的数据库bug。
做顶部的“首页”链接的时候,我选择了is_front_page做为判断,不过失败了,换了is_home就好了,然后我就陷入了无限郁闷当中。看了一眼代码:
function is_front_page () {
// most likely case
if ( 'posts' == get_option('show_on_front') && is_home() )
return true;
elseif ( 'page' == get_option('show_on_front') && get_option('page_on_front') && is_page(get_option('page_on_front')) )
return true;
else
return false;
}
咋用了get_option('show_on_front')嗫,跑到后台一看,在“Setting - Reading”里面的“front page displays”里一个都没有选。再看数据库,果然,没有show_on_front这一条。剩下就是提交bug,然后改代码。
迂回的解决方法:if(get_option('show_on_front')?is_front_page():is_home()){}
3种方式改变默认avatar图片
第一种,增加后台的默认avatar选项,然后到后台的Settings-Comment设置里面选中,保存。这个比较适合自己网站有固定的默认头像图片,换任何theme都用这一个图片的情况。代码:
add_filter( 'avatar_defaults', 'fb_addgravatar' );
function fb_addgravatar( $avatar_defaults ) {
$myavatar = 'http://e-xia.com/avatar.jpg';//avatar地址
$avatar_defaults[$myavatar] = 'Avatar';//avatar名称
return $avatar_defaults;
}
第二种,通过get_avatar这个函数,设置第三个参数为默认头像的地址。这个适合需要默认头像配合当前模板来获得最大视觉效果情况,完全忽略后台设置,超级适用于对MU统一的默认头像管理。代码:
<?php
echo get_avatar( $id_or_email, $size = '96', $default = '<path_to_url>' );
?>
第三种,通过filterget_avatar来设置默认头像的地址。这个适合2.7中使用了默认的wp_list_comments(),或者作为子模板,不能直接调用get_avatar(),或者代码中多次使用了get_avatar(),想做统一修改的。代码:
<?php
add_filter('get_avatar', 'change_default_avatar', 1000, 4);
function change_default_avatar($avatar, $id_or_email, $size, $default){
return str_replace(urlencode($default), urlencode("<path_to_url>"), $avatar);
}
?>