BLOGブログ
WordPress
2024.03.15
任意のURLを設定したい場合のおすすめプラグイン「Custom Post Type Permalinks」
この記事の目次
「Custom Post Type Permalinks」とは?
Custom Post Type Permalinksは、wordpressのプラグインでカスタム投稿タイプのパーマリンクを編集できるツールです。
何ができるの?
例えば)wordpressの全体的なパーマリンクが「月と投稿名」などの設定をしているとする。
でも、カスタム投稿タイプ「ブログ(blog)」を制作した際にそのパーマリンクとは別の設定をしたい場合が発生した時に「Custom Post Type Permalinks」を使えば
などの任意のパーマリンク設定ができるようになります。
また、カスタム投稿タイプを複数制作する際などにとても便利です。
「functions.php」と組み合わせることでURLが自由自在に!
Custom Post Type Permalinksと「functions.php」を組み合わせて、自分が希望するディレクトリ構造が実現できます。
具体的に何ができるの?
Custom Post Type Permalinksでカスタム投稿タイプのパーマリンクを下記のように設定している場合
例えば)カスタム投稿タイプ「ブログ(blog)」のタクソノミー(カテゴリー・タグ)を「blog_type」で設定していて投稿ページのIDが「100」・カテゴリーが「travel」にした場合のページのURLは
ドメイン/blog/blog_type/travel/100/
と設定上なるが、「blog_type」がURLにあるとwordpressを使用しない通常のサイトだと違和感に思いませんか?
本来のディレクトリは下記のように「blog_type」がないタイプだと思います。
ドメイン/blog/travel/100/
「blog_type」を削除して、違和感のないURLにしたい際に「functions.php」を使用して自分が理想とするURLに変更が可能になります。
設定方法
「functions.php」に記載していきます。
例えば)タクソノミー名は「blog_type」でカスタム投稿タイプ名「blog」の場合は
//パーマリンクからタクソノミー名を削除 function my_custom_post_type_permalinks_set($termlink, $term, $taxonomy){ if ($taxonomy === 'blog_type') { return str_replace('/'.$taxonomy.'/', '/blog/', $termlink); } return $termlink; } add_filter('term_link', 'my_custom_post_type_permalinks_set', 11, 3); //リライトルールを追加して、カスタム投稿タイプ「ブログ」のアーカイブページやページ送りにも適応させます。 add_rewrite_rule('blog/([^/]+)/?$', 'index.php?blog_type=$matches[1]', 'top'); add_rewrite_rule('blog/([^/]+)/page/([0-9]+)/?$', 'index.php?blog_type=$matches[1]&paged=$matches[2]', 'top');
考え方は、●●にタクソノミー名、■■にカスタム投稿タイプ名を設定します。
//パーマリンクからタクソノミー名を削除 function my_custom_post_type_permalinks_set($termlink, $term, $taxonomy){ if ($taxonomy === '●●') { return str_replace('/'.$taxonomy.'/', '/■■/', $termlink); } return $termlink; } add_filter('term_link', 'my_custom_post_type_permalinks_set', 11, 3); //リライトルールを追加して、カスタム投稿タイプ「■■」のアーカイブページやページ送りにも適応させます。 add_rewrite_rule('■■/([^/]+)/?$', 'index.php?●●=$matches[1]', 'top'); add_rewrite_rule('■■/([^/]+)/page/([0-9]+)/?$', 'index.php?●●=$matches[1]&paged=$matches[2]', 'top');