【WordPress】カスタム投稿タイプの追加方法

やりたいこと

タグのスラッグ使わないで http://example.com/tag/{$term_ID}/ の形にする。
デフォルトだと意識してタグのスラッグを編集しない限り自動でタグの名前をスラッグにへんこうされるので、2バイトだと /tag/%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89/ となってちょっと、、、という場合に。
投稿タグのフィードやページ送りもバッチリOK。

なお、カテゴリーアーカイブのパーマリンクをカテゴリーIDにしたい場合は以下の記事参照。

ソースコード

はいどーん。

<?php
function numeric_term_link( $url, $term, $taxonomy ) {
    global $wp_rewrite;

    // post_tag only
    if ( $taxonomy == 'post_tag' ) {
        if ( $wp_rewrite->using_permalinks() ) {
            $permastruct = $wp_rewrite->get_extra_permastruct( 'post_tag' );
            $permastruct = str_replace( '%post_tag%', $term->term_id, $permastruct );
            $url = home_url( user_trailingslashit( $permastruct, 'tag' ) );
        }
    }
    return $url;
}
add_filter( 'term_link', 'numeric_term_link', 10, 3 );

function add_tag_id_to_qvar( $vars ) {
    $vars[] = 'tag_id';
    return $vars;
}
add_filter( 'query_vars', 'add_tag_id_to_qvar' );

function numeric_tag_rewrite_rules( $rules ) {
    $custom_rules = array();
    foreach ( $rules as $regex => $rewrite ) {
        $regex = str_replace( '/(.+?)/', '/([0-9]{1,})/', $regex );
        $rewrite = str_replace( '?tag=', '?tag_id=', $rewrite );
        $custom_rules[$regex] = $rewrite;
    }
    return $custom_rules;
}
add_filter( 'post_tag_rewrite_rules', 'numeric_tag_rewrite_rules' );
  1. term_link のフィルターフックで numeric_term_link() を実行し、投稿タグアーカイブへのリンクをスラッグらタグIDになるよう変更。なおこれはURLのみを変更するのでこれだけでは片手落ち。
  2. リライトルールでタグIDを使えるように query_vars のフィルターフックで tag_idを追加しておく。
  3. リライトルールにフックは色々あるけど、post_tag_rewrite_rules で投稿タグのリライトルールに限定して改変。
  4. 最後に管理画面の「パーマリンク設定」を変更せずに更新すること

現場からは以上です。

[紹介元] WordPressタグが付けられた新着投稿 – Qiita 【WordPress】カスタム投稿タイプの追加方法

  • コメント

    1. 匿名希望
      2018/01/21(日) 21:56:18

      【投稿した機体一覧・ガンダム系①】
      ガンダム最終決戦仕様
      アレックス(チョバムアーマー装備)
      FAスレイブ・レイス
      ガンダム4号機・5号機
      ガンダム7号機
      ガンダム8号機
      ストライカー・カスタム
      ガンダム(キャスバル機)
      水中型ガンダム
      フルアーマー・ガンダム(タイプB)

    記事に戻る

関連記事