2015-03-09 2 views
0

У меня есть сайт WordPress, который имеет стандартную страницу называемого Places с URLНесколько страниц с этим URL в WordPress

example.com/places/ 

И у меня есть несколько дочерних страниц, называемых по городам

example.com/places/city-1 
example.com/places/city-2 

Теперь я есть пользовательский почтовый тип Place, который должен указать в одном месте и должны иметь постоянную ссылку как

example.com/places/place-1 

Но тогда, если я перейду к одной из предыдущих ссылок с городом-1, city-2, я получу 404, очевидно, потому что нет place с этой постоянной ссылкой.

Есть ли способ для WordPress опуститься до предыдущей постоянной ссылки. Поэтому, если нет place с этим именем, найдите с ним page.

+0

Способ работы маршрутизации не допустит этого. Это в основном список шаблонов регулярных выражений, и в вашем случае они перекрываются, таким образом, тот, который первым в списке будет соответствовать. В начале этого списка добавляются шаблоны пользовательского типа. Единственный способ сделать эту работу - добавить пользовательский маршрут/шаблон и обработать его самостоятельно, решив, что показывать. Поэтому загляните в 'add_rewrite_rule', поймайте этот маршрут в плагине, а затем установите глобальную' $ wp_query' в то, что вам нужно. –

ответ

0

Возможно, вы сэкономите REFERER -значение от PHP server variable$_SERVER, но это не очень надежный и может быть изменен.

Я использую the plugin "Permalink Finder" на одной из страниц, которые я поддерживаю, и это хорошо работает для поиска измененного URL. Вы могли бы попробовать и посмотреть, работает ли это для вас.

0

В случае, если у кого-либо возникла аналогичная проблема, это можно сделать, используя подробные правила страницы. Это пример, который я нашел на WordPress Stack бирже https://wordpress.stackexchange.com/questions/22438/how-to-make-pages-slug-have-priority-over-any-other-taxonomies-like-custom-post

add_action('init', 'wpse16902_init'); 
function wpse16902_init() { 
    $GLOBALS['wp_rewrite']->use_verbose_page_rules = true; 
} 

add_filter('page_rewrite_rules',  'wpse16902_collect_page_rewrite_rules'); 
function wpse16902_collect_page_rewrite_rules($page_rewrite_rules) 
{ 
    $GLOBALS['wpse16902_page_rewrite_rules'] = $page_rewrite_rules; 
    return array(); 
} 

add_filter('rewrite_rules_array',  'wspe16902_prepend_page_rewrite_rules'); 
function wspe16902_prepend_page_rewrite_rules($rewrite_rules) 
{ 
    return $GLOBALS['wpse16902_page_rewrite_rules'] + $rewrite_rules; 
} 
Смежные вопросы