前置き
wordpressでいくつかのカスタム投稿タイプを使って記事を作成している、という方は結構多いと思います。
または、カスタム投稿タイプではなく、単純に通常投稿のカテゴリで分けてしまって管理している方もいるかもしれません。
今回紹介する内容は、カスタム投稿タイプに限定していますが、カテゴリで指定したい場合も直ぐにできると思います。
やりたいこと、背景
特定のカスタム投稿において
パーマリンクのスラッグの部分(http://example.com/<カスタム投稿名>/<投稿名(スラッグ)>
)を自動で投稿idに設定させる必要が出ました。
まず、wordpressのパーマリンク設定ですが、
私の場合は、カスタム構造で
/%category%/%postname%.html
になっています。(実際何にしていても関係ありません)
なぜこのようなことを行うか?
それは、このままだとurlが日本語になってしまい
それでもいいものもありますが、SEOやユーザーの見た目の問題を考えると
数字(id)や英語のほうがいい場合があります。
今回は、いちいち適当な数字を振るのもめんどくさいし、英語をいちいち書くにもめんどくさい
という記事だったので、いっそのこと自動でid振っちゃえばいいじゃん!
ってことになったので実装に至りました。
コード
//用語集パーマリンクのスラッグを自動的に記事IDにする
function change_link() {
//無限ループ回避(一時的に外す)
remove_action('save_post', 'change_link');
global $post;
if ($post->post_type == 'カスタム投稿名') {
$update_data = array(
'ID' => $post->ID,
'post_name' => $post->ID
);
wp_update_post($update_data);
}
//無限ループ回避を解除
add_action('save_post', 'change_link');
}
add_action('save_post', 'change_link');
しかし
指定したカスタム投稿のurlを手動で変更しようとしても
この場合idが強制的に保存されます。
今回の要件ではこれで満たされますが、本来はもっといい方法があるのかもしれませんね。