取り除くWordPressデフォルトのカテゴリーアーカイブのURL形式は以下。/notes/category/カテゴリースラッグ/このサイトでは、個別記事のURLを以下に設定している。/notes/カテゴリースラッグ/記事IDなので、上記にあわせてカテゴリーアーカイブのURLも以下のようにしたい。なしURLにアクセスした際の表示不具合を防ぐ問題の挙動カテゴリーアーカイブのURL形式は/notes/category/カテゴリースラッグ/なので、以下のURLは「正しくないURL」のはず。/notes/カテゴリースラッグ/が、実際にアクセスすると404にはならず、カテゴリーアーカイブの1ページ目が表示されてしまう。何が困るのか?カテゴリーアーカイブの2ページ目以降の正しいURLは/notes/category/カテゴリースラッグ/page/2なので、ページネーションのリンク先として生成される以下のURLは「正しくないURL」/notes/カテゴリースラッグ/page/2実際にアクセスすると、こちらは404が表示される。抜いたURLにアクセスした場合、「1ページ目は問題なく見れるのに、2ページ目以降には行けないページが見れてしまう」状態になっている。パーマリンク設定の仕組みダッシュボード>管理画面>設定>パーマリンク設定には、オプションとしてカテゴリーベースタグベースの設定欄がある。部分を、任意の名前に変えるためのオプション機能。いう動作をしているのか?WordPressの中では、どのURLを叩いたら、どのページを出す、というリライトルールが設定されている。「パーマリンク設定」の画面で設定することは、イコール、リライトルールを上書きすること。テーブルに格納されている。値が入っている直接DBを見てもいいが、配列が読みにくいので、get_option()関数を使って参照する。テーマファイル内に以下を記述して出力させる。print_r(get_option('rewrite_rules'));?></pre>以下のような配列が取得できる。index.php?category_name=$matches[1])叩かれたURLが左側の正規表現にマッチすると、右側のURLの内容が出力される。マッチングは上から順に処理される。カテゴリーベースを書き換えるとどうなるのか?カテゴリーベースを書き換えると、以下の5行の「category」の部分が書き換わる。index.php?category_name=$matches[1]たとえば、カテゴリーベースに「topics」を設定して保存すると、以下のようになる。入れる」という行為は、以下のリライトルールを定義しているということ。index.php?category_name=$matches[1].(ドット)は正規表現上「何でもいい1文字」という恐ろしく便利で汎用的な文字。法則を確実にぶっ壊している。遭遇する「ドットを入れたら○○のページが404になった」の原因は多分ここ。抜いたURLにアクセスした場合、1ページ目が問題なく見れてしまうという問題については、リライトルールの一番最後の行が原因。パラメータに渡して表示させる(=その文字列のカテゴリーアーカイブが表示される)という処理の結果だった。このルールを適用させたくなければ、この行より手前にマッチする条件を追加する必要がある。抜きのURLを叩いたときに、出したいページが出るを目指して、リライトルールとリダイレクトの設定を行う。※あくまで「カテゴリーベースにドットを入れるよりはマシ」程度の力技です。※複雑なことをしていないサイトなのでできる面もあり(後述の前提条件がないと成り立たない)。目指すものそれぞれの正規表現マッチ条件のうちcategory/(.+?)/となっているところを(存在するカテゴリースラッグいずれか)/にしたい。ソースfunctions.phpに以下を追記する。'custom_rewrite_basic');やっていることは以下。始まる行をコピーしてきて、add_rewrite_ruleの第1引数に左側を、第2引数に右側をセット。指定(既存のリライトルールよりも優先的に適用させるため)作成したパイプ区切りのリストを使って、第1引数のマッチ条件を書き換え。ソースを反映したら、必ず、管理画面>設定>パーマリンク設定の[変更を保存]ボタンを押す。WordPress内のリライトルールのキャッシュを更新する必要があるため。関数実行時と同じ動作にあたる。カテゴリーのアーカイブの場合は/notes/webというURLなので、リライトルールの最終行にたどり着く前に上記にマッチし、カテゴリーアーカイブページが正しく表示される。/notes/web/page/2/notes/web/feedについても、上記で設定されているので、理想通りの挙動をするようになる。目指すもの/notes/category/カテゴリースラッグ(/なにがしか)にアクセスされたら/notes/カテゴリースラッグ(/なにがしか)に飛ばす。含まれたURLが出力されてしまうので、代替方法を書いておく。foreachの中でカテゴリースラッグを呼び出し、aタグのhref属性の中を好きに組み立てる。'</ul>';}?>ループ内で記事に設定されているカテゴリーを出力ループ内なのでget_the_category()関数を使う。9:27コメントありがとうございます!お力になれたようで嬉しいです。ReplyNameMessageスパム対策のため、コメント本文にURLが含まれている場合は「承認待ち」となり、すぐに投稿が反映されません。公序良俗に反する内容、個人が特定できる情報、スパム投稿と思われるコメント等については、予告なく編集・削除する場合があります。前の記事へ次の記事へこのブログについて書いている人:サトウオールドタイムのクローハンマーバンジョーを弾くWeb屋。技術系エントリーからライブの告知までごった煮でお届けします。hi3103.net。