リライトルールが正しくフラッシュされないという奇妙な問題が発生しています。
私が使って試してみましたflush_rewrite_rules();
とflush_rewrite_rules(true);
。
私もグローバル化しようとした$wp_rewrite
使用$wp_rewrite->flush_rules();
と$wp_rewrite->flush_rules(true);
どちらも書き換えルールを正しくフラッシュしていないようです。これらの呼び出しは、呼び出されたときに実際に書き換えルールをフラッシュしています。どうすればわかりますか?書き換えルールのフラッシュをデバッグするためのソリューションの使用。
現在、プラグインのアクティブ化と非アクティブ化でフラッシュされた書き換えルールがあります。そこに問題はありません。
ユーザーがプラグインを設定するためのプラグイン管理設定ページがあります。一部の設定はパーマリンク構造を調整するため、プラグイン管理設定ページの[設定を保存]で書き換えルールをフラッシュする必要があります。(標準を使用update_option();
)設定を保存します。
指定した設定に応じて、ユーザーが指定した設定と一致するカスタム投稿タイプが作成されることに注意したいと思います。したがって、設定が保存された直後に書き換えルールをフラッシュする必要があります。これは、物事が適切に機能していない場所です。
によって提供された書き換えルールをデバッグするための上記のリンクソリューションは、@toscho
大量の書き換えルールをフラッシュしていることを示しています。ただし、カスタム投稿タイプの単一アイテム、さらにはカスタム投稿タイプのアーカイブにアクセスすると、それぞれが404エラーとして返されます。
カスタム投稿タイプが正しく適切に登録されている。それが問題ではないことは確かです。
プラグイン管理ページの設定を保存するとすぐに続きます。カスタム投稿タイプが作成され、パーマリンク構造が調整され、すべての書き換えルールがフラッシュされます。
その後、カスタム投稿タイプは常に読み込まれinit
、通常どおりに読み込まれます。
なんらかの理由で、前述のように、カスタム投稿タイプの単一セクションまたはアーカイブセクションにアクセスすると404エラーが返されるため、書き換えルールが適切にフラッシュされません。
奇妙な部分ですが、管理パーマリンク設定ページにアクセスし、フロントエンドに戻ってカスタム投稿タイプの単一セクションまたはアーカイブセクションを表示するだけの場合は、期待どおりに魔法のように機能します。
その管理パーマリンク設定ページは、私が実行していないことで、書き換えルールが適切にフラッシュされ、私のものはそうでないことを可能にしますか?
つまり、一時的な解決策として、プラグインの管理設定ページを保存した後、ユーザーを管理パーマリンク設定ページにリダイレクトしていますが、これは理想的な解決策ではありません。私は、プラグインのコード内で適切にフラッシュする書き換えルールを好みます。
WordPressで、書き換えルールをフラッシュしても、すべてのルールがフラッシュされないという点はありますか?
admin_menu
-プラグイン設定ページがWordPressの管理に追加されました。
add_options_page()
-[設定]メニューの下にプラグイン設定ページが追加されました。
設定ページはのコールバックでレンダリングされますadd_options_page()
。これは、$_POST
プラグイン設定の更新と書き換えルールのフラッシュのために処理される場所でもあります。
これはすでに長い質問ですので、有効な回答を生成するのに役立つオフサイトリンクにコードブロックを(提供する場合)提供してもかまいません。
init
投稿タイプを登録するためにロードされるクラスがあります。ページの設定が保存されていて、ページがリロードされると思ったので、init
フックを再度起動して、必要な投稿タイプを登録しました。だから私は投稿タイプがすでにロードされていると考え、オプションを更新し、プラグイン設定ページから書き換えルールをフラッシュするだけで済みました。解決策を見つけた方法について回答を投稿します。
flush_rewrite_rules
だけで、rewrite_rules
オプションを削除して再生成するだけですwp-admin/options-permalinks.php
。ファイルを開いて、これが発生する場所を確認できます。この操作はオプション全体を削除するだけなので、ルールを部分的にフラッシュすることはできません。