WordPress

カスタム投稿タイプのパーマリンク設定(プラグイン不要)

2020年9月5日

WordPressで通常使用する「投稿」のURL(パーマリンク設定)は、ダッシュボードの「設定 > パーマリンク設定」で設定・変更が可能です。

しかし、カスタム投稿タイプのURLは、ダッシュボードからは設定・変更ができません。

Custom Post Type Permalinks」というプラグインを使用すれば、手軽に変更もできるようですが、今回はプラグインを使わず、「register_post_type関数」で実装しましたので、その方法をご紹介します。

functions.phpに記述するコード

まずは、実際に使用したコードを記載しておきます。

※カスタム投稿タイプで「お知らせ(news)」と「日記(diary)」を作成し、それぞれに対応したタクソノミー(カテゴリー、タグ)を追加しています。

function init_func() {
  //カスタム投稿、カテゴリ、タグを追加
  register_post_type('news', [
    'labels' => [
      'name' => 'お知らせ',
    ],
    'public' => true,
    'has_archive' => true,
    'hierarchical' => false,
    'rewrite' => array('with_front' => false),
    'menu_position' => 5,
    'menu_icon' => 'dashicons-welcome-write-blog',
    'supports' => array('title', 'editor', 'thumbnail')
  ]);
  register_taxonomy('news-cat', 'news', [
    'label' => 'カテゴリー',
    'hierarchical' => true,
  ]);
  register_taxonomy('news-tag', 'news', [
    'label' => 'タグ',
    'hierarchical' => false,
  ]);
}
add_action('init', 'init_func');


/*カスタム投稿のパーマリンクをpostIDに*/
add_filter('post_type_link', 'generateCustomPostLink', 1, 2);
add_filter('rewrite_rules_array', 'addRewriteRules');

function generateCustomPostLink($link, $post){
  if($post->post_type === 'news'){
    // 投稿IDに書き換えたパーマリンク文字列を返す
    return home_url('/news/'.$post->ID);
  } else {
    return $link;
  }
}
function addRewriteRules($rules){
  // 書き換えたパーマリンクに対応したクエリルールを追加
  $new_rule = array(
    'news/([0-9]+)/?$' => 'index.php?post_type=mynews&p=$matches[1]'
  );
  // ルール配列に結合
  return $new_rule + $rules;
}

 

カスタム投稿タイプのパーマリンク設定

カスタム投稿タイプのURLは、デフォルトでは、「ドメイン/【投稿タイプ名】/【投稿タイトル】」となります。

例)https://abc.com/news/タイトル

そこで、「register_post_type関数」を使用して、パーマリンクに投稿IDを設定するために、functions.phpに下記のコードを記述します。

add_filter('post_type_link', 'generateCustomPostLink', 1, 2);
add_filter('rewrite_rules_array', 'addRewriteRules');

function generateCustomPostLink($link, $post){
  if($post->post_type === 'news'){
    // 投稿IDに書き換えたパーマリンク文字列を返す
    return home_url('/news/'.$post->ID);
  } else {
    return $link;
  }
}
function addRewriteRules($rules){
  // 書き換えたパーマリンクに対応したクエリルールを追加
  $new_rule = array(
    'news/([0-9]+)/?$' => 'index.php?post_type=mynews&p=$matches[1]'
  );
  // ルール配列に結合
  return $new_rule + $rules;
}

 

最後に、ダッシュボードのパーマリンクで、変更を保存しましょう。

※これを忘れると、functions.phpの記述が正しくても、上手く反映されないことがあります。

今回のパーマリンク設定を行うにあたって、参考にさせていただいたのは、下記の記事です。

-WordPress

Copyright© かなブログ , 2024 All Rights Reserved.