検索キーワードを入力:

wordpress:インポート時のカテゴリ重複防止

こんにちは。
wordpressでインポート作業をしたことがある人は分かると思いますが、1つのカテゴリが2つ作成されることがあります。
一つは記事が入っているカテゴリ、一つは記事が入ってないカテゴリという感じです。
さらに、インポートするwordpressにエクスポートしたwordpressと同じカテゴリがあっても、そのなかにはインポートしてくれません。
カテゴリ数が少なければ手作業で一つずつ削除していけば済むことですが、カテゴリ数が増えればそれは気の遠くなるような作業。
ということで、調べたらフォーラムで解決策がありましたので、以下自分用まとめです
以下ほぼコピペですので元記事のフォーラムへこちらからどうぞ

対策1

このバグに関しては、日本語のカテゴリ名に対してスラッグを変更している場合に起きるようなので、スラッグを変更しない、もしくはエクスポート前にスラッグを変更前の%nn形式に戻してあげる。

対策2

上記のバグ修正のため、
/wp-admin/import/wordpress.php
このファイルをごにょごにょします。
fromからtoへ変更(フォーラムmizube様ポストより以下)
[sourcecode language=”php”]
/*
* 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);
}
[/sourcecode]

以上、wordpress2.8.2でも確認済みです。
詳しくはフォーラムをご覧下さい。

About Little

WordPressをいじくり倒して早10年。一人ぼっちでひたすらソースとにらめっこ厨。 有り難いことに、Welcart/WP e-commerce/WooCommerce/EC-Cube等で多数ECサイトを制作させていただいたけど、ふと気付いた、ちゃんと売れるのか。 効果的に売れるようにするためにはどうしたらいいのか。ということでお勉強を兼ねてECサイトも運営中。
2009年7月29日

Related Posts

One comment found

Comments for: wordpress:インポート時のカテゴリ重複防止

  1. Pingback: アウトぷっと

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です