カスタム投稿タイプを作成した際に、ページのパーマリンクが「/カスタム投稿スラッグ/投稿名/」となってしまい、ほとんど日本語のタイトルになってしまいます。これを避けるために、投稿IDに変換したかったのですが、簡単でもなかったので…方法を試します。※まとめにも書いていますが、パーマリンク構造の変更は影響が大きいので既に稼働しているサイトの場合は注意が必要です。404エラーであちこちのページが開かなくなる可能性があります。
/カスタム投稿/投稿名/
カスタム投稿を作成した場合のパーマリンクが「/投稿名/」となっています
このままだと、投稿タイトルが日本語の場合(というよりタイトルは日本語の方が多いかと思いますが)にパーマリンクが日本語になってしまう問題が発生します。※なぜパーマリンクの日本語は避けたほうがいいのか?は別の記事にて。
強制的にパーマリンクを/投稿ID/に変更させてみます。
「/カスタム投稿/投稿ID/」に強制変更する
多くの方が色々と試されているようですが、下記のようにすればパーマリンクを強制変更できるようです。
//カスタム投稿のパーマリンクを投稿IDにする
function myposttype_permalink($post_link, $id = 0, $leavename) {
global $wp_rewrite;
$post = &get_post($id);
if ( is_wp_error( $post ) )
return $post;
$newlink = $wp_rewrite->get_extra_permastruct($post->post_type);
$newlink = str_replace('%'.$post->post_type.'%', $post->ID, $newlink);
$newlink = home_url(user_trailingslashit($newlink));
return $newlink;
}
add_filter('post_type_link', 'myposttype_permalink', 1, 3);
function myposttype_rewrite() {
global $wp_rewrite;
$wp_rewrite->add_rewrite_tag('%job%', '([0-9]+)', 'post_type=job&p=');
}
add_action('init', 'myposttype_rewrite');
テンプレートタグ/user trailingslashit
https://wpdocs.osdn.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/user_trailingslashit
パーマリンク構造(設定 > パーマリンク設定)の末尾にスラッシュがあるか確かめて、あれば文字列の末尾にスラッシュを付け、なければ文字列の末尾からスラッシュを取り除きます。文字列を返す前に ‘user_trailingslashit’ フィルターを適用します。
パーマリンク設定を保存しておく
何度も書いていますが、パーマリンクの構造を変更したときは、念のためパーマリンク設定の保存ボタンを押しておきましょう。
パーマリンクのリライトルールが更新されます。
ページを表示する
先ほどの投稿名になっていたパーマリンクを確認してみます。
パーマリンクが「/カスタム投稿スラッグ/投稿ID/」に変更されました…!
まとめ
カスタム投稿タイプを利用する場合は、パーマリンクを投稿IDにしておいた方が、色々と良いかな?と思われます。
注意点は、パーマリンクを大きく変更することになるので、突然、変更するとまずいことになる可能性があります。変更する前にはバックアップ必須+404エラーなどに、くれぐれも注意しましょう(変更すると戻らない可能性があります)。
つづきは、また😃