У вас есть страница WordPress с тем же названием, что и пользовательский тип «front» slug

У меня есть пользовательский тип сообщений типа djs и пользовательский city таксономии с двумя терминами: boston и nyc . Таким образом, ди-джей может быть отмечен как Бостон или Нью-Йорк.

Профайлы DJ (один пост djs ) расположены в /nyc-wedding-dj/joe-shmoe/ , например, или для Бостонского ди-джея /boston-wedding-dj/jane-doe/ . Другими словами, перезаписываемый пул для этого настраиваемого типа сообщений устанавливается как %city%-wedding-dj .

У меня есть две регулярные страницы, называемые /boston-wedding-djs/ и /nyc-wedding-djs/ (обратите внимание на множественные ди-джеи с помощью s ), где я использую настраиваемый шаблон страницы для прокрутки ди-джеев из соответствующего города и отображения списка ссылок на DJ-профили из этого города.

То, что я хотел бы сделать, состоит в том, чтобы переписать переписку в %city%-wedding-djs чтобы отдельные страницы типа отдельных страниц «отображались» (по крайней мере, для google) в качестве дочерних страниц этих страниц, упомянутых выше.

Тем не менее, существует конфликт: когда я изменяю перезаписываемый пул для djs пользовательского типа сообщений в %city%-wedding-djs , я получаю ошибку 404 Not Found для страниц /boston-wedding-djs/ and /nyc-wedding-djs/ .

Как я могу создать перезапись с тем же именем, что и страница?

Это напомнило мне о большом блоге Мэтью Бойнеса по несколько смежному вопросу.

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

Если вы должны это сделать и ищете обходное решение в WordPress, тогда можно настроить, как он анализирует входящий запрос, с помощью фильтра request or parse_request .

Пример :

Это проверяет, существует ли страница %city%-wedding-djs , поэтому вам не нужно обновлять фрагмент кода, если впоследствии вы добавите больше городов:

 ! is_admin() && add_filter( 'request', function( $query_vars ) { if ( isset( $query_vars['city'] ) && ! isset( $query_vars['djs'] ) ) { $slug = $query_vars['city'] . '-wedding-djs'; // Override if the %city%-wedding-djs page exists if ( get_page_by_path( $slug ) ) $query_vars['pagename'] = $slug; } return $query_vars; } ); 

или если вы только получили boston и nyc качестве городов, и вам не нужно проверять, существуют ли соответствующие страницы:

 ! is_admin() && add_filter( 'request', function( $query_vars ) { if ( isset( $query_vars['city'] ) && ! isset( $query_vars['djs'] ) ) { $city = $query_vars['city']; if ( in_array( $city, array( 'boston', 'nyc' ) ) ) $query_vars['pagename'] = $city . '-wedding-djs'; } return $query_vars; } ); 

Это означает, что запрос:

 example.tld/nyc-wedding-djs/ 

теперь рассматривается как page , и

 example.tld/nyc-wedding-djs/joe-smhoe/ 

как должность djs .

Здесь мы предполагаем, что правила перезаписи page имеют более низкий приоритет, чем для типа сообщения djs .

Если вы используете htaccess, вы можете вручную настроить перенаправления для этих страниц, и затем они должны правильно разрешить. Добавьте следующие строки:

 RewriteCond %{REQUEST_URI} ^/boston-wedding-djs/$ [NC,OR] RewriteCond %{REQUEST_URI} ^/boston-wedding-djs$ [NC] RewriteRule . index\.php?pagename=boston-wedding-djs [NC,L] RewriteCond %{REQUEST_URI} ^/nyc-wedding-djs/$ [NC,OR] RewriteCond %{REQUEST_URI} ^/nyc-wedding-djs$ [NC] RewriteRule . index\.php?pagename=nyc-wedding-djs [NC,L] 

после RewriteRule ^index\.php$ - [L]

Вы также можете сделать это с помощью WordPress add_rewrite_rule, но похоже, что они смущены, поэтому кажется, что с меньшей вероятностью работать.

У вас не может быть сообщение и страница с тем же самым пули.

Вам нужно удалить свою страницу и создать страницу шаблона archive-djs.php и, возможно, single-djs.php и она будет отображать эту страницу динамически для вас.

См. Эту страницу для иерархии шаблонов