2015-07-25 2 views
15

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

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

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

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

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

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

+0

Обычно полезно видеть код. По крайней мере, то, как вы определили (и попытались определить) свои перезаписи. – rnevius

+0

Где Google показывает «дети страниц»? Я понимаю, что подстраницы (здесь, одиночные должности ди-джея) должны иметь примерно такую ​​же постоянную ссылку для SEO, но я понимаю, что каждая страница оценивается по собственному усмотрению, независимо от того, является ли она одной почтой типа Post, более важной проблемой , Я обычно обрабатываю это так же, как и сейчас, - '/ post-types /' - это страница с хорошим обзором, затем '/ post-type/xyz /' - это конкретные сведения о 'xyz'' post-type' - никогда не было проблем с SEO; оба подходят для поиска post-type Google. – DACrosby

+0

В Wordpress иногда и нечетная ошибка при смене пули, она вернет 404. Удалите страницы с теми же слизнями, обновите перезаписываемый пул. Затем перейдите в настройки> permalinks и сохраните постоянные ссылки. – addedlovely

ответ

7

Если вы используете 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 однако это уже кажется, что они путаются, так что кажется, что менее вероятно, будет работать.

6

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

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

Смотрите эту страницу для template hierarchy

+0

Все три предлагаемые решения могут решить проблему, но это, безусловно, наименее «хакерское», самое чистое, наиболее надежное в будущем решение - плюс это единственное, что не приводит к дублированию контента, насколько я могу судить. Всегда рекомендуется проконсультироваться по [иерархии шаблонов] (https://developer.wordpress.org/themes/basics/template-hierarchy/) перед выполнением обходных решений - очень часто это обеспечивает очень простое решение довольно сложных проблем. – Mikk3lRo

10

Это напомнило мне о великом блоге post Мэтью Boynes на несколько смежной теме.

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

Если вы должны это сделать и ищете обходной путь в WordPress, тогда можно настроить, как он анализирует входящий запрос, с помощью фильтра request - или 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.

 Смежные вопросы

  • Нет связанных вопросов^_^