Wordpressで投稿のリライトスラッグを変更してアーカイブと記事のパーマリンクに任意の文字列を設定する方法
Wordpressでは、「投稿(post)」の投稿タイプのアーカイブがデフォルトで無効になっています。
また、「投稿」のパーマリンクのみ独自のルールを指定することができません。
カスタム投稿タイプのアーカイブでは、rewrite_slug
を変更することができますが、投稿(post)はデフォルトで搭載されている投稿タイプなので、rewrite_slug
を変更するには下記の処理が必要です。
例えば、下記のように設定してみます。
設定内容 | 設定結果 |
---|---|
投稿一覧(アーカイブ)のURL | https://[yourdomain.com]/information |
投稿の記事のパーマリンク | https://[yourdomain.com]/information/記事ID |
上記のように変更するには、function.phpに下記の通り加筆します。
/** * 投稿の設定変更 * post_has_archive() * * @param object $args args. * @param string $post_type post_type. * @return object $args args. */ function post_has_archive( $args, $post_type ) { if ( 'post' === $post_type ) { $args['rewrite'] = true; $args['has_archive'] = 'information'; } return $args; } add_filter( 'register_post_type_args', 'post_has_archive', 10, 2 ); /** * 投稿のパーマリンク変更. * add_article_post_permalink() * * @param string $permalink permalink. * @return string $permalink permalink. */ function add_article_post_permalink( $permalink ) { $permalink = '/information' . $permalink; return $permalink; } add_filter( 'pre_post_link', 'add_article_post_permalink' ); /** * 投稿のリライトルール変更 * add_article_post_rewrite_rules() * * @param object $post_rewrite post_rewrite. * @return string $return_rule return_rule. */ function add_article_post_rewrite_rules( $post_rewrite ) { $return_rule = array(); foreach ( $post_rewrite as $regex => $rewrite ) { $return_rule[ 'information/' . $regex ] = $rewrite; } return $return_rule; } add_filter( 'post_rewrite_rules', 'add_article_post_rewrite_rules' );
上記をfunction.phpに加筆した後、管理画面→設定→パーマリンク設定で、なにも変更しないで構わないのでパーマリンク設定を更新してください。
こうすることでパーマリンク設定がリフレッシュされ、投稿のパーマリンクを変更することができます。
参考リンク
Simple Colors「投稿の個別ページのみパーマリンクを変更する方法」
http://www.warna.info/archives/2721/
GRAPHIC LAB「『投稿』タイプの個別ページのパーマリンクに任意の文字列を追加する方法」
https://datalibraries.info/wordpress-post-rewrite-rules/