WordPressで投稿URLをカテゴリの階層(親カテゴリ・子カテゴリ)に基づいて生成したい場合、functions.php
ファイルをカスタマイズする方法が必要です。以下の手順とコードを使って、カテゴリの階層を含んだ投稿のURLを実現できます。
1. パーマリンク設定の確認
まず、WordPressの「パーマリンク設定」を以下のように確認します。
- WordPress管理画面にログインします。
- 左メニューから「設定」 > 「パーマリンク設定」を選択します。
- 「カスタム構造」を選択し、以下のように設定します:
textコピーする編集する/%category%/%postname%/
これで、基本的に投稿のURLが次のような形式になります:
rubyコピーする編集するhttps://example.com/category/category-name/post-title/
ただし、この設定ではカテゴリ階層(親カテゴリと子カテゴリ)が反映されない場合があります。
2. カテゴリ階層を反映させるためのカスタマイズ
カテゴリ階層をURLに反映させるためには、functions.php
ファイルにカスタムコードを追加する必要があります。これにより、投稿URLに親カテゴリと子カテゴリが反映されるようになります。
functions.php
に追加するコード
以下のコードを、テーマの functions.php
ファイルに追加します。このコードは、投稿が属するカテゴリの階層を取得し、投稿のURLに階層を反映させるためのものです。
function custom_category_permalink($url, $post) {
// 投稿が存在し、投稿タイプが 'post' の場合
if (is_object($post) && $post->post_type == 'post') {
// 投稿に関連するカテゴリを取得
$categories = get_the_category($post->ID);
if ($categories) {
$category = $categories[0]; // 最初のカテゴリを取得(必要に応じて変更可能)
$parent_cat = get_category($category->parent); // 親カテゴリを取得
// 親カテゴリがあれば、URLに親カテゴリを追加
if ($parent_cat->term_id) {
$url = str_replace(home_url(), home_url() . '/' . $parent_cat->slug, $url);
}
// 子カテゴリ(または最初のカテゴリ)をURLに追加
$url = str_replace(home_url() . '/category/', home_url() . '/category/' . $category->slug . '/', $url);
}
}
return $url;
}
add_filter('post_link', 'custom_category_permalink', 10, 2);
コードの詳細説明
add_filter('post_link', 'custom_category_permalink', 10, 2);
:- この行は、
post_link
フィルターフックにカスタム関数custom_category_permalink
を追加するものです。post_link
は、投稿のURL(パーマリンク)を生成する際に呼び出されるフィルターです。 10
はフィルターの優先度で、2
はフィルター関数に渡される引数の数です(ここではURLと投稿オブジェクト)。
- この行は、
custom_category_permalink
関数:get_the_category($post->ID)
を使って、投稿に関連するカテゴリ情報を取得します。- 最初のカテゴリ(または任意のカテゴリ)を選択し、その親カテゴリ(
$category->parent
)を取得します。 - 親カテゴリが存在する場合、URLの
home_url()
部分を親カテゴリのスラッグで置き換えます。 - その後、最初のカテゴリのスラッグをURLに追加します。
例:カテゴリ階層のURL
例えば、親カテゴリが「company」で、子カテゴリが「product」の場合、投稿のURLは次のようになります:
https://example.com/category/company/product/post-title/
これにより、カテゴリ階層がURLに反映されます。
3. 注意点
- 上記のコードを追加した後、パーマリンク設定を再保存することをお勧めします。これにより、変更が適用されることがあります。
- カスタムURL構造を適用した後、旧URLへのリダイレクト設定を行うことを強くお勧めします。これにより、SEOの効果を維持し、ユーザーが古いリンクをクリックしても正しいページにリダイレクトされます。リダイレクトの設定には、Redirectionプラグインや、
.htaccess
の編集が役立ちます。
まとめ
- WordPressの投稿URLにカテゴリ階層を反映させるためには、パーマリンク設定をカスタマイズするだけでなく、
functions.php
ファイルでカスタムコードを追加する必要があります。 add_filter('post_link', 'custom_category_permalink', 10, 2);
は、投稿URLの生成時にカスタム関数を実行し、カテゴリ階層を反映させるために使用するフィルターフックです。- コードを追加することで、親カテゴリや子カテゴリを含むURLを作成することができます。