web-dev-qa-db-ja.com

カスタム投稿タイプのURIを書き換えるにはどうすればいいですか?

私が取り組んでいるサイトでは、次の「かわいい」パーマリンク構造を使用しています。

http://example.com/blog/my-special-post

しかし、カスタム投稿タイプの場合、私のクライアントは「かわいい」スラッグを避けたいと思います。

http://example.com/product/142

カスタム投稿タイプのスラグの代わりに投稿IDを使用するにはどうすればよいですか。

私はこれがWP_Rewriteを使って可能であるかもしれないと信じます、しかし、私はどこから始めるべきかわかりません。

14
Lea Hayes

これは私が投稿IDでカスタム投稿タイプURLを書き換えるために使用するものです。 URL要求を変換するための書き換え規則と、get_post_permalink()の呼び出しに対して正しいURLを返すためのpost_type_linkに対するフィルタが必要です。

add_filter('post_type_link', 'wpse33551_post_type_link', 1, 3);

function wpse33551_post_type_link( $link, $post = 0 ){
    if ( $post->post_type == 'product' ){
        return home_url( 'product/' . $post->ID );
    } else {
        return $link;
    }
}

add_action( 'init', 'wpse33551_rewrites_init' );

function wpse33551_rewrites_init(){
    add_rewrite_rule(
        'product/([0-9]+)?$',
        'index.php?post_type=product&p=$matches[1]',
        'top' );
}
30
Milo