web-dev-qa-db-ja.com

カスタム投稿タイプのスラッグを書き換えてpost-idを含める

私の現在のパーマリンク設定は/%postname%/%post_id%/です。 CPTでも同じように使用したいです。現在のURLはsite.com/questions/title/のようになります。

投稿タイプpostの場合と同様に、すべてのcpt投稿のURLの末尾に投稿IDを取得します。

私が見つけた最も近い関数は...です(これはsite.com/questions/postid/を出力します)

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

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

add_action( 'init', 'change_rewrites_init' );

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

TIA

1
Karthik

これを試して :

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

add_action( 'init', 'change_rewrites_init' );

function change_rewrites_init(){
    add_rewrite_rule(
        'questions/([a-z-]+)/([0-9]+)?$',
        'index.php?post_type=questions&p=$matches[1]&postid=$matches[2]',
        'top' );
}

ここでpost slugはURLのquestionsの後に付けられています。例えばquestions/q-slug/45です。それに応じて書き換えルールが変更されます。

1
Nilambar