web-dev-qa-db-fra.com

Comment fixer la pagination après la réécriture de l'URL? c'est à dire. www.site.com/players/type/pro/page/3/

J'ai un type de message personnalisé de players et archive-players.php les répertorie tous à une adresse telle que www.site.com/players.

J'utilise ensuite une URL telle que www.site.com/players?type=pro pour répertorier une autre page réservée aux joueurs professionnels (wp_query modifié en fonction du rôle d'utilisateur personnalisé, d'où la raison pour laquelle je ne fais pas cela uniquement avec une taxonomie). J'ai décidé de réécrire l'URL afin que ce soit www.site.com/players/pro.

La page elle-même fonctionne bien, mais ma question est la suivante: comment puis-je corriger la pagination lorsque l'URL ressemble à www.site.com/players/type/pro/page/3/? pour le moment je me fais une page non trouvée. J'utilise wp page-navi pour la pagination. En fait, la pagination ne fonctionne pas quand je l’ai en tant que ?type=pro.

Le code que j'ai pour la réécriture est ci-dessous. Est-il préférable de réécrire en utilisant wordpress ou mod_rewrite? Je n'ai aucune expérience avec soit. Est-ce que j'y vais de la bonne façon? J'ai lu d'autres questions et articles un peu partout, mais tout me déroute.

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

Vous devez ajouter une autre règle qui mappe le/page/# à la variable & paged = #.

Vraiment cependant, vous faites un peu tout à l’arrière en filtrant le tableau de règles. Appeler add_rewrite_rule pour ajouter vos règles est un peu plus logique.

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

Je ne peux pas commenter, mais la réponse choisie semble obsolète. Avec la dernière version de Wordpress, les règles semblent être vérifiées dans l'ordre, vous devez donc ajouter la règle de réécriture de la pagination pour que cela fonctionne.

par exemple.

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