パーマリンク設定で子カテゴリを非表示にする方法:WordPress
WordPressのパーマリンク設定で
/%category%/%postname%/
のように設定している場合で子カテゴリを設定している場合、
投稿ページのURLが
ドメイン.com/親カテゴリ/子カテゴリ/投稿名
のようになってしまい、かなり長くなってしまう場合があるので、
子カテゴリを取り除く方法をメモ。
functions.phpに
//子カテゴリを非表示にするフィルタフック
add_filter( 'post_link', 'remove_children_category_slug', 10, 3 );
function remove_children_category_slug( $permalink, $post, $leavename ){
//カテゴリのIDを取得
$cats = get_the_category( $post->ID );
if ( $cats ) {
//ID順にソート
usort( $cats, '_usort_terms_by_ID' );
foreach( $cats as $cat ) {
//親カテゴリが存在するかチェック
if ( $cat->parent ) {
$parentcategory = explode(" ",get_category_parents( $cat, false, ' ', true ));
//配列から最上位のカテゴリを取得
$parentcat = $parentcategory[0];
} else {
//親がない場合はそのままスラッグを取得
$parentcat = $cat->slug;
}
}
}
//管理画面で設定したパーマリンクの設定に合わせる
$permalink = home_url()."/".$parentcat."/".$post->post_name;
return $permalink;
}
でOK
これで子カテゴリに属している投稿ページのURLが
ドメイン.com/親カテゴリ/投稿名
のようになります。
※管理画面のパーマリンク設定で
/%category%/%postname%/
以外の設定をしている場合、上記の方法だと404エラーになってしまうので注意
WordPressのおすすめ参考書
bookfan 1号店 楽天市場店
¥3,300 (2026/01/20 15:42時点 | 楽天市場調べ)

