森を走ろう!のニュースとリンク集を移行

当サイトは主にxoopsというCMSをベースにしてきたが、昨年その一部のブログと大会参加記をwordpressに移行した。その過程は、「森を走ろう!ブログ(xoops下wordpress)の移行」と「森を走ろう!の古い大会参加感想など記事の移行とwp下javascript」に書いた。

今回はニュースとリンク集を移行したので、メモを残しておく。ポイントは、1. xoopsとwordpressの共存方法2. 前回のブログの移行3. xoopsのニュースの移行4. xoopsのリンク集の移行 の4項となる。

1. xoopsとwordpressの共存方法

前回の移行ではあまり考えもせずに、o/blog というフォルダ下にwordpressを置き、wordpressとしてのルートも同じ場所に置いたのだが、同じ方式でニュースを o/news でアクセスできるようにするにはwordpressをもう一個導入することになり、管理の手間が増すばかり。

そこで、今回は o/wp というフォルダにwordpressを導入し、wordpressとしてのルートをひとつ上の o に置くようにして、プラグイン「Custom Post Type UI」を導入し、blogとnewsというカスタム投稿タイプを設定した。これにより一つのwordpressで、ブログは o/blog で、ニュースは o/news で、同様に他のコンテンツも扱う事ができる。なお、カテゴリー(taxonomy)はブログについてはblogcat、ニュースについてはnewscatを設定した。

ただし、o はxoopsのルートでもあるので、.htaccessとindex.phpで両者を共存させるための工夫が必要。

.htaccessは以下の通り(旧urlから新urlへの転送を含む)

<IfModule mod_rewrite.c> "# xoops大会参加記のurl転送 "
RewriteEngine on
RewriteCond %{QUERY_STRING} ^f=k_../([a-zA-Z0-9]+)[\./].*$
RewriteRule ^.*/vf.php$ /o/blog/%1/? [R=301,L]
</IfModule>

<IfModule mod_rewrite.c> "# xoopsニュースのurl転送 "
RewriteEngine on
RewriteCond %{QUERY_STRING} ^storyid=(\d+)$
RewriteRule ^.*/article.php$ /o/news/xn%1/? [R=301,L]
</IfModule>

# xoopsブログのurl転送
Redirect permanent /o/modules/wordpress/ /o/blog/ 

# wordpressのurlリライト 
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /o/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /o/index.php [L]
</IfModule>

index.phpはwordpressのものを修正して使用。変更部分は以下の通り

変更前

/** Loads the WordPress Environment and Template */
require( dirname( __FILE__ ) . '/wp/wp-blog-header.php' );

変更後 ブログ、ニュース、リンク集、検索結果ページ、
    プレビューページ、月間アーカイブページ
    のurlならば wordpress を呼び出し、それ以外は xoopsを呼ぶ。
    index_xoops.phpはxoopsのindex.phpをrenameしたもの。

/** Loads the WordPress Environment and Template */
/** wordpress_url or xoops_url check */
if (preg_match('#(/o/(blog|news|link)|/o/\?(s|page_id|post_type)=.+|/o/\d{4}/\d{2}/)#',$_SERVER['REQUEST_URI'])) {
		require( dirname( __FILE__ ) . '/wp/wp-blog-header.php' );
} else {
		require( dirname( __FILE__ ) . '/index_xoops.php' );
}

2. 前回のブログの移行

前回移行したブログは、投稿タイプが post 、カテゴリーが category になっており、今回の構成では投稿タイプが blog 、カテゴリー(taxonomy)がblogcat。

「convert post types」プラグインで、投稿タイプの変更は出来るが、これは特定のカテゴリー毎の処理であり、複数カテゴリーに属するような投稿を処理できない。

そこで、標準のインポート/エクスポートツールを利用した。標準のエクスポートツールで出力されたxmlファイル中の投稿タイプとカテゴリーをeditorで一括変換して、標準のインポートツールで取り込んだ。この方法だと、カテゴリー(taxonomy)の値の設定は、インポート中に生成されるので、自分で登録する必要がない。

3. xoopsのニュースの移行

xoopsのnewsモジュールのstoriesテーブルをcsvエクスポート。カテゴリーは同じ分類でnewscatにマニュアル登録。自前phpでcsvファイルを読み取り、タイトル+内容+投稿日時+newscatを、投稿タイプnewsの記事として登録。

4. xoopsのリンク集の移行

xoopsのmylinksモジュールのテーブルから以下SQL分でSELECTしてcsvエクスポート。これをwordpressの Link Libraryプラグインのインポート用フォーマットに加工してインポート。入力用フォーマットへの加工はexcelでしました。

SELECT * FROM ((mylinks_links JOIN mylinks_text
ON mylinks_links.lid=mylinks_text.lid)
JOIN mylinks_cat) WHERE mylinks_links.cid=mylinks_cat.cid

更に、以下のようなUPDATE文をcsvから生成して実行し、更新日と参照数もセットした。

UPDATE wp_links l, wp_links_extrainfo x SET l.link_updated='2017-04-10 19:00:00.000',x.link_visits=1111  WHERE l.link_url='http://www.skio.jp/' AND l.link_id=x.link_id

最後にここまでの移行状況は以下のとおり

xoops2wp移行状況

コメントを残す

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