タイトルが述べているように、私は特定の投稿タイプのサービスからURLから親スラッグを取り除きたいです。
これを変える何か:
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 );