web-dev-qa-db-ja.com

add_rewrite_ruleとページネーションの問題

私は問題を抱えていて、正しい書き換えルールを書いています。

基本的に、ここに私が欲しいURLの例があります:

/myPage/mySuPage

それからページネーションと同じ
/myPage/mySuPage/page/3

それから、基本的なページ、2つのパラメータ、ページ付けなし
/myPage/mySuPage/param1/param2

それから、2つのパラメータとページネーションを持つもの
/myPage/mySuPage/param1/param2/page/3

多かれ少なかれ、私はそれが各ケースのための別のルールで動作しているが、私はそれらを続けて入れても、何もうまくいきません。

これが私が書いた規則です。

add_rewrite_rule(
    'myPage/mySuPage/([^/]*)/([^/]*)/?',
    'index.php?pagename=myPage/mySuPage&param1=$matches[1]&param2=$matches[2]',
    'top' );

add_rewrite_rule(
    'myPage/mySuPage/([^/]*)/([^/]*)/page/([0-9]{1,})?',
    'index.php?pagename=myPage/mySuPage&param1=$matches[1]&param2=$matches[2]&pageds=$matches[3]',
    'top' );


add_rewrite_rule(
    'myPage/mySuPage/(.+?)(/page/([0-9]+))?/?$',
    'index.php?pagename=myPage/mySuPage&param1=$matches[1]&param2=$matches[2]',
    'top' );
2
Ludo

最初の2つの書き換え規則は$で終わっていません。これはURLをそこで止めるべきであることを示しています。それで、最後のmyPage/mySuPage/param1/param2/page/3部分を無視することができるだけなので、/page/3はまだ最初のパターンにマッチします。その場合、次の書き換え規則は決して使用されません。

私のRewriteアナライザープラグイン を使うと、書き換え規則を単純化することができました。1つはパラメーターなしで、もう1つはオプションのページングを使用するものです。 。これら2つを1つにまとめることはうまくいきませんでした。オプションのparamsがページング部分を「食って」いるからです。

add_rewrite_rule(
    'myPage/mySuPage(/page/([0-9]+)?)?/?$',
    'index.php?pagename=myPage/mySuPage&pageds=$matches[2]',
    'top'
);

add_rewrite_rule(
    'myPage/mySuPage/([^/]*)/([^/]*)(/page/([0-9]+)?)?/?$',
    'index.php?pagename=myPage/mySuPage&param1=$matches[1]&param2=$matches[2]&pageds=$matches[4]',
    'top'
);
6
Jan Fabry