TGViewer
Фриланс и веб с OlegTix | WordPress Фриланс и веб с OlegTix | WordPress @web_panda · 411 subscribers
Post #359 362
⬜️ Как я победил 404 в WordPress, когда CPT и страницы живут в одной url вложенности ⬜️

Недавно столкнулся с довольно интересной ситуацией у букмекеров:
нужно было, чтобы существовали URL вида

/bookmaker-rating/1xbet/      ← страница букмекера (CPT)
/bookmaker-rating/about-rating/ ← обычная страница


А WordPress, конечно, говорит: «нет».
Потому что у кастомного пост-типа bookmaker стоит rewrite['slug'] = 'bookmaker-rating',
и он считает, что всё под этим путём — это букмекеры.
Страницы просто не доходят до роута и отлетают 404.

❌ Суть бага:
WP не умеет на одном уровне различать CPT и page.
Если слаг у пост-типа совпадает с директорией страниц, одна из сущностей «съедается».

✅ Решение:
Добавил фильтр request, который проверяет, существует ли букмекер с таким slug.
Если да — отдаёт его.
Если нет — считает, что это страница.

Плюс добавил собственное правило для /bookmaker-rating/.

Вот код:
add_filter('request', function ($query_vars) {
if (isset($query_vars['pagename']) && strpos($query_vars['pagename'], 'bookmaker-rating/') === 0) {
$slug = explode('/', $query_vars['pagename'])[1] ?? null;

if ($slug && get_page_by_path($slug, OBJECT, 'bookmaker')) {
$query_vars = [
'post_type' => 'bookmaker',
'name' => $slug,
];
} else {
$query_vars['pagename'] = 'bookmaker-rating/' . $slug;
}
}
return $query_vars;
});

add_action('init', function () {
add_rewrite_rule(
'^bookmaker-rating/([^/]+)/?$',
'index.php?pagename=bookmaker-rating/$matches[1]',
'top'
);
});


📌 Если статья была полезна, то буду рад, если вы поделитесь ей с друзьями разработчиками.

➡️ Ставьте реакции, если было полезно. Тогда я пойму, что такие темы интересны и посты будут выходить чаще.

OlegTix | #wordpress #php
  • 👍 11
  • 🔥 5
More from @web_panda
  1. Sep 20, 2026Яндекс начал вставлять рекламу прямо в карты на сайтах 😳 Сегодня открыл сайт и сначала ре…
  2. Sep 8, 2026Post #405
  3. Aug 26, 2026⬜️ Выложил урок про WP-CLI ⬜️ Разбираем на практике: — как за минуту сверить файлы ядра с…
  4. Aug 21, 2026Как вы боретесь с атаками на сайт, когда сайт находится на виртуальном хостинге? В последн…
  5. Jul 20, 2026Ссылки телеграма заблокированы Я думаю, что все уже видели новость, что домен t.me был отк…
  6. Jun 1, 2026OlegTix | #мем
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →