カスタム投稿を投稿にコンバートして301リダイレクトした話

カスタム投稿

Luxeritas テーマでカスタム投稿を使うのは何もメリットが感じられないので、投稿タイプを変更しようとチャレンジしました。

カスタム投稿をやめようと思った理由

一般ユーザーが利用するにはデメリットがメリットを大きく上回ってしまったからです。

メリット

  • 独立した投稿タイプとして利用できる
デメリット

  • サイトマップを別途用意する必要がある(苦労してカスタマイズして作ったけど・・・)
  • ページ単位でのAMP無効化が出来ない
  • パンクズリストが使えない
  • プラグインが余分に必要(使わずに済ませられなくもない)
    • Custom Post Type Permalinks
    • Custom Post Type Widgets
  • プラグインが及ばない
    • Search Regex
  • functions.phpにひと手間必要
    • アーカイブ表示
    • AddQuicktagの利用
    • Ping送信

特に「ページ単位でのAMP無効化が出来ない」点が、今回の決断に至った大きな理由と言えるかもしれません。

コンバートに立ちはだかるパーマリンクの壁

まだサイトを開設して間もない頃にカスタム投稿を設置したこともあり、カスタム投稿のパーマリンクはデフォルトで決まっていて、仕方のないものなんだと思っていました。

デフォルト値
   https://martto.net/free-tweets/%postname%/
   サイトURL / カスタム投稿名 / 投稿名

一方、投稿で使用しているパーマリンクはというと

カスタム構造
   https://martto.net/%category%/%post_id%/
   サイトURL / カテゴリー名 / 記事ID

  
事前にカスタム投稿のパーマリンクが変更できるなど知らなかった私は、デフォルトのまま使い始めました。
その結果、カスタム投稿の記事を投稿にコンバートすると、記事のURLが変わってしまうのでした。


   (旧)https://martto.net/free-tweets/mystery/
   (新)https://martto.net/other(カテゴリー名変更)/14931/

これから「カスタム投稿」を利用される方は、必ずパーマリンクを「投稿」と合わせておかれることをおすすめします。
そのためにはプラグイン「Custom Post Type Permalinks」が便利です。
Custom Post Type Permalinks

301リダイレクトの書き方がわからない

301リダイレクトなんてまったく知識がありません。
先日、くらしのひきだしのドメインを転送するために初めて使いましたが奇跡的に出来ただけで、今回のパターンならどう書けばいいのか、調べても調べてもわかりませんでした。
疲れ果てました。
そんな中、1行ずつ記載する方法であれば、なんとか正しくリダイレクトされる方法がわかりました。

その代り、記事数だけの行数が必要です。
なんて馬鹿げた方法、と思いましたが、他の方法をいくら試してもうまくいかず、それならいっそ73行書く方が早いんじゃない?と思いました。
.htaccessファイルの中なんて自分以外は見ないし、なんとかなるんじゃね?と。

調べ続けてテストする時間と、手作業の時間を天秤にかけたら、手作業に軍配が上がったわけです。

それでもさすがにExcelで編集はしましたけど。
一応 Microsoft Official Trainerですから(笑)
一例をあげるとこんな感じです。

RewriteRule ^free-tweets/mystery/$ post/other/14931/ [R=301,L]

「.htaccess」ファイルの一番上に記述して、最終行は改行を入れました。

カスタム投稿を投稿にコンバートする

301リダイレクトがうまくいくことはもちろんテストサイトで確認済みです。
何度テストしたかわからないほど繰り返しました。
投稿のコンバートはプラグインを使用すれば一瞬でできます。

プラグインを準備する

Convert Post Types という名前で検索してインストール&有効化します。
開く「ツール」「Convert Post Types」
Convert Post Types

コンバートする

コンバート方法

  1. カスタム投稿名を選ぶ
  2. post を選ぶ
  3. 「Convert」をクリックする

Convert Post Types_02
以上の操作で、カスタム投稿に分類されていた記事は、投稿一覧に移動します。(カテゴリーは振られていません)

コンバートされた記事をカテゴリーに振り分ける

投稿内に新しくカテゴリーを作成します。
その際、スラッグ名が元のカスタム投稿名と同じだと、カスタム投稿の設定を削除しないと記事が表示できないので、私は別の名前にしました。
逆に、パーマリンクが変わらず301リダイレクトの必要がなければ、元のカスタム投稿名と同じカテゴリー名でも別の名前でも構わないと思います。
カテゴリーの編集
コンバートされた元カスタム投稿の記事にすべて新しいカテゴリー名をつけます。

301リダイレクトをおこなう

「.htaccess」ファイルにリダイレクトの記述をして、ディレクトリにアップロードします。
この時点で、ちゃんとリダイレクトが行われていました。
ところが、別のタイミングで見てみると、なぜかリダイレクトはすべて無効になってしまっていたのです・・・

恐らくですが、リダイレクトが出来ていることに気を良くして
私がカスタム投稿の記述を「functions.php」から消してしまったからだと思います。

どうしてさっきまでリダイレクト出来ていたのに、出来なくなった!?
と慌てましたが、カスタム投稿の記述を「functions.php」に復活させることでリダイレクトも復活しました。

なので、これからコンバートしようと考えている方は、リダイレクトの必要がある場合、カスタム投稿の設定は絶対に削除しない方がいいと思います。

あとがき

何かがうまくいかない時、えてしてものすごく単純な間違いを犯していることがあります。
今回も、色々やってもうまく301リダイレクトが出来ませんでした。

「これってものすごく単純な間違いしてるんちゃうん?」とその時も疑いましたが
単純な間違いであっても、間違っている本人は案外気づかないものなんです。

今回もリダイレクトの確認をする時、うまくいくURLとうまくいかないURLが存在して相当惑わされました。
でも、うまくいくURLというのは、ちゃんと最後のスラッシュ「/」まで入力されていて
うまくいかないと思い込んでいたURLは最後のスラッシュ「/」が抜けていただけ、だったのです。

それに気づいたのは、リンク切れの通知がダッシュボードに現れた時、何気にそのURL(つまりカスタム投稿時のURL)をクリックすると、ちゃんとリダイレクト先が表示された時でした。

https://martto.net/free-tweets/failure ではなく
https://martto.net/free-tweets/failure/ と入力しなければいけなかったんですね。

そりゃそうです

RewriteRule ^free-tweets/failure/$ post/other/14497/ [R=301,L]

とリダイレクトの設定をしているんですから。
ってこれが73行も書いてあるんですけど、1行にまとめる方法があるんだったら知りたいです。

ま、私は二度とこんなコンバートはしませんけど。

こんなことで行き詰っていると全く記事の更新ができませんわ(泣)

0