質問: フォーラムに投げたのですが返事もつかないのでこちらにも投げさせて頂きます。 カスタムパーマリンクで「/%post_id%」 タグベースのところを「tag」に設定しています。 現状tag.phpを設定してありまして tag/タグ名 とURLを入力する事で「タグ名」が含まれる記事リストを表示する事自体は出来ています。 その他の投稿ページや固定ページは想定通りに問題なく動作していますが、お客様の希望で、キーワード(タグ)別一覧ページのURLをタグ名じゃなくてタグIDで表示してほしいと言われています。 そこを tag/タグのID(term_id でしょうか) でURLが開くようにしたいのです。 ただ実際は例として「tag/123」とURLを打つと404エラーになってしまいます。 私が思っていたのは「123」というタグ名(というかクエリというか)として認識されて、指定のタグはないという感じで開くのかな?と思っていたのですが、そもそも404になってしまうのでtag.phpの方ではなんとも出来ない感じになっています。 IDが取得できればIDからタグ名が取得できるので、一覧表示部分は今のtag.phpでいけると思っています。 フィルターフックとかでURLをリライトしてやらないといけないのかな?とまでは想像してみたのですが合ってるかも出来るのかもわからなくなってしまいました。 何かヒントをいただければと思います。 よろしくお願い致します。
回答: リライトルールを追加するには、下記のようにすれば良いのでは、と思うのですが未テストなので動くかは不明。また、テンプレートがどのテンプレートで表示されるかも動かしてみないとわわかりません。 functions.php ``` // リライトルールを追加 function my_add_tag_id_rewrite_rule() { add_rewrite_rule( 'tag/(\d+)/?$', 'index.php?tag_id=$matches[1]', 'top' ); } add_action( 'init', 'my_add_tag_id_rewrite_rule' ); // リライトルールに使った 'tag_id' がクエリとして動作するようにする function add_meta_query_vars( $public_query_vars ) { $public_query_vars[] = 'tag_id'; return $public_query_vars; } add_filter( 'query_vars', 'add_meta_query_vars' ); // 追加したクエリ 'tag_id' が存在した時の記事抽出 function meta_search_query( $query ) { if ( is_admin() || !$query->is_main_query() ) { return; } if ( $query_val = $query->get( 'tag_id' ) ) { $query->set( ' tag_id', $query_val ); } } add_action( 'pre_get_posts', 'meta_search_query' ); ``` 【[WordPress]カスタムクエリの追加方法と一緒に追加しておきたい関数やフックなど | Wood-Roots.blog】 http://wood-roots.com/web制作/wordpress-web制作/カスタムクエリの追加方法と 【カスタム分類のページの URL を変更する | Web Design Leaves】