web-dev-qa-db-ja.com

URLを書き換えた後に改ページを修正するには?すなわち。 www.site.com/players/type/pro/page/3/

私はカスタム投稿タイプがplayersであり、archive-players.phpはそれらすべてをwww.site.com/playersのようなアドレスにリストします。

私はそれからwww.site.com/players?type=proのようなURLを使ってプロプレーヤーだけの別のページをリストアップします(カスタムユーザーロールに基づいてwp_queryを変更しました、それでなぜ分類学でこれをやらないのか)。 www.site.com/players/proになるようにURLを書き換える必要があると思いました。

ページ自体は問題なく動作しますが、私の質問は、URLがwww.site.com/players/type/pro/page/3/のようなものである場合にページ区切りを修正する方法を教えてください。現時点で私はページが見つからないようになっています。改ページにはw​​p page-naviを使用しています。実際、ページ付けは?type=proのようにしてもうまくいきません。

書き換え用のコードは以下のとおりです。 wordpressかmod_rewriteを使って書き直すのが良いですか?私も経験がありません。私はこれについて正しいやり方ですか?私はあちこちでいくつかの他の質問と記事を読みました、しかし全部は私を混乱させます。

function add_query_vars($aVars) {
$aVars[] = "type";
return $aVars;
}

add_filter('query_vars', 'add_query_vars');

function add_rewrite_rules($aRules) {
$aNewRules = array('players/type/([^/]+)/?$' => 'index.php?post_type=players&type=$matches[1]');
$aRules = $aNewRules + $aRules;
return $aRules;
}

add_filter('rewrite_rules_array', 'add_rewrite_rules');
5
Andrew

/ page /#を&paged =#変数にマップする別の規則を追加する必要があります。

とはいえ、実際には、rules配列をフィルタリングすることで、すべて逆方向に行っています。ルールを追加するためにadd_rewrite_ruleを呼び出すだけで、もう少し意味があります。

function plugin_name_add_rewrite_rules() {
  add_rewrite_rule('players/type/([^/]+)/?$',
   'index.php?post_type=players&type=$matches[1]',
   'top');
  add_rewrite_rule('players/type/([^/]+)/page/([0-9]+)?$',
   'index.php?post_type=players&type=$matches[1]&paged=$matches[2]',
   'top');
}
add_filter('init', 'plugin_name_add_rewrite_rules');
10
Otto

コメントできませんが、選択した回答が古くなっています。最新のWordpressバージョンでは、規則は順番にチェックされているように見えるので、これを機能させるにはページネーション書き換え規則を最初に追加する必要があります。

例えば.

function plugin_name_add_rewrite_rules() {
    add_rewrite_rule('players/type/([^/]+)/page/([0-9]+)?$','index.php?post_type=players&type=$matches[1]&paged=$matches[2]','top');
    add_rewrite_rule('players/type/([^/]+)/?$','index.php?post_type=players&type=$matches[1]','top');
}
add_filter('init', 'plugin_name_add_rewrite_rules');
0
moonbas3