Redirect handler covers only published clones, не работает на private (washanyanya-style) #1
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Симптом
Redirect::handle()вincludes/class-redirect.php(master @ v1.0.1) триггерится только на условии$post->ID === $page_unic[i]['page_new']. Это значит — редирект клон-страницы на канонический/<city>/<orig-slug>/отрабатывает только в edge-кейсе, когда admin вручную опубликовал клон под собственным URL.В production-модели washanyanya (для которой плагин и задумывался) клоны хранятся со статусом
private, собственного публичного URL не имеют. На таких сайтах текущий handler не срабатывает никогда.Текущий код
includes/class-redirect.php:38-69— фильтр по(int)($row['page_new']) === $current_page_id.Что делает washanyanya вместо этого
На
is_404()ищет private-пост по slug через:Дальше матчит
$candidate->IDпротивpage_newв page_unic, находит соответствующийtown, формирует canonical URL и делаетwp_safe_redirect().Возможные решения
A. Переписать
Redirect::handle()на washanyanya-style:template_redirectилиwpпосле resolve queryis_404()get_posts(name=$slug, status=[private,publish]), lookup в page_unictests/Integration/RedirectTest.phpпод новую семантикуB. Зафиксировать текущий scope в README:
Сопутствующее
RedirectTest.phpфиксируют текущую (page_new) семантику — менять одновременно с handler'ом.Fixed in v1.1.0. Redirect::handle() переписан на washanyanya-style: template_redirect@1 + is_404 + reverse-slug lookup через get_posts(name=slug, post_type=page, status=[private,publish]) → match в page_unic → 301 на /{city}/{orig-canonical-path}/.
Release: https://git.netranking.ru/bryzgalov/wp-multi-city/releases/tag/v1.1.0
Commit:
07ed170Tests: 118 green / 218 assertions.