WordPress令我生氣的地方是大量編輯功能很若,特別是沒辦法刪去某類別中的所有文章,或是移到其他類別中。雖然有Mass Post Manager外掛,但在升級到2.3版後一直運作的不順利。一氣之下決定直接去研究SQL資料格式與語法,本語法僅適用於wordpress 2.3和wordpress mu 1.2相應版本,其他版本須視資料庫情況而定。

小心!!本語法有一定之風險,僅供參考,不建議使用。若不沒有語法基本概念請勿使用,後果自負。

我花了半天終於瞭解wordpress的資料庫格式,文章類別有關的表格為

  • wp_$_posts:文章的資料–作者、內文…等
  • wp_$_term_taxonomy:類別的資料–類別或標籤、parent和文章數(但name和slug又放在wp_$_terms表格中)
  • wp_$_term_relationships:將文章ID與類別ID相對應的表格

它們之間的對應關係是 ID(wp_$_posts) object_id(wp_$_term_relationships) term_taxonomy_id(wp_$_term_relationships) term_id(wp_$_term_relationships) term_id(wp_$_term_taxonomy)

也就是若有一篇文章,要找它屬於哪個類別時,就要用wp_$_posts中的ID對應到wp_$_term_relationships中的object_id(這兩個是一樣的,只是不同表格中不同名字) ,再透過wp_$_term_relationships中term_taxonomy_id找出term_id,對應到wp_$_term_taxonomy中才能知道文章的類別。

因為2.3版起將類別和標籤同樣放在一個資料表中,因此term_taxonomy_id與Manage->Categories中的ID(term_id)並不相同,所以需要多一道手續。

所以,若要在資料庫中找出某某類別(ID=???)的所有文章時,語法如下:(???為Manage->Categories中的ID;_$_為wordpress mu中的blog id,若是單站版的wordpress則不需要,直接改為wp_posts…即可)

SELECT * FROM wp_$_posts, wp_$_term_taxonomy, wp_$_term_relationships where object_id = ID and wp_$_term_taxonomy.term_taxonomy_id = wp_$_term_relationships.term_taxonomy_id and term_id =???

若要刪除該類別下的所有文章,語法如下:

DELETE FROM wp_$_posts USING wp_$_posts, wp_$_term_taxonomy, wp_$_term_relationships WHERE wp_$_term_relationships.object_id = wp_$_posts.ID AND wp_$_term_taxonomy.term_taxonomy_id = wp_$_term_relationships.term_taxonomy_id AND wp_$_term_taxonomy.term_id =???

順便清空該類別中的次數統計

UPDATE wp_$_term_taxonomy SET count = 0 WHERE term_id =???

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

%d 位部落客按了讚: