这段代码是本来在 WordPress 4.x 用得好好的,怎么到 WordPress 2.9.2 上怎么就不行了呢?害得我搞了一个晚上,其实是我太大意了!!这段代码其实一直都在正常工作的,只不过它表现出来的和 WordPress 4.x 上不一样。在 4.x 上,当我新建一篇文章的时候,发现 postname 已经自动计算好了(自动对上一篇的postname+1)并显示,而在 2.9.2 上,它在编辑的时候并不会自动计算,那个别名框框上依然是个空格。害得我以为它在 WordPress 2.9.2 没有正常工作,其实不是的,它是要在文章发布的时候才会运行计算,留空好了,发布完成你看看就知道了!注意上一篇文章的 postname 不能是英文,否则它会计算出错的,变成了1-2、1-3这样的postname。

  我试了很多次没有成功,是因为上一篇文章的 postname 被我乱搞成英文了,所以我一直试啊试都是不成功的,其实这段代码一直是正常运作的,唉……白花了我好几小时在找错误。

get_row("SELECT post_name FROM {$wpdb->posts} WHERE {$wpdb->posts}.post_status = 'publish' AND {$wpdb->posts}.post_type = 'post' ORDER BY {$wpdb->posts}.ID DESC")->post_name + 1; //原文章没有添加 post_type 的筛选,实际测试表明加上更准确
}
add_filter('name_save_pre', 'fun_Permalink',1);
?>

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

刚刚出现了一个错误!!看到这个SQL语句:

SELECT post_name FROM {$wpdb->posts} WHERE {$wpdb->posts}.post_status = 'publish' AND {$wpdb->posts}.post_type = 'post' ORDER BY {$wpdb->posts}.ID DESC")->post_name + 1

注意它是 post_status = 'publish' ,而我刚好上一篇文章是私密文章,所以post_status = 'private',于是它就跳过去了。上一篇私密文章是303,它跳过这一篇文章,直接取上上篇的302+1,于是postname也成了303,那不是和私密文章冲突了吗?所以它自动计算成了303-2。我把 post_status = 'publish' 这个条件删掉吧,反正我去除了草稿、自动保存那种垃圾数据。而且这个小站经常会写些私密文章,如果是其它不写私密的网站,那么不用改的。