У меня есть пользовательский тип сообщений типа 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
и она будет отображать эту страницу динамически для вас.
См. Эту страницу для иерархии шаблонов