こんにちわ、PHPエンジニアのエンジニア婦人(@naho_osada)です。
私はPHPエンジニアとして8年~の経験があります。
WordPressサイトを運営していて、ある日「このカスタム投稿の名前が合わなくなってきたから、スラッグ名を変えたい」と思うことはないでしょうか。
初めは「デザート(dessert)」専用のカスタム投稿でやっていたのに、書いていくうちに「ケーキの事しか書いてないからケーキ専用のカスタム投稿スラッグ名(cake)にしたい」みたいな感じです。URLの前半部分が変わる大工事です。
そんな工事、私にできるかしら?と思った方。大丈夫、ここではその手順を説明します。
以下は敢えてSQLが分かる人向けに書いています。ですが、この作業はSQLがわからない人でもツールを使えばできます。エンジニアの方は是非SQLを使ってくださいね。そんなに難しいことはしていません。
簡単にWordPressを手軽に構築するならカラフルボックス※広告
カラフルボックスはオールインワンの超快速レンタルサーバー。
まずはWordPressで公開してみたい!という方におすすめです。
データベースのバックアップを取得する
スラッグを変更する、これはデータベースに格納されているデータを変更するということです。必ずバックアップを取りましょう。
もしテーマ内でスラッグを管理しているのであれば、そこも変更する必要がありますので、テーマのバックアップを取得してください。テーマ内の変数調整については諸々の状況によるのでここでは省略します。
移動先となるカスタム投稿を作成する
WordPressにログインし、移動先となるカスタム投稿を作成します。
CustomPostTypeUIを使っているのであれば、そこから新しいカスタム投稿を作成します。テーマ内に書いている場合は、他と同じように移行先のものを記述してください。スラッグ名は新しいものにします。
テーマ内functions.phpに書いている場合は他と同様に追加します。
// カスタム投稿を追加
register_post_type( '新しいスラッグ名(半角英数字)', //カスタム投稿タイプ名を指定
array(
'labels' => array(
'name' => __( '新しいカスタム投稿の表示名' ),
'singular_name' => __( '新しいカスタム投稿の表示名' )
),
'public' => true,
'has_archive' => false, /* アーカイブページを持つ */
'menu_position' =>6, //管理画面のメニュー順位、好きな番号を
'supports' => array(
'title',
'editor',
'thumbnail',
),
)
);
register_taxonomy_for_object_type('category', '新しいスラッグ名(半角英数字)'); //カテゴリーを使いたい場合に追加
SQLでpost_typeを変更する
phpMyAdminにログインします。
ログイン後、Wordpressのデータベースを選択し、以下のSQLを実行します。
// カスタム投稿を追加
UPDATE `wp_posts` SET `post_type`='変更後のカスタム投稿のスラッグ名'
WHERE `post_type`='変更前のカスタム投稿のスラッグ名'
SQL実行後、WordPressの管理画面から一括で移動できたことを確認できます。
以前、本サイトでワーキングマザーのpost_typeをワーキングペアレントにしたときのSQLはこちらです。参考にしてください。
// カスタム投稿を追加
UPDATE `wp_posts` SET `post_type`='working_parents'
WHERE `post_type`='working_mother'
今回はカスタム投稿からカスタム投稿へ移動していますが、これを投稿(post)からカスタム投稿、投稿(post)から固定ページ(page)、などの移動も同様にできます。
SQLを使えない方はプラグインを使おう
「データベースにアクセスして、SQLを流すなんて、とんでもない!」
という方は「Post Type Switcher」というプラグインを使いましょう。
インストールして有効化すると、編集画面に「Post Type」が追加されます。ここを変更したいものにして実行すると、上記と同じことができます。
右側に「Post Type」が追加されます。ここで任意の投稿タイプを選択して更新すると、上記と同じことができます。
プラグインの更新は止まっていますが、これを使ってもPostTypeは正常に変更されました(※2019年4月11日情報)
パーマリンクを再設定する
管理画面上はすべてのカスタム投稿が反映されていますが、公開されているであろうページにアクセスするとリンク切れになっていると思います。
再度パーマリンクを設定すると、リンクが正常に動作するようになります。
設定>パーマリンク設定
から、何も変更せずに「変更を保存」を押下します。
記事内リンクを変更する
最後に、記事の中にあるリンクを変更します。上記では元となる投稿のURLを変更しただけなので、記事内にあるリンクまでは見ていません。この部分をサポートします。
ここは複数に渡ることもあるので、手動移行御用達の「Search-Replace-DB-master」を使います。
WordPressインストールディレクトリの中にSearch-ReplaceDB一式を入れます。
ブラウザからアクセスし、
「/変更前カスタム投稿名/」→「/変更後カスタム投稿名/」を入れて実行します。
こうすると、記事の中にあった旧URLが更新され、リンク切れがなくなります。
このツールを使った後は、必ずディレクトリごと削除しておきましょう。
(post_contents内をSQLで一括UPDATEでも行けます。恐らくそういうのはwp_postsとwp_post_meta辺りでしょうし…。どこにあるのかわからなくて探すのもな、ということでこれは試しませんでした。)
SearchReplaceDBツールを使いたくない方はプラグインを使おう
「こんなツールをFTPでアップロードするなんて、とんでもない!」
という方は、「Search & Replace」などのプラグインを使いましょう。
(有名どころに「Search Regex」というプラグインもありますが、こちらは3年前に更新されたのが最後のようです(※2019年4月12日時点の確認情報)。同機能の新しいものを使った方がいいかもしれません。)
※私はこれらのプラグインを使ったことがないので、動作保証はしません。
感想
やってみるとそれほど難しくないことがわかります。
うまくいかなかったときのバックアップがあれば、(ある程度)何しても大丈夫です。失敗したら戻せばいい。
開発環境があるなら、そこで試してから本番機で試すと尚良いでしょう。
自分のサイトだから失敗しても自分に迷惑がかかるだけだし、大丈夫(お客さんのところで失敗するよりよほどいいです)。
カスタム投稿スラッグを変更したくなったら、試してみてください。
余談:カスタム投稿のスラッグ変更、SEO的には…?
影響出ると思います。(検証はしていません)
一般的にはURL変更はアクセス数に影響が出るから、安易にやるなと言いますね。
もし過去URLでアクセスしてきた人が迷子にならないようにしたい人は、.htaccessでリダイレクト設定をしてあげると親切ですね。
まあ、弱小サイトは別に気にならないので(←)、特に気にせずやってしまいました。リダイレクト設定もしていませんよ。
まとめ
- カスタム投稿のスラッグ名を変えることは、そんなに難しくない
- 移行先のカスタム投稿を作って、SQLで実行して一括移動する
- SQL使いたくない方はツールでやることも可能
- 但しSEO的にはマイナスに働く可能性があるので、ご利用は計画的に…
長くサイトを運営していると何かとこうしたい、ああしたいという要望が出てくるものです。
何かありましたら、お問い合わせフォームからぜひご相談ください。
簡単にWordPressを手軽に構築するならカラフルボックス※広告
カラフルボックスはオールインワンの超快速レンタルサーバー。
まずはWordPressで公開してみたい!という方におすすめです。