URL スラッグを変更したら、変更前の URL が変更後の新しい URL にリダイレクトされている投稿があるではないか。何故だろう?
いろいろと調べたところ ...
WordPress の仕様のようですね。この仕様を良しと思う方もいると想像します。私は自分の作ったページの本当の URL を管理したいので、変更前の URL は 404 (Not Found) を返して欲しいですね。この仕掛けは、データベースの「wp_postmeta テーブル」の「meta_key」において「_wp_old_slug 」の存在が関係しているとのこと。
以下の画像は、 phpMyAdmin で開いた「wp_postmeta テーブル」の例示です。なお「_wp_old_slug」で絞り込み済みです。
そのレコードには、投稿やメディアなどの post_id がたくさんありました。そして「meta_value」には、見に覚えのある値 ...
post_id 90 は画像、post_id 92 は投稿、 post_id 106〜109 は画像。これって、、、画像もリネームの度にレコードが増えていくことなのですよね。恐ろしや 恐ろしや !!
なお「wp_posts テーブル」内の ID が post_id の本体ですので興味のある方はご覧ください。
調査用の SQL クエリ (SQL 文) は以下の通りです。
SELECT * FROM wp_postmeta WHERE meta_key LIKE '_wp_old_slug' ORDER BY post_id ASC
なお、投稿の post_id の確認は「投稿一覧」の右上の「表示オプション」内の「ID」にクリックを入れれば一覧内に表示されます。または投稿の「タイトル」にオンマウスすれば、画面左下に URL が表示されるので「post=」に続く数値でも確認できます。
確かに過去に URL スラッグを変更したことのあるレコードを削除するとリダイレクトがなくなりますね。私は「_wp_old_slug」をすべて削除することにしました。
一括削除用の SQL クエリ (SQL 文) は以下の通りです。
もちろん、テーブルのバックアップ等々、すべては自己責任でお願いします。
DELETE FROM wp_postmeta WHERE meta_key = '_wp_old_slug'
Slugs Manager プラグイン
プラグインを調べたら「Slugs Manager」なるプラグインがありますね。「使用中の WordPress バージョンで未検証」でしたが動作します。
「古いスラッグ」と「現在のスラッグ」が表示されているので、見やすいですね。
なお、操作を確認したところ「選択した古いスラッグを削除する」は、選択したスラッグだけではなく投稿 ID 単位 (同じ投稿 ID のすべて) で削除されるようです。
「選択した古いスラッグを削除する」と「すべての古いスラッグを削除する」の2つの選択肢しかないので操作は簡単です。phpMyAdmin が使えない場合、お試しください。