我有一些舊的永久鏈接(帖子,頁面,標籤),其中包含非法字符 - 而且這些字段不再有效。URL中的非法字符
在以前的WP版本中,它允許使用非拉丁字符,但在更新的版本中更改。
有什麼辦法從這些永久鏈接清理數據庫(將它們轉換爲允許的格式)?
我有一些舊的永久鏈接(帖子,頁面,標籤),其中包含非法字符 - 而且這些字段不再有效。URL中的非法字符
在以前的WP版本中,它允許使用非拉丁字符,但在更新的版本中更改。
有什麼辦法從這些永久鏈接清理數據庫(將它們轉換爲允許的格式)?
如果您知道這些字符是什麼以及想要替換它們,可以編寫一個簡單的PHP腳本來從數據庫中獲取數據,然後使用preg_replace()
修復PHP端的字符,然後更新與修復表的表。下面是我想出的一個簡單例子:
$query = "SELECT field, primarykey FROM table WHERE field LIKE "(weird character)";
/* run the query, blah blah */
$result = mysql_query($query);
$weird_character = "/weird character/";
$good_character = "good character";
$replace = "UPDATE table SET field='$field' WHERE field='$row['field']'";
while($row=mysql_fetch_array($result, MYSQL_ASSOC))
{
$field = preg_replace($bad_character, $good_character, $row['field']);
$replace_result = mysql_query($replace);
}
如果您有大量的鏈接,這將需要永久。如果它的數量很少,這應該足夠高效,無論如何你只能運行一次。
您可以在您所有的帖子
$posts = get_posts(array('post_type' => array('post', 'page'))
foreach($posts as $post)
{
$post[post_name] = sanitize_title($title);
wp_update_post($post);
}
任何想法如何使用標籤做到這一點? – user1165454 2012-04-18 14:50:28
也許用$ terms = get_terms('post_tag')和'foreach($ terms作爲$ term){wp_update_term($ term-> term_id,'post_tag',array('slug'=> sanitize_title($ term-> name) ))}' – 2012-04-18 16:43:03
您還可以,如果你需要修改,當然網址中使用標準的WordPress功能esc_url_raw使用WordPress的功能sanitize_title($title);
。此功能可以消除無效字符,刪除危險字符,並驗證url是否有適當的協議集(http,https,ftp等):
esc_url_raw($current_url);
url標準沒有任何改變。 – 2012-04-18 09:46:22
如何將一個非拉丁字符轉換爲拉丁字符?您可以嘗試使用正則表達式來移除所述字符。 – Srijan 2012-04-18 09:56:05