現在使っている参考ページのURLが載せられないので、コードのみ書きます。
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;
}
フィルターフック post_link_category を使って解決することができました。