web-dev-qa-db-ja.com

カスタム投稿タイプのURLから親スラッグを削除する

タイトルが述べているように、私は特定の投稿タイプのサービスから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を配信しています。

2
NW Tech

簡単なテストで、私はこれが箱から出してうまくいくことを発見して驚きました。つまり、子投稿の正規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 );
4
Matthew Boynes