Posts Tagged with wordpress

顺利升到Wordpress 2.3

确切的讲应该是svn上的trunk版本,呵呵

基本还算一切顺利,除了传说中的extended live archive和google sitemap generator的冲突以外。

1. 过程:

1) 当然是备份数据库咯,这个八仙过海吧,不过有shell的话肯定是方便多了:

mysqldump -h db_domain -u db_user -p db_name > back.sql

2) 上传新版本,然后和安装一样编辑wp-config-sample.php(或者2.2的可以用原来版本的wp-config.php)保存为wp-config.php

3) 浏览器访问 http://www.xxx.com/wp-admin/upgrade.php

按步骤一路下去就ok了

2. 接着就是一些整合工作:

1) 2.3的数据库schema和2.2的变化很大,一些旧的数据表已经不再使用,但是目前的upgrade过程中并没有删掉这些表,所以。。。如果你和我一样是个完美主义者,并且不怕什么风险的话,只要保留一下10个表(当然一些插件建的表除外,这个自己判断把)

  • wp_termswp_term_taxonomy
  • wp_term_relationships
  • wp_comments
  • wp_links wp_options
  • wp_postmeta
  • wp_posts
  • wp_users
  • wp_usermeta


2) ok,接着是UTW,2.3的wordpress内建了tag系统,如果你以前使用UTW的话那么可以通过Wordpress提供的Import功能将UTW的tag全部转换过来:
管理后台->Manage->Import->UTW

如果你还比较依赖UTW的embedded tag功能和related post功能的话(比如我),可以用这个插件作为替代:
TagConverter

3) UTW搞定了,然后嘛。。。还是有点想用Extended Live Archive和Google Sitemap Generator的说,懒得自己改的话,这里有改好的版本
Extended Live Archive

GoogleSitemap Generator

ok,大功告成

PS:嗯,终于发现我是一个喜欢折腾blog胜过于写blog的人 _!

UPDATE: 有个小问题,原本用embedded方式嵌入的tag似乎都无效了。。。

Quoter插件的Bug

换了Sandbox并调整了一下主题,发现ajax comments无效了,一直以为是模板的关系,仔细跟了一下才发现居然是Quoter搞的鬼。

因该算是Quoter的一个Bug吧,所有带js参数的url全部返回Quoter的JS,于是。。。ajax comments的js便失效了,comment的提交代码自然也就不存在了。

解决:其实可以仿照ajax comments的做法(这点ajax comments的作者要比quoter的作者考虑的周到),就是在返回js之前,判断url是不是quoter的,如果是的话再返回,diff文件如下:

--- quoter.php.ori 2007-08-30 01:38:24.000000000 -0700
+++ quoter.php 2007-08-30 01:42:41.000000000 -0700
-26,8 +26,12
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/

+define('PLUGIN_QUOTER_FILE', 'quoter.php');
+define('PLUGIN_QUOTER_PATH', '/wp-content/plugins/quoter/');
+
// Javascript code
-if (isset($_GET['js'])) {
+if(strstr($_SERVER['PHP_SELF'], PLUGIN_QUOTER_PATH.PLUGIN_QUOTER_FILE)
+ && isset($_GET['js'])) {
quoter_JScode();
}

-148,7 +152,8

// If it's a server side quote page don't let robots index it
- if (isset($_GET['quote']) && $_GET['quote'] != ""){
+ if(strstr($_SERVER['PHP_SELF'], PLUGIN_QUOTER_PATH.PLUGIN_QUOTER_FILE)
+ && isset($_GET['quote']) && $_GET['quote'] != ""){

echo ("n");

Wordpress 2.2.2

Today we have two security-related releases available for both users of our main 2.2 branch and the legacy 2.0 branch. As these releases include only security and minor bugfixes they should not cause any plugin or theme compatibility issues, so you have no good excuse not to upgrade.

只是两个安全漏洞和一些小的bug,不会引起插件和主题的兼容性问题,所以——推荐升级

Feedsky Ping Plugin for wordpress - Mod

今天终于决定将我的RSS托管从Feedburner迁移到Feedsky,然后开始想办法搞定feed转向的问题

开始是用FeedSmith修改来用的,只要在FeedSmith的选项里填入feedsky的地址,然后对FeedSmith稍加修改:

找到这一段:

if (!preg_match("/feedburner|feedvalidator/i", $_SERVER['HTTP_USER_AGENT'])) {
add_action('template_redirect', 'ol_feed_redirect');
add_action('init','ol_check_url');
}
改成
if (!preg_match("/feedsky|feedburner|feedvalidator/i", $_SERVER['HTTP_USER_AGENT'])) {
add_action('template_redirect', 'ol_feed_redirect');
add_action('init','ol_check_url');
}
后来偶然发现Feedsky有一个已经做好的wordpress插件,而且提供ping的功能,但是这个plugin有一个限制,只能输入feedsky的feed名称,也就是说,所有feed会被转向到feed.feedsky.com/feedname的地址,其实对于不做域名绑定的用户已经完美了,不过对于绑定了域名的用户这种转向就没什么意义了,于是动手稍稍改动了一下。

稍微说明一下:在后台设置feed名的后面会比原来的版本多出加了一个文本输入框,用来填feed地址,如果这个feed地址置空的话则会默认使用feed.feedsky.com/feedname,因为我实在是比较懒,所以也没有加什么说明文字,同时也没有做feed地址的校验,所以。。。各位将就一下吧,能用就成,哈哈

下载 Feedsky Ping Reload

 

修正 Wordpress 2.2 Widget 的 bug

尽管Wordpress 2.2的Widget和Automattic的Sidebar Widget插件兼容,但是却存在一个不大不小的bug:

在调用register_sidebar注册超过一个Sidebar的时候,如果同时指定了Sidebar的名称,那么最终只能注册成功一个

Sidebar,例如按照Automattic的API应该可以使用register_sidebar (2, array (‘name’ => ‘aaa %d’))注册依次为aaa 1,aaa 2的sidebar,而在wordpress中的结果则是只有一个名为aaa的sidebar,看看代码(WORDPRESS DIR/wp-include/widgets.php)

function register_sidebars($number
= 1, $args = array()) {
$number = (int) $number;
if ( is_string($args) )
parse_str($args, $args);

$i = 1;

while ( $i < = $number ) {
$_args = $args;
if ( $number > 1 ) {
$_args['name'] = isset($args['name']) ? $args['name'] : sprintf(__
(
'Sidebar %d'), $i);
} else {
$_args['name'] = isset($args['name']) ? $args['name'] : __('Sidebar');
}

$_args['id'] = isset($args['id']) ? $args['id'] : "sidebar-$i";
register_sidebar($_args);
++$i;
}
}

嗯。。。相信已经有同学看出来了,在注册多于一个sidebar时,sidebar的名字是

 

isset($args[’name’]) ? $args[’name’] : sprintf(__(’Sidebar %d’), $i);

就是说如果指定了名字则已指定的名字为准,没有指定名称时才会按数字递增,那么修改就很容易了(其实照抄Automattic Sidebar Widget的就可以了,嘿嘿)

 

function register_sidebars($number = 1, $args = array()) {
$number = (int) $number;
if ( is_string($args) )
parse_str($args, $args);

$name = $args['name'] ? $args['name'] : __('Sidebar');

$i = 1;
while ( $i < = $number ) {
if ( isset($args['name']) && $number > 1 ) {
if ( !strstr($name, '%d') )
$name = "$name %d";
$args['name'] = sprintf($name, $i);
}
register_sidebar($args);
++$i;
}
}

ok,收工