つばさのーと

つばさの日常を綴るのーと

SQLで一発かな?はてなブログ特有の「entry」を全記事に自動で追加したい

f:id:tsubasa123:20170621170607j:plain

こんにちは、つばさ(@tsubasa123)です。

 

ちょっとメモ書き。今日もはてなブログからWordPressへの移行に関するお話です。最近はWordPress絡みのことしかやってませんが、私は元気です。

 

日付のフォーマットには対応した

 

ちょっと前にこんな記事を書きました。

 

www.tsubasa-note.blog

 

日付のフォーマットのURLがWordPressへ移行した際にネックになるらしいので、それを解消するためのSQLを紹介したわけですが、これとはまた別に問題というか、要望みたいなもの小耳に挟みまして。

 

はてなブログの記事のURLって「entry/hogehoge」のように、設定した任意のURL文字列の前に「entry/」ってプレフィックスみたいなものが自動で付与されるんですよね。できればこれを取りたいなって話です。

 

過去記事に関してはURLの評価との兼ね合いもあるので「entry/」が付くのは我慢するけど、これから新しく書く記事とか、カテゴリとかタグのアーカイブはできれば「entry/」が付かないようにしたい。さて、どうしたものか。

 

多分できる、はず

 

※はてなブログからWordPressへ移行中の方限定の内容です。すでにWordPressで記事を書いている人は対象外になります。

 

WordPressのパーマリンクの設定で「/entry/%postname%」と指定するとデフォルトで「entry/」が入ってしまうので、これを「/%postname%」にしたうえで、過去記事に対して個別にパーマリンクの設定で「entry/」を追加してあげれば多分解決。

 

先に紹介した記事でも少し触れていますが、WordPressでパーマリンクを指定する際に「/」は使えない仕様になっています。これを解決するためには「Enhanced Custom Permalinks」という個別記事のパーマリンクの指定を拡張するプラグインをインストールする必要があります。

 

このプラグインを有効にしたうえで、

 

  • WordPressのパーマリンク設定で「カスタム構造」を選択して、「/%postname%」と入力
  • SQLを実行できるツールから任意のSQLを実行

 

これで、過去記事に対して1記事ずつ手で「entry/」を入力するようなコスパの悪い作業をしなくても、パーマリンクの問題を解決することができます。で、肝心のSQLは下記のようなもの。

 

INSERT INTO `wp_postmeta` (`post_id`, `meta_key`, `meta_value`) (SELECT * FROM (SELECT `id`, 'custom_permalink', CONCAT('entry/', `post_name`) AS `meta_value` FROM `wp_posts` WHERE `post_type` = 'post' and `post_status` = 'publish') AS `T1` WHERE `T1`.`meta_value` is not null);

 

またしても長い。今回も特に説明は致しません。興味のある方は自己責任で試してみてください。SQLが成功すれば過去記事には「entry/」がつくけど、これから新しく書く記事には「entry/」が付かないようなURLで運用が可能になるはずです。

 

さいごに

 

実はこれ、現在WordPressへの移転をご依頼いただいている方に向けてお調べしたんですが、諸事情あってお蔵入りになりそうなコードなんですよね。そのまま寝かせてもよかったんですが、ここで供養することにしました。誰かのお役に立てれば幸いですね。

 

ではでは、最後までお付き合いいただきありがとうございました。