見出し画像

カスタム投稿タイプのURLを数字べースにする方法


カスタム投稿タイプのURLを数字べースにする要件がありました。対応した手順を紹介します。

パーマリンクの設定を記事IDにする。

まずダッシュボードの 設定 > パーマリンク から、カスタム構造を選び post_id を設定します。


カスタム投稿タイプの設定で”フロントでのリライト”をfalseにする。

下の画像はCPT UIを使った場合の”フロントでのリライト”の設定変更項目です。

もしカスタム投稿タイプをfunctions.phpから追加している場合は、そちらで下記のように設定してください

 'rewrite' => array('with_front' => false),


テーマ中に書き出される記事のリンクを[投稿タイプ/記事ID]にする。

functions.phpにコードを追加します。

例えば'coordinate'、'knowledge'という2つのカスタム投稿タイプの記事のURLを変えたい場合、下のように書きます。

function change_custom_post_type_link( $link, $post ){

    $post_type_arr = array('coordinate','knowledge');
    for($i = 0 ; $i < count($post_type_arr ); $i++){ 
        if ( $post->post_type === $post_type_arr [$i]  ) {
            return home_url( '/'.$post_type_arr [$i].'/' . $post->ID );
        }
    }
    return $link;
}
add_filter( 'post_type_link', 'change_custom_post_type_link', 1, 2 );

これでテーマ中に書き出される記事のリンクが [https://ドメイン/投稿タイプ/記事ID] の形式になります。


リライトルールを書き換えて投稿タイプ/記事IDが表示されるようにする。

function custome_url_rewrite_rules_array( $rules ) {
    $new_rewrite_rules = array( 
      'coordinate/([0-9]+)/?$' => 'index.php?post_type=coordinate&p=$matches[1]',
      'knowledge/([0-9]+)/?$' => 'index.php?post_type=knowledge&p=$matches[1]',
    );
    return $new_rewrite_rules + $rules;
}
add_filter( 'rewrite_rules_array', 'custome_url_rewrite_rules_array' );

※coordinate、knowledgeはお使いのカスタム投稿タイプのスラッグに置き換えて使ってください。


カスタム投稿タイプのURLを数字のみとしたい(投稿タイプのスラッグを省く)場合は?

URLから投稿タイプのスラッグを省くことで、記事の投稿タイプを後々で変えてもURLが変わらないようにすることができます。
そのためにはfunctions.phpに次のように記述します。

function change_custom_post_type_link( $link, $post ){

    $post_type_arr  = array('coordinate','knowledge');
    for($i = 0 ; $i < count($post_type_arr ); $i++){ 
        if ( $post->post_type === $post_type_arr [$i]  ) {
            return home_url( '/' . $post->ID );
        }
    }
    return $link;
}
add_filter( 'post_type_link', 'change_custom_post_type_link', 1, 2 );

function custome_url_rewrite_rules_array( $rules ) {
    $new_rewrite_rules = array( 
	  '([0-9]+)/?$' => 'index.php?post_type=coordinate&p=$matches[1]',
	  '([0-9]+)/?$' => 'index.php?post_type=knowledge&p=$matches[1]',
    );
    return $new_rewrite_rules + $rules;
}
add_filter( 'rewrite_rules_array', 'custome_url_rewrite_rules_array' );

6,15,16行目のコードが変わっています。

※coordinate、knowledgeはお使いのカスタム投稿タイプのスラッグに置き換えて使ってください。

この記事が気に入ったらサポートをしてみませんか?