WordPressのカスタム投稿タイプはテーマの再インストール時にパーマリンクを壊します
-
-
これは問題ではありません.あなたが説明したことは正常です.そして健康的です.This is a non-issue. What you described is normal. And healthy.
- 0
- 2010-10-21
- John P Bloch
-
また、これはおそらく単なるタイプミスでしたが、貼り付けたコードを考えると、上記のURLには「/products/」ではなく「/product/」と表示されているはずです.Also, it was probably just a typo, but, given the code you've pasted, the url above should say `/product/` not `/products/`.
- 0
- 2010-10-21
- John P Bloch
-
ねえジョン、はい、それはタイプミスです.URLの例はhttp://www.mywebsite.com/product/product-nameである必要があります.Hey John, yes that is a typo. The example url should be http://www.mywebsite.com/product/product-name.
- 0
- 2010-10-21
- jnthnclrk
-
WPがCPTのパーマリンクを忘れる理由がわかりません.確かに、テーマを再インストールすると、functions.phpはcptをビルドし、パーマリンクを期待どおりに機能させる必要がありますか?I don't understand why WP forgets the permalink for the CPT. Surely, when I re-install my theme, functions.php should build the cpt and make the permalinks work as expected?
- 0
- 2010-10-21
- jnthnclrk
-
タイプミスに反対票を投じることはありがたいです.この問題は私にとってまだ問題であり、それを修正する方法を見つける手助けが大好きです.I don't appreciate getting a negative vote for a typo. The issue is still a problem for me, and I love some help figuring out how to fix it.
- 0
- 2010-10-21
- jnthnclrk
-
反対票は私ではありませんでした.Negative vote wasn't me.
- 0
- 2010-10-21
- John P Bloch
-
CPTはパーマリンク構造を登録しますが、データベースにパーマ構造を追加するために何もしません(これはWPがコンテンツをチェックするために使用するものです).これらのルールをデータベースに追加するには、書き換えルールをフラッシュする必要があります.これには、ページの読み込みごとに使用すべきではない多くのプロセッサリソースが含まれます.CPT's register the permalink structure, but don't do anything to add the permastruct to the database (which is what WP uses to check for content). To add those rules to the database you need to flush the rewrite rules. This involves lots of processor resources that shouldn't be used every page load.
- 0
- 2010-10-21
- John P Bloch
-
1 回答
- 投票
-
- 2010-10-21
The new permalink structure is only saved when
WP_Rewrite::flush_rules()
is called. Because this is an expensive operation (calculating the new rules and saving them to the database), you should not do it on everyinit
call, but only when you change the structure. The custom post type however must be registered at everyinit
call, since it is saved in a PHP array in memory, not in the database (which is why it forgot the custom post when you switched themes: the permalink structure still existed but referred to a custom post type that was not loaded, giving an error).-
ありがとうございました!これが、flush_rules()が呼び出されたときに[設定]-> [パーマリンク]を参照すると修正される理由を説明しています. ユーザーがこの問題を起こさずにアンインストールして再インストールできるように、テーマとCPTを構成する方法を教えてください.WP_Rewrite ::flush_rules()をfunctions.phpに入れるのは悪い考えだと思いますか?Thank you! That explains why browsing to Settings -> Permalinks fixes it as flush_rules() gets called. Can you tell me how I should configure my Theme and CPT so users can uninstall and reinstall without getting this problem? I guess putting WP_Rewrite::flush_rules() in functions.php is a bad idea?
- 0
- 2010-10-21
- jnthnclrk
-
それとも別の質問としてそれを尋ねるべきですか?Or should I ask that as a separate question?
- 0
- 2010-10-21
- jnthnclrk
-
@trnsfrmr:ほとんどの人は、この種のコードをプラグインに入れてから、[`register_activation_hook()`](http://codex.wordpress.org/Function_Reference/register_activation_hook)を介してそのプラグインのアクティベーションにフックします.これにより、テーマの変更が「存続」します.本当にテーマに入れたい場合は、[`switch_theme`](http://codex.wordpress.org/Function_Reference/switch_theme)アクションにフックしてみてください.@trnsfrmr: Most people put this kind of code in a plugin, and then hook into the activation of that plugin via [`register_activation_hook()`](http://codex.wordpress.org/Function_Reference/register_activation_hook). This will "survive" theme changes. If you really want it in your theme, you could try hooking into the [`switch_theme`](http://codex.wordpress.org/Function_Reference/switch_theme) action.
- 0
- 2010-10-21
- Jan Fabry
-
必要ありません.register_post_type呼び出しの後に次の行を使用して問題を修正しました.flush_rewrite_rules(false);No need, I've fixed the problem by using the following line after my register_post_type call: flush_rewrite_rules( false );
- 0
- 2010-10-21
- jnthnclrk
-
@trnsfrmr:これは機能しますが、データベースをクリアし、ルールを再計算してから再度保存するのに時間がかかるため、お勧めしません.「ハード」フラッシュ( `.htaccess`への書き込み)を行わない場合でも、これにはデータベース操作が必要です.したがって、「適切な」アクティベーションフックを使用することは本当に効果があります.@trnsfrmr: This works, but it is not recommended, because it takes some time to clear the database, re-calculate the rules and then save them again. Even if you don't do a "hard" flush (writing them to `.htaccess`), this requires database operations. So it really pays off to use the "proper" activation hooks.
- 0
- 2010-10-21
- Jan Fabry
これはかなり奇妙な問題です.次の形式を使用して、テーマのfunctions.phpファイルにWordPressカスタム投稿タイプを作成しています.
これにより、製品のURL構造が次のようになります. http://www.mywebsite.com/products/product-name .
ただし、別のテーマ(TwentyTen)に切り替えてから元に戻すと、WordPressはパーマリンクを忘れてしまい、上記のURLを参照すると404ページが表示されます.
私が気付いた本当に奇妙なことは、管理者の[設定]-> [パーマリンク]に移動することでこの問題を修正できることです.これにより、次のテーマのアンインストール/再インストールまで問題が一時的に修正されます.
他の誰かが同様の問題を抱えていましたか?