web-dev-qa-db-ja.com

Add_rewrite_ruleとページネーションの問題(pagedとpage query_vars)

私はlocationという名前のカスタム分類法を持っていて、それぞれの用語に 'news'や 'marketplace'のようなセクションを追加したいので、私のURLは/location/montreal/news/のようになります

改ページを追加しようとするまでは完璧に動作します。これが私のコードです:

add_action( 'init', 'region_rewrite' );
function region_rewrite()
{
    global $wp;
    $wp->add_query_var( 'section' );

    add_rewrite_rule(
      '^location/([^/]*)/([^/]*)/page/([0-9]+)/?',
      'index.php?location=$matches[1]&section=$matches[2]&paged=$matches[3]',
      'top'
    );
    add_rewrite_rule(
      '^location/([^/]*)/([^/]*)/?',
      'index.php?location=$matches[1]&section=$matches[2]',
      'top'
    );
}

書き換えアナライザプラグインを使用しています query_varsの場所、セクション、およびページングに正しい値が割り当てられているようです。しかし、/location/montreal/news/page/2のようなページURLにアクセスしようとすると404エラーが発生します。また、page変数の値が/2であることにも気付きました。 404が見つからないのはこのためです。

任意の助けは大歓迎です!

最初にチェックされるように、ページングされたadd_rewrite_urllastを呼び出すだけでよいと思います。そうでなければ、ページングされていないバージョンが常に最初にマッチするので、ページングされたバージョンは決してマッチしません。引数から 'top'を削除してもうまくいくはずです。

また、カスタムリライトを扱う際に404をデバッグするのに良い方法についてはこのページをチェックしてください: http://www.dev4press.com/2012/tutorials/wordpress/practical/debug-wordpress-rewrite-rules-matching/

1
Olivier

オリヴィエに感謝します。私自身の問題は、add_rewrite_urlがすべての投稿ではなくページに対して正常に機能していたことです。

パーマリンク設定で%postname%/のみを使用している場合、投稿に対して機能しました。 /%category%/%postname%/を使用している場合、つまり、http://me.com/test/post/my-next-bit-that-url-rewrite-should-act-onがワードプレスの標準的な動作のために、http://me.com/test/post/my-next-bit-that-url-rewrite-should-act-onへの301リダイレクトを保持している場合、投稿URLの後にビットを失い続けました

以下の行はこの問題を止めました。

remove_filter('template_redirect', 'redirect_canonical');

コーデックスで提案されるべきだと思います。

0
GordoF