web-dev-qa-db-ja.com

Add_rewrite_endpointが/%category%/%postname%/パーマリンク構造と互換性がないのはなぜですか?

WPインストールの任意のURLに追加できるmyvar/myvalue書き換えエンドポイントをEP_ALLに追加しました。それにWPプラグインが作用します。その部分はクールですが、パーマリンク構造が/%category%/%postname%/の場合は機能しません。それはすべての組み込みの選択可能な構造でうまくいきます。それが動作しない他の構造があるかもしれません。

動作しません= 404エラーです。

パスは次のようになります。/mycategory/mypost/myvar/myvalue

Rewriteアナライザープラグインを入手しました。


これではありません...(黄色で強調表示されています)

(.?.+?)/myvar(/(.*))?/?$
ページ名:mycategory/mypost
myvar:myvalue


どうやらこれは慣れますが、まだ寒いです...

.?.+?/([^/]+)/myvar(/(.*))?/?$
添付ファイル:mypost
myvar:/ myvalue


平凡な間違い...

(.?.+?)(/[0-9]+)?/?$
ページ名:mycategory/mypost/myvar
ページ:/ myvalue


これで終わりですが、認識できません!

(.+?)/([^/]+)/myvar(/(.*))?/?$
category_name:mycategory
名前:mypost
myvar:myvalue


そしてglobal $query_string;を出力しています。
attachment=mypost&myvar=%2Fmyvalue(ところで、%2f - スラッシュを含めるべきではありません)。

それで、これがWPのバグであれば誰かが私を啓発することができますか、それとも私がそれについてできることがありますか?

私の考えは大体これです
if ( '/%category%/%postname%/' == $wp_rewrite->permalink_structure ){ ... }
カテゴリと名前を手動でWPに指定してその内容を表示します。しかし、何が...になるのか、そしてこれを何につなげるべきかがわかりません。

1

なぜうまくいかないのですか?よく分かりません。その特定のパターンは親/子ページのリクエストと同じです、WordPressは投稿がその名前で存在するかどうか、またはそれがページであるかどうかを判断するためにいくつかの追加クエリを行う必要があります。あなたがエンドポイントを追加するときにこれがなぜ壊れるのか、私は決定するためのコードを詳しく調べていません。

どのようにしてそれを機能させることができますか? EP_ALLマスクを使用せず、代わりにすべての個々のマスクでOR演算子を使用すると、それらのエンドポイントが正しく解決されるようにルールが構築されます。

例えば:

function wpa_myvar_endpoint(){
    add_rewrite_endpoint( 'myvar', EP_PERMALINK | EP_PAGES );
}
add_action( 'init', 'wpa_myvar_endpoint' );
2
Milo