ぼやき

0

&T : Serene Bach 2.19R から WordPress2.5.1 へ

こちらのエントリーを読んでおりまして、なぜタイトルが長い記事でインポートが途中で止まって失敗してしまうのかわかりました。

この blog にはどうでしょう関係の記事で
・ tvk どうでしょうリターンズ「シェフ大泉夏野菜スペシャル」第 1 夜
・ tvk どうでしょうリターンズ「シェフ大泉夏野菜スペシャル」第 2 夜
・ tvk どうでしょうリターンズ「シェフ大泉夏野菜スペシャル」第 3 夜
なんて感じでタイトルがつけられているのですが、それが大きな問題だったのです。

どうも WordPress のデータベースである MySQL の「 wp_posts 」テーブルの設定を見ていると、「 post_name 」に半角 200 文字の制限がかかっていて主キーに設定されている。主キーっていうのは Access なんかを触ったことがある方なら知っていると思うけれど、データベース上のユニーク(固有)なキーで、他のレコード、つまり WP でいうと他の記事に同じものがあってはならないということ。

この「 post_name 」っていうのは英語だったら「タイトル」がそのまま入るんだけれど、日本語の場合エスケープされた文字が自動的に格納される。全角 1 文字をエスケープすると半角 9 文字分使う。つまり、上限が 200 文字だから、全角 23 文字目までが同じだったら、同じ記事とみなされてしまって登録できないわけだ。
さすがはアメリカ生まれ。 2 バイト文字圏には辛い仕様ですね。

ちなみにこの「 post_name 」は一度生成されちゃうと記事のタイトルを更新しても変更されないみたい。つまり記事のタイトルに日付とかユニークな数字を振って、それを読み込ませ最後にタイトルから消せばいいって訳だ。 SQL がもう少し使えれば、それくらいのこと簡単にできそうだけれどどうなんじゃろ。

「 post_name 」っていうのはいったい何に利用しているんだろうって調べてみたら、スラッグに使用していて、パーマリンク設定で利用することがあるみたい。画面の「投稿名」ってなってるところは実は「記事のスラッグ」ってことだ。
パーマリンク設定
このパーマリンクにして日本語で記事を書いた場合ごちゃごちゃとエスケープされた文字列が並ぶのか。ちょっとあんまりかっこよくないですよね。わたしは使う予定がないから、記事 id と一緒でいいよ。
なんか簡単にインポートできる方法ないかなぁ。 PHP 改造するしかないんだろうか。そんなの無理だよ。あはは。

関連記事