Skip to main content

No Category Base (WPML) 代替手段

By 2025年8月19日WPプラグイン1 min read

No Category Base (WPML) を使っていると 固定ページを優先しながら Category を削除してくれるのですが、
ほかのプラグインを更新した際に No Category Base (WPML) の設定が機能せず、「投稿カテゴリー」が優先されてしまう場合が存在します。
場合によっては固定ページが404errorになってしまうこともあります。
404errorが返された場合はサイト運営では死活問題で必ず回避されないとまずいです。

WordPressでは「固定ページ」「投稿カテゴリー」「タグ」などが同じスラッグを持つと競合します。
WordPressでは優先順位のルールがあり、基本的に カテゴリーや投稿アーカイブが優先される 仕様になっています。

ほかにも Category を削除 してくれるプラグインは Rank Math SEO などのプラグインでも変更できるのですが、はやりカテゴリーや投稿アーカイブがが優先されてしまします。

そこで functions.php に以下のように記述すると、同じスラッグなら固定ページを強制的に優先できます。
解決策としては、requestフィルターで「同じスラッグの固定ページがあるならカテゴリークエリを無効化」してしまうのが一番確実です。

/**
* 固定ページが存在する場合はカテゴリーを無効化してページを優先
*/
function force_page_over_category($query_vars) {
if (isset($query_vars['category_name'])) {
$slug = $query_vars['category_name'];
$page = get_page_by_path($slug);
if ($page) {
// category_name を消してページ扱いにする
unset($query_vars['category_name']);
$query_vars['page_id'] = $page->ID;
}
}
return $query_vars;
}
add_filter('request', 'force_page_over_category');

IY