日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

如何id变动自动保存html软件,Wordpress折腾小记:彻底解决ID不连续的问题-自动保存、自动修订 | 地瓜哥博客网...

發(fā)布時(shí)間:2025/3/20 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何id变动自动保存html软件,Wordpress折腾小记:彻底解决ID不连续的问题-自动保存、自动修订 | 地瓜哥博客网... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

使用Wordpress,尤其從3.0走入Wordpress世界的朋友,也許都遇到過(guò)一個(gè)問(wèn)題:自動(dòng)保存(Auto-Save)和文章修訂(Post-Revisioning)功能導(dǎo)致文章ID不連續(xù)的問(wèn)題。有時(shí)還特別夸張。例如,我的“‘地瓜哥’博客網(wǎng)”,第一篇文章是1,第二篇文章已經(jīng)一下子跳到了19。這樣對(duì)于像D瓜哥這樣的“ID潔癖”的人來(lái)說(shuō),實(shí)在很不爽!經(jīng)過(guò)D瓜哥的多次嘗試后,終于很徹底地解決了這個(gè)問(wèn)題。并且,還可以把以前被自動(dòng)備份的ID重新利用起來(lái)!

去掉自動(dòng)草稿的功能

造成發(fā)布文章ID不連續(xù)的原因有三:

自動(dòng)保存功能 Auto-Save;

歷史版本 Post Revisions;

自動(dòng)草稿功能 Auto-Draft!

針對(duì)WordPress 3.4.x,這里給大家介紹一個(gè)解決ID不連續(xù)發(fā)方法:

打開(kāi)%WP%/wp-config.php文件,在 “$table_prefix = ‘wp_’;” 前面添加如下代碼(注意,一定是”$table_prefix = ‘wp_’;”這行的前面):

define('WP_POST_REVISIONS', false);

define('AUTOSAVE_INTERVAL', false);

找到并打開(kāi)%WP%/wp-admin/post-new.php 和%WP%/wp-admin/post.php 這兩個(gè)文件,將其 “wp_enqueue_script(‘a(chǎn)utosave’);” 注釋或刪除掉。如下:

//wp_enqueue_script('autosave');

經(jīng)過(guò)上面的修改后,文章的自動(dòng)保存和歷史版本都關(guān)閉了。不過(guò),這里也帶來(lái)了一個(gè)副作用:預(yù)覽不能使用了,需要手動(dòng)保存草稿后才行。美中不足吧。

另外,還有個(gè)自動(dòng)草稿功能,我們下面會(huì)介紹如何處理。

在這里D瓜哥要糾正一個(gè)曾經(jīng)犯的錯(cuò)誤。D瓜哥在“關(guān)閉WordPress自動(dòng)保存和文章修訂功能”中提到了一種方法,但是經(jīng)過(guò)D瓜哥的使用經(jīng)驗(yàn)來(lái)看,這種方式不好使!請(qǐng)大家停止使用。

刪除無(wú)用的草稿

在“刪除草稿”方面,有一些相應(yīng)的插件,比如Delete-Revision,但是給Wordpress安裝過(guò)多的插件會(huì)降低她的速度。所以,D瓜哥盡量少安裝插件,如果通過(guò)簡(jiǎn)單的代碼修改就能解決問(wèn)題,就盡量修改代碼。另外,由于“刪除草稿”這樣的操作,也許只需要操作一次,而且只需要簡(jiǎn)單的SQL。所以,D瓜哥認(rèn)為必要安裝插件。這次,我們就通過(guò)編碼來(lái)完成我們的工作。

注意,請(qǐng)?jiān)谶M(jìn)行如下工作前,備份數(shù)據(jù)庫(kù)!防止把數(shù)據(jù)搞壞。

我們先來(lái)看一下冗余數(shù)據(jù)(無(wú)用的自動(dòng)修訂、草稿等)。登陸phpMyAdmin(一般虛擬主機(jī)都會(huì)提供的),然后選中相應(yīng)的數(shù)據(jù)庫(kù),然后在里面執(zhí)行如下SQL:

-- 查看自動(dòng)修訂產(chǎn)生的冗余數(shù)據(jù)

-- 注意,請(qǐng)根據(jù)自己的情況,修改表名(主要是表前綴)

SELECT * FROM `wp_posts` WHERE `post_type` = 'revision';

這里顯示內(nèi)容都是一些冗余的數(shù)據(jù),可以直接刪除。刪除SQL如下:

-- 刪除冗余數(shù)據(jù)

DELETE FROM `wp_posts` WHERE `post_type` = 'revision';

另外,需要給大家提醒一點(diǎn)。在D瓜哥查找刪除冗余數(shù)據(jù)的資料中,見(jiàn)到過(guò)如下的寫法:

DELETE FROM `wp_posts` WHERE `post_status` != 'publish' OR `post_type` = 'revision';

經(jīng)過(guò)D瓜哥對(duì)實(shí)際數(shù)據(jù)的觀察發(fā)現(xiàn),這個(gè)SQL是不對(duì)的。它會(huì)把上傳的圖片等信息刪除掉。所以,請(qǐng)大家注意!!

經(jīng)過(guò)這次清理后,數(shù)據(jù)庫(kù)干凈了許多。同時(shí),也在表中的ID不再連續(xù),還空出來(lái)好多沒(méi)被用掉的ID數(shù)。那么,我們?cè)撊绾沃赜眠@些被空出來(lái)的ID呢?

重用被浪費(fèi)掉的ID

根據(jù)D瓜哥的個(gè)人經(jīng)驗(yàn),Wordpress會(huì)每隔一段時(shí)間,自動(dòng)在wp_posts表中添加一條草稿記錄。并且,對(duì)于用戶來(lái)說(shuō)是不可見(jiàn)的。這也是一種浪費(fèi)。浪費(fèi)的還有上一節(jié)被刪掉后空出來(lái)的ID。所以,有必要想辦法重新這些被浪費(fèi)掉的ID。

重用自動(dòng)草稿產(chǎn)生的ID

既然,Wordpress能產(chǎn)生不可見(jiàn)的草稿記錄。那么,我們修改一下代碼,在添加文章的時(shí)候,把自動(dòng)產(chǎn)生的草稿記錄讀取出來(lái),重新添加文章內(nèi)容即可。下面,D瓜哥給大家介紹一下方法:

打開(kāi)%WP%/wp-admin/includes/post.php文件,將如下內(nèi)容(Wordpress 3.4.2):

// 原始Wordpress代碼

if ( $create_in_db ) {

$post_id = wp_insert_post( array( 'post_title' => __( 'Auto Draft' ), 'post_type' => $post_type, 'post_status' => 'auto-draft' ) );

$post = get_post( $post_id );

if ( current_theme_supports( 'post-formats' ) && post_type_supports( $post->post_type, 'post-formats' ) && get_option( 'default_post_format' ) )

set_post_format( $post, get_option( 'default_post_format' ) );

} else {

替換為如下內(nèi)容:

// 替換后,可以重用自動(dòng)草稿

if ( $create_in_db ) {

global $current_user; // 獲取當(dāng)前登錄管理用戶

$post = $wpdb->get_row( "SELECT * FROM $wpdb->posts WHERE post_status = 'auto-draft' AND post_type = '$post_type' AND post_author = $current_user->ID ORDER BY post_date ASC, ID ASC LIMIT 1" ); // 獲取最早一條自動(dòng)草稿

if ( !$post ) {

$post_id = wp_insert_post( array( 'post_title' => __( 'Auto Draft' ), 'post_type' => $post_type, 'post_status' => 'auto-draft' ) );

$post = get_post( $post_id );

}

if ( current_theme_supports( 'post-formats' ) && post_type_supports( $post->post_type, 'post-formats' ) && get_option( 'default_post_format' ) )

set_post_format( $post, get_option( 'default_post_format' ) );

} else {

請(qǐng)注意上面代碼中使用的SQL語(yǔ)句:

SELECT * FROM $wpdb->posts WHERE post_status = 'auto-draft' AND post_type = '$post_type' AND post_author = $current_user->ID ORDER BY post_date ASC, ID ASC LIMIT 1

這里,之所以使用post_date排序,是因?yàn)樽詣?dòng)草稿超過(guò)七天后會(huì)自動(dòng)刪除。所以,先使用比較舊的記錄。可能,你會(huì)問(wèn),那不是有ID在排序嗎?這個(gè)問(wèn)題,我們?cè)谙乱恍」?jié)再解釋。

生成添加“草稿”的數(shù)據(jù)

經(jīng)過(guò)上面的折騰,空出來(lái)一些ID。既然自動(dòng)草稿的記錄能使用,那么空出來(lái)的ID更加可以隨意使用。現(xiàn)在,我們就想辦法把這些空出來(lái)的ID也使用起來(lái)。

根據(jù)網(wǎng)友測(cè)試結(jié)果顯示,經(jīng)過(guò)修改上面的代碼修改后,只要手動(dòng)保持wp_posts表中數(shù)據(jù)的三個(gè)字段內(nèi)容如下,那么這些空出來(lái)的ID也可以被使用起來(lái)。

post_status='auto-draft'

guid='http://youdomain/?p={$ID}'

post_type='post'

// ID不能為空,還有和{$ID}保持一致;

ID

// post_author字段也要填上相應(yīng)作者的ID。

post_author

將空出來(lái)的ID分別安裝上面的要求,將對(duì)應(yīng)一列數(shù)據(jù)造出來(lái)即可。我們上面提到,Wordpress會(huì)自動(dòng)添加自動(dòng)草稿的記錄,并且七天后就自動(dòng)刪除。那么,我們要在兩個(gè)時(shí)間相關(guān)的字段post_date和post_modified上,填上一個(gè)盡可能打一點(diǎn)的值,防止Wordpress自動(dòng)刪除。但是,系統(tǒng)還有可能產(chǎn)生自動(dòng)草稿。那么,為了防止被刪除,系統(tǒng)產(chǎn)生的這些自動(dòng)草稿記錄要優(yōu)先使用掉。所以,我們上面的SQL中,有按照時(shí)間排序的條件。

既然有了上面這些要求,那么我們就寫一個(gè)SQL語(yǔ)句,來(lái)自動(dòng)生成數(shù)據(jù)。SQL如下:

-- 生成100以內(nèi)的空ID對(duì)應(yīng)的記錄

CREATE TABLE post_bk as

SELECT iid AS ID,

'auto-draft' as post_status,

CONCAT('http://www.diguage.com/?p=', iid) AS guid,

'post' AS post_type,

1 as post_author,

str_to_date('11.25.2015 00:00:00',

'%m.%d.%Y %H:%i:%s') as post_date,

str_to_date('03.26.2015 21:44:00',

'%m.%d.%Y %H:%i:%s') as post_modified

from ( select b.dd * 10 + a.dd as iid

from ( select 1 as dd

union all select 2

union all select 3

union all select 4

union all select 0

union all select 5

union all select 6

union all select 7

union all select 8

union all select 9) a,

(select 0 as dd

union all select 1

union all select 2

union all select 3

union all select 4

union all select 5

union all select 6

union all select 7

union all select 8

union all select 9) b

) num

WHERE iid > 0 and iid NOT IN

( SELECT ID from wp_posts )

ORDER BY iid ASC;

這個(gè)SQL語(yǔ)句只能生成100以內(nèi)的空ID的記錄;另外,這里制造100以內(nèi)的整數(shù)時(shí),有點(diǎn)麻煩,可以考慮直接用編程語(yǔ)言生成以逗號(hào)分隔的數(shù)字序列。

這個(gè)生成工作最好在本地進(jìn)行。生成完后,使用phpMyAdmin將生成出來(lái)的post_bk表的數(shù)據(jù)都導(dǎo)出成腳本,然后登陸服務(wù)器上的phpMyAdmin,將腳本導(dǎo)入到服務(wù)器上的表中。

這里,給大家展示兩條我導(dǎo)出出來(lái)的數(shù)據(jù)。需要的話,直接拷貝使用:

-- 添加空白記錄對(duì)應(yīng),重用ID

INSERT INTO `wp_posts` (`ID`, `post_status`, `guid`, `post_type`, `post_author`, `post_date`, `post_modified`) VALUES(3, 'auto-draft', 'http://www.diguage.com/?p=3', 'post', 1, '2015-11-25 00:00:00', '2015-03-26 21:44:00');

INSERT INTO `wp_posts` (`ID`, `post_status`, `guid`, `post_type`, `post_author`, `post_date`, `post_modified`) VALUES(4, 'auto-draft', 'http://www.diguage.com/?p=4', 'post', 1, '2015-11-25 00:00:00', '2015-03-26 21:44:00');

參考資料

總結(jié)

以上是生活随笔為你收集整理的如何id变动自动保存html软件,Wordpress折腾小记:彻底解决ID不连续的问题-自动保存、自动修订 | 地瓜哥博客网...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。