wordpress:インポート時のカテゴリ重複防止
Posted on 7月 29th, 2009 in Wordpress基礎編
こんにちは。
wordpressでインポート作業をしたことがある人は分かると思いますが、1つのカテゴリが2つ作成されることがあります。
一つは記事が入っているカテゴリ、一つは記事が入ってないカテゴリという感じです。
さらに、インポートするwordpressにエクスポートしたwordpressと同じカテゴリがあっても、そのなかにはインポートしてくれません。
カテゴリ数が少なければ手作業で一つずつ削除していけば済むことですが、カテゴリ数が増えればそれは気の遠くなるような作業。
ということで、調べたらフォーラムで解決策がありましたので、以下自分用まとめです
(以下ほぼコピペですので元記事のフォーラムへこちらからどうぞ)
対策1
このバグに関しては、日本語のカテゴリ名に対してスラッグを変更している場合に起きるようなので、スラッグを変更しない、もしくはエクスポート前にスラッグを変更前の%nn形式に戻してあげる。
対策2
上記のバグ修正のため、
/wp-admin/import/wordpress.php
このファイルをごにょごにょします。
fromからtoへ変更(フォーラムmizube様ポストより以下)
/*
* line 403-404:
*/
// from:
preg_match_all('|<category>(.*?)</category>|is', $post, $categories);
$categories = $categories[1];
// to:
preg_match_all('|<category domain="category" nicename="([0-9a-z%\-_]*?)">(.*?)</category>|is', $post, $categories);
$nicenames = $categories[1];
$categories = $categories[2];
/*
* Line 462-482
*/
// from:
if (count($categories) > 0) {
$post_cats = array();
foreach ($categories as $category) {
if ( '' == $category )
continue;
$slug = sanitize_term_field('slug', $category, 0, 'category', 'db');
$cat = get_term_by('slug', $slug, 'category');
$cat_ID = 0;
if ( ! empty($cat) )
$cat_ID = $cat->term_id;
if ($cat_ID == 0) {
$category = $wpdb->escape($category);
$cat_ID = wp_insert_category(array('cat_name' => $category));
if ( is_wp_error($cat_ID) )
continue;
}
$post_cats[] = $cat_ID;
}
wp_set_post_categories($post_id, $post_cats);
}
// to:
if ($c = count($categories) > 0) {
$post_cats = array();
for ($i = 0; $i < $c; $i++ ) {
if ( '' == $categories[$i] || '' == $nicenames[$i] )
continue;
$cat = get_term_by('slug', $nicenames[$i], 'category');
if ( empty($cat) || $cat->name != $categories[$i] ) {
$slug = sanitize_term_field('slug', $categories[$i], 0, 'category', 'db');
$cat = get_term_by('slug', $slug, 'category');
}
$cat_ID = 0;
if ( ! empty($cat) )
$cat_ID = $cat->term_id;
if ($cat_ID == 0) {
$category = $wpdb->escape($categories[$i]);
$cat_ID = wp_insert_category(array('cat_name' => $category));
if ( is_wp_error($cat_ID) )
continue;
}
$post_cats[] = $cat_ID;
}
wp_set_post_categories($post_id, $post_cats);
}
以上、wordpress2.8.2でも確認済みです。
詳しくはフォーラムをご覧下さい。



Yahoo!ブックマークに登録


Trackbacks