当サイトは主に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
最後にここまでの移行状況は以下のとおり