当サイトでは、トップページを固定ページにして投稿ページを「blog.html」の固定ページに割り当てています。「表示設定」の「フロントページの設定」を「固定ページ」にし、「フロントページ」「投稿ページ」をそれぞれ設定しています。「投稿ページ」に設定している固定ページのパーマリンクは「blog」です。それから歴史的な事情により固定ページのURLの末尾は「.html」で終わるようにしています。それが次のページです。https://aulta.co.jp/blog.htmlこれはこれで良いんですが、2ページ目3ページ目・・・といくとURLがおかしなことになります。https://aulta.co.jp/blog.html/page/2https://aulta.co.jp/blog.html/page/3こんな感じです。やりたいことhttps://aulta.co.jp/blog.html/page/2https://aulta.co.jp/blog.html/page/3このようになっている2ページ目以降のURLを次のように変えたいです。現在の設定を確認ここに記す作業は可能なら開発環境で行いましょう。本番と同じものをローカル環境に構築しておくとこういうとき安心して壊せます。それと、このページと同じことを行って何か問題が発生しても弊社からは何もできませんので自己責任でお願いします。(有償サポートはお問合せください)まずは今どうなっているのか調べていきます。次のSQLで調べられます。='rewrite_rules'でも、このままじゃよく分かりませんね。別の方法で確認してみます。'</pre>';exit;どこのページでも良いのでブラウザからアクセスすると中身が表示されます。ブラウザ上ではやりづらいのでまるごとコピーしてテキストエディタに貼り付けます。投稿ページから変えようと思います。いくつか候補があると思いますが、下記の形が上記URLにマッチする項目です。※配列のキーは正規表現になっています。index.php?pagename=$matches[1]&paged=$matches[2]これを参考に次のような形を作ります。function(){add_rewrite_rule('(.?.+?).html/page/?([0-9]{1,})/?$','index.php?pagename=$matches[1]&paged=$matches[2]');});第一引数は配列のキー、第二引数は配列の値をそのまま持ってきています。次に、第一引数(マッチする正規表現)を次のように変え、第三引数に'top'を加えます。第二引数は変えません。is_admin()で条件判定を付け、最終的に次の形になります。function(){add_rewrite_rule('(.?.+?)-([1-9][0-9]*).html$','index.php?pagename=$matches[1]&paged=$matches[2]','top');});}管理画面から、「設定」>「パーマリンク設定」に行き、何も変更せずそのまま保存します。これで、追加したリライトルールが有効になります。Rewriteのページには次のような説明がありますflush_rules関数はとても遅いので、実装するときにはすべてのページで実行されるinitフィルターで呼び出さないようにしてください。「パーマリンク設定」で保存することで$wp_rewrite->flush_rules();と同じことを行っています。アクセスすると表示される!・・・と思いきや、「ページが見つかりません」になってしまいます。※このあたりは長くなりますので「wordpressで謎の転送処理されているのを突き止める」に記します。ルール自体は認識されるようになったのですが、canonicalのチェックに引っかかって「wordpress自身が正しいと思ってるURL(/page/2の形式)」に転送されてしまいます。次のコードをfunctions.phpに追記し、canonicalのチェックで転送されないようにします。アクセスすると表示されるので「完成!」と言いたいところなのですがまだ続きます。ページャのフォーマットを変える一覧ページの下部にあるページャを見てみます。1,2,3,4,・・・とページ番号が表示されているところです。ここにマウスを乗せるか、デバッグツールなどでリンク先を確認してみます。3ページ目だと次のようなリンクになっています。/blog-2.html/3.html希望としては/blog-3.htmlになって欲しいところです。次のコードをfunctions.phpに追記します。2);これで確認してみると次のようになりました。/blogpage/3.htmlなので、まだ続きます。2ページ目以降のリンクを「-数字.html」の形に変える次のコードをfunctions.phpに追記します。アクセスして確認してみます。問題は見当たらないようで・・・問題ありました。書き換えるブラウザでソース表示してみると次が見つかりました。/>これだとマズいですね。チェックで引っかからないようにする」で追加した個所に次のコードを追加します。SEO」プラグインを使っている関係で次のようになりますが、使っていない場合は別の方法になると思います。'.html';}全体としては次のようになります。2);これでブラウザからソース表示で確認してみると次のように変わりました。/>固定ページに拡張子「.html」を付ける一応、今回のカスタマイズにも関係ありますし、初めてこのページを見て知った方のために記しておきます。次のコードをfunctions.phpに追記すると固定ページの拡張子を「.html」にすることができます。'%pagename%.html';});※最近では理由が無い限りは拡張子を付ける意味は無くなってきていると思います。>「表示設定」で「フロントページの表示」を「固定ページ」にして「投稿ページ」で設定したページについてです。他のカテゴリページや年月ページなど一覧系ページに影響が出てないか確認しておきます。判定を入れているのはそういう意味でもあります。ちなみに、他の一覧ページでの2ページ目以降は次のような形でデフォルトのままとします。/page/2/page/3従来のURLから転送させるここまでの作業では次の形式のどちらでもアクセスできる状態になっています。次を加えて転送するようにしておきます。今回のこのカスタマイズを行うためにGoogleを使って似たようなことをやっている方がいないか色々探して回りました。wordpressのソースコードをあちこち見て回りました。次の2点が分かりました。web上で似たような情報が見つからない(検索の仕方が悪かったかもしれません)wordpressはページングURLを自由にカスタマイズするようには出来ていない気がするそもそもやり方を間違ってる気もする本ページで行ったカスタマイズは見る人が見ると「無理やりやった感」を感じるかもしれません。wordpressのソースコードを追いかけて、関連する個所のどこかでフックできないものかとapply_filtersをひたすら探しました。wp-includes/canonical.phpの272行目で"$wp_rewrite->pagination_base/$page"を見つけたときには「これ無理じゃない?」とも思いました。カスタマイズできるようになってたら、今のご時世ちょっと調べればスグに解決策が見つかりそうなものですし、まだwebに上がってないだけだったとしてもソースコードを見ればどうしたら良いかスグ分かるようになっていると思います。気になるところもあります。時間の関係で深く追えてないのですが、違うやり方もできそうな可能性を見つけています。したらそっちのやり方が正解かもしれません。今回は時間の都合もあり一旦ここまでにします。お問合せ・感想はこちら広告WordPressツイートシェアはてブLINEPocketfeedlywordpressで謎の転送処理されているのを突き止めるwordpressの不要なユーザーを削除するRECOMMENDこちらの記事も人気です。プログラムを中心にwebサイトやアプリなどシステム開発を行っています。高松市から観音寺市に移転しました。プログラムを中心にwebサイトやアプリなどシステム開発を行っています。高松市から観音寺市に移転しました。