web-dev-qa-db-ja.com

add_rewrite_rule - 正常に動作しているがページネーションのために壊れている

私の設定は次のとおりです。

  • 「地域」と呼ばれる分類
  • 「scotland」のようなこの分類法の用語
  • この単一分類法を使用するさまざまな投稿タイプ

以下の書き換え規則を使用して、以下の形式の機能的なパーマリンクを実現しました。

add_rewrite_rule(
    'region/([^/]+)/([^/]+)/([^/]+)/?',
    'index.php?taxonomy=region&term=$matches[1]&post_type=$matches[3]',
    'top'
);

これは私に機能的なURLを与えます:
http://example.com/region/scotland/type/event/
これはまさに私が必要とするものです(region/[scotland] =分類法、type/[event] = post type)

しかし、私は次のURLフォーマットで改ページを処理するために追加のadd_rewrite_ruleを追加しようとしました(私は本当に正規表現にうまく乗れません!)次のことを達成してください。

http://example.com/region/scotland/type/event/page/1
http://example.com/region/scotland/type/event/page/2
http://example.com/region/scotland/type/event/page/3

1つの書き換え規則が正しく機能しているので、もうすぐそこにあると思いますが、さまざまなことを試した後で、ページ付けを実現するための正しい正規表現と書き換え規則の組み合わせを実現できなかっただけです。正しく機能する、このクエリに対するそれほど美しくないパーマリンクは、次のとおりです。

http://example.com/index.php?taxonomy=region&term=scotland&post_type=event&paged=1

5
Jonnyauk

やってみました:

主なもの:

add_rewrite_rule( 'region/([^/]+)/type/([^/]+)/?', 'index.php?taxonomy=region&term=$matches[1]&post_type=$matches[2]', 'top' );

ページ区切り用

add_rewrite_rule( 'region/([^/]+)/type/([^/]+)/page/([0-9]{1,})/?', 'index.php?taxonomy=region&term=$matches[1]&post_type=$matches[2]&paged=$matches[3]', 'top' );

私は([^/]+)の1つをリテラルの 'type'に置き換えましたが、これは動的変数ではないようです。

ページ区切りが機能しない場合は、宣言時の順序を変更します。つまり、他の書き換え規則の前後に並べ替えます。問題の多くは、どのルールが最初に実行されるかに影響を及ぼします。

また、 Rewrite Rules Inspectorプラグイン は、特定のURLに対してどの書き換えルールが実行されているかを判断するのに非常に役立ちます。

17
Rachel Carden

順序の問題は、あなたが書く必要があります:

add_rewrite_rule( 'region/([^/]+)/type/([^/]+)/page/([0-9]{1,})/?', 'index.php?taxonomy=region&term=$matches[1]&post_type=$matches[2]&paged=$matches[3]', 'top' );

add_rewrite_rule( 'region/([^/]+)/type/([^/]+)/?', 'index.php?taxonomy=region&term=$matches[1]&post_type=$matches[2]', 'top' );
0
user671420