Удаление родительского пула из URL-адреса в настраиваемом типе сообщений

Как указано в заголовке, я хотел бы удалить родительские пули из URL-адресов для определенных типов сообщений: services.

Что-то, что изменило бы это:

http://demo.com/parent-service/child-service-1 http://demo.com/grand-parent-service/parent-service/child-service-2 http://demo.com/great-grand-parent-service/grand-parent-service/parent-service/child-service-3 etc 

Что-то вроде этого:

 http://demo.com/child-service-1 http://demo.com/child-service-2 http://demo.com/child-service-3 etc 

Я бы предпочел не использовать дополнительные плагины для этого. Я в настоящее время доставляю CPT через плагин, который также регистрирует пользовательскую таксономию.

В быстром испытании я был удивлен, обнаружив, что это работает из коробки. То есть, канонический URI для дочернего поста все еще имеет родителя в пути, но дочерний пост работает так же хорошо без него (не 404, не перенаправляет). В результате, это просто вопрос фильтрации post_type_link чтобы заставить это работать, как вы просите! Следующий код должен сделать именно это:

 function wpse_101072_flatten_hierarchies( $post_link, $post ) { if ( 'service' != $post->post_type ) return $post_link; $uri = ''; foreach ( $post->ancestors as $parent ) { $uri = get_post( $parent )->post_name . "/" . $uri; } return str_replace( $uri, '', $post_link ); } add_filter( 'post_type_link', 'wpse_101072_flatten_hierarchies', 10, 2 );