2013-04-13 53 views
2

我正在處理遷移的WordPress,網站URL已更改,除了某些插件存儲的序列化數據外,一切正常。反序列化,再次序列化並更新值

的數據被存儲在wp_options表,在請將option_value柱,對於每個記錄該插件保存。 因此,數據仍然存在,問題是當url更改時,它沒有重新序列化(字符串內容的計數仍然認爲它是舊的URL長度),因此該插件無法正常工作。

因此,要準確地找到需要被更新的記錄,我用

$t1 = $wpdb->prefix . "vslider"; 
$t2 = $wpdb->prefix . "options"; 

$records_ineed = $wpdb->get_results("SELECT * FROM '".$t1."', '".$t2."' WHERE '".$t1."'.option_name='".$t2."'.option_name"); 

這給了我正是我需要重新序列(它在創建記錄的名稱相匹配的記錄插件表,在wp_option表中創建記錄)

現在我該做什麼? 如何僅取每個的option_value,將其反序列化,重新進行串並化並更新db中的現有值? 我應該將已重新排列的值保存到新表中,然後從該表中替換回wp_options?怎麼樣? 其他解決方案是什麼?

+0

重新導入數據庫並使用不破壞序列化值的正確[搜索和替換工具](https://github.com/interconnectit/Search-Replace-DB)? – brasofilo

回答

1

有沒有必要這樣做,你需要的是導入的價值是。它是一個數組,只要您不以任何方式更改數據,它就會正常工作。

無論如何,當您導入wp站點到另一個URL時,絕對不需要逐一讀取wp-options表的列。

你需要做的只是甩你的SQL從原始(old-domain)的網站是什麼,然後導入到new-domain,然後運行這些查詢:

/** 
To update WordPress options with the new blog location, use the following SQL command: 
**/ 

UPDATE wp_options SET option_value = replace(option_value, 'http://www.old-domain.com', 'http://www.new-domain.com') WHERE option_name = 'home' OR option_name = 'siteurl'; 

/** 
After that you will need to fix URLs of the WordPress posts and pages, which translated from post slug, and stored in database wp_posts table as guid field. The URL values in this field are stored as abolute URLs instead of relative URLs, so it needs to be changed with the following SQL query: 
**/ 

UPDATE wp_posts SET guid = replace(guid, 'http://www.old-domain.com','http://www.new-domain.com'); 

/** 
If you have linked internally within blog posts or pages with absolute URLs, these links will point to wrong locations after you move the blog location. Use the following SQL commands to fix all internal links to own blog in all WordPress posts and pages: 
**/ 

UPDATE wp_posts SET post_content = replace(post_content, 'http://www.old-domain.com', 'http://www.new-domain.com'); 

只是爲了驗證,運行這些命令後,返回選項表並驗證您的home和site_url函數對於new-domain數據都是正確的。

如果你仍然想要,由於一些不明原因,手動將數據直接插入到選項表(那麼你應該考慮使用get_post_meta()update_post_meta()函數,這將負責序列化。