WordPress 2.1 新增支援 Pages 的 drafting,亦因為這個原故,database 內裡分辨 Post 和 Page 的方法改變了,令到一些 plugins 出現問題。
所有 Posts 和 Pages 都是儲存在 table 'wp_posts' 內的(以預設 wp_ 為 table prefix 的話),在 2.1 以前 Page 的定義是
post_status = 'static'但在 WordPress 2.1 後,Page 的定義變成post_type = 'page'post_type 在 2.1 以前是還未使用的,在 2.1 開始用作識別 Post 還是 Page,而 post_status 真的用作記錄 Post 或 Page 的狀態 - publish、draft 還是 private,之前很多 plugins 都默認 post_status = 'static' 的 record 就是 Page,post_status = 'publish' 的就是 Post,令到在 WordPress 2.1 的環境下 Page 都認作 Post,其中包括 Extended Live Archives。
要怎樣修改 ELA?其實只需修改 af-extended-live-archive-include.php 和 af-extended-live-archive.php 兩個 files,對 database 及 SQL/PHP 有認識的話應該已經懂得怎樣修改,因為涉及多處改動,如在這篇文章內講解會很長篇大論,我已經將修改好的 files zip 了,有需要的朋友可自行下載,為安全起見,記著自行 backup 那兩個 files 才作覆蓋。
下載鏈結(已經下載了 475 次)
巧了,我也贴了一篇类似的文章。
其实 WP 2.1 跟 UTW 也有相容性的问题,我也写了一篇关于怎么修补的文章。
天佑,我升级到2.1后,发现所有的page都变成了post,和插件没有关系,是在wp的后台看到的page都是空的,不知道有没有什么办法把指定的post变成page?谢谢!
fallen said:
問題這麼嚴重?你是否忘記執行 wp-admin/upgrade.php 呢?
如果你有行 upgrade.php 的話,那就要直接修改 wp_posts 內的 records 了。
首先你要知道那些 Pages 的 ID 是什麼,再在 wp_posts 內將那些 ID 的 record(s),field 'post_type' 由 'post' 改為 'page',再檢查 field 'post_status' 是否 'publish',否的話將 'post_status' 的 value 改為 'publish' 就應該可以。
天佑:
谢谢你的答复,我执行了upgrade.php。我查了records,那些page的post_type本来就是page,‘post_status’ 是 ‘publish’,可还是没法在后台看到,太奇怪了!
fallen said:
那就真的太奇怪了。
终于修好了,后来我新建了一个page,再跑去看数据库,发现原来的那几个消失的page变成了post属性,这时候改成page,再回后台就可以看见了,但在前台仍然无法访问,最后没办法,把所有page都重新保存了一下,居然都正常了!
谢谢天佑的帮忙!!
fallen:我都沒幫過你什麼,不用這麼客氣吧。