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