Я работаю на сайте тура.Где у них есть пользовательский тип поста, созданный с помощью специального плагина.Этот пользовательский тип записи имеет базовый слаг, например "/destination/".$post->post_name.Они хотят, чтобы я удалил этот базовый слаг, чтобы он мог быть только $ post-> post_name
Я попробовал код из Интернета, указанный ниже.
Он работает на одном уровне для этого места назначения,Но когда у меня есть родительский пункт назначения, как Нью-Йорк в Соединенных Штатах Америки.Так что не работает.Вот пример:
function update_destination_page_link_filter($post_link, $post, $leavename = null, $sample = null ) {
if ( $post->post_type === 'destination' ) {
$post_link = str_replace('/destination/', '/', $post_link);
if($post->post_parent !== 0){
$parent_slug = get_parent_link($post->post_parent, '');
$post_link = '/'.$parent_slug.$post->post_name;
}
$post_link = update_url_base( $post, $post_link );
}
return $post_link;
}
add_filter( 'post_type_link', 'update_destination_page_link_filter', 1, 3 );
function allow_destination_direct_by_name( $query ) {
// Only noop the main query
if ( ! $query->is_main_query() )
return;
// Only noop our very specific rewrite rule match
if ( 2 != count( $query->query )
|| ! isset( $query->query['page'] ) )
return;
// 'name' will be set if post permalinks are just post_name, otherwise the page rule will match
if ( ! empty( $query->query['name'] ) )
$query->set( 'post_type', array( 'post', 'destination', 'page' ) );
}
add_action( 'pre_get_posts', 'allow_destination_direct_by_name', 1);
Один уровень http://siteurl/united-state-america работает хорошо http://siteurl/united-state-america/new-york не работает.Должна открыться страница местоположения в Нью-Йорке, но она показывает 404. Она также может быть более точной для определения местоположения, например http://siteurl/united-state-america/new-york/brooklyn